Спеціальний тип публікації Slug / Page Slug Conflict - запобігання використанню зарезервованого слизу на сторінці збереження?


13

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

Чи можу я якось "зарезервувати" портфоліо слизів, коли сторінки зберігаються, щоб переконатися, що вони ніколи не використовуються, може бути перейменовані на сторінку-портфоліо?

Мій проект використовує методи, викладені в цьому підручнику, ось конфлікт, про який я маю на увазі:

"Окрім того, щоб виправити код, тут є ще одна уловка, що ви не можете називати свою сторінку Slug тим самим, що і ваш власний тип публікації. Подумайте про свій спеціальний тип пошти як зарезервоване ключове слово; однак, ви можете зробити заголовок вашої сторінки те саме ім'я, що і ваш користувальницький тип публікації, лише до тих пір, поки у вашому "Службі сторінки" щось інше. " - 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 тут заплутався!
Rutwick Gangurde

Відповіді:


13

Наступні два фільтри дозволяють вам підключитися, коли WordPress перевіряє слизу та знаходяться у функції wp_unique_post_slug () у файлі wp-include / 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

Я точно зіткнувся з цією проблемою, коли досліджував проблему сторінки. У нас є домашня сторінка новин (слуга "новини"), і невдало пропагування сторінки ... спроби потрапити на / news / page / 2 / завжди призводили до "404 - не знайдено".

Проблема виявилася в тому, що нашому користувальницькому типу Новин також було надано кулі "новини". Змінивши останню (наприклад, на "news_archive"), проблема була виправлена. Це залишило оригінальні посилання URL-адрес новин без змін. Змінення слизу домашньої сторінки News також працювало, але тоді всі URL-адреси включали б змінений.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.