Настраиваемый тип сообщения Слизняк / Конфликт слагов страницы - Предотвратить использование зарезервированного слага при сохранении страницы?


13

У меня есть собственный тип поста портфолио (слизняк) в моей теме, и все работает хорошо, кроме одной вещи. Когда люди создают страницу с небольшим количеством портфолио, например: example.com/portfolio, тема думает, что я хочу использовать страницу архива с пользовательским типом записи, а не мою страницу, созданную в редакторе.

Могу ли я как-нибудь «зарезервировать» портфель слагов при сохранении страниц, чтобы быть уверенным, что он никогда не будет использован, возможно, переименован в страницу портфолио?

Мой проект использует методы, описанные в этом руководстве, вот конфликт, о котором я говорю:

«Помимо необходимости исправления кода, здесь есть еще одна загвоздка, заключающаяся в том, что вы не можете называть свой плагин страницы тем же, что и ваш пользовательский слаг типа сообщения. Думайте о своем пользовательском слаге типа сообщения как зарезервированном ключевом слове; заголовок вашей страницы совпадает с именем вашего слага типа поста, если ваш слаг страницы - это нечто иное. " - http://wp.tutsplus.com/tutorials/custom-post-type-pagination-chaining-method/

Спасибо за любой совет!


Один из вариантов, который я вижу, состоит в том, чтобы удалить это из register_post_type () init: 'rewrite' => array ('slug' => 'portfolio', 'with_front' => true) и просто установить 'rewrite' => false и просто жить с уродливыми «одиночными» элементами портфолио.
Хинс

Проголосуйте за ваш вопрос, так как даже я хочу знать ответ! Я пару раз работал с пользовательскими постами, но никогда не замечал этого, а теперь, прочитав ваш вопрос, попробовал. Вы правы, WordPress запутывается здесь!
Рутвик Гангурде

Ответы:


13

Следующие 2 фильтра позволяют вам подключиться, когда WordPress проверяет слаг и находится в функции wp_unique_post_slug () в файле wp-includes / post.php.

Есть 2 фильтра, один для иерархических постов и один для неиерархических. Иерархический фильтр предоставляет идентификатор для родительского поста, поэтому, если $ post_parent равен 0, вы знаете, что это «базовый» пост.

Фильтры также передают $ post_type, если вы хотите добавить определенные типы записей в вашу логику.

Возвращая «true», вы говорите WordPress, что этот слаг плох, поэтому WordPress добавляет суффикс, как если бы вы пытались нам использовать название / слаг поста, который уже занят.

add_filter( 'wp_unique_post_slug_is_bad_hierarchical_slug', 'portfolio_is_bad_hierarchical_slug', 10, 4 );
function portfolio_is_bad_hierarchical_slug( $is_bad_hierarchical_slug, $slug, $post_type, $post_parent ) {
    if ( !$post_parent && $slug == 'portfolio' )
        return true;
    return $is_bad_hierarchical_slug;
}

add_filter( 'wp_unique_post_slug_is_bad_flat_slug', 'portfolio_is_bad_flat_slug', 10, 3 );
function portfolio_is_bad_flat_slug( $is_bad_flat_slug, $slug, $post_type ) {
    if ( $slug == 'portfolio' )
        return true;
    return $is_bad_flat_slug;
}

По какой-то причине я все еще сталкиваюсь с той же проблемой
Tan-007

1

Создайте страницу с фрагментом «портфолио» и сделайте ее «Приватной». Это будет скрыто от общественности при резервировании пули от дальнейшего использования.


1

Именно с этой проблемой сталкивался при исследовании проблемы нумерации страниц. У нас есть домашняя страница новостей (slug "news"), и нумерация страниц не удалась ... попытки попасть на / news / page / 2 / всегда приводили к '404 - Not Found'.

Проблема, как оказалось, заключалась в том, что нашему пользовательскому типу новостей также был присвоен элемент «новости». При изменении последнего (например, на «news_archive») проблема была исправлена. Это оставило исходные URL-адреса новостей без изменений. Изменение блока новостей на главной странице также работало, но тогда все URL-адреса включали бы измененный фрагмент.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.