Вирішіть назви користувальницького типу публікації проти конфлікту постійної посилання на сторінку (той же слуп)


19

У мене є власний тип публікації під назвою "visningshus", а також Сторінка з цим слизом. Це так, як має бути (повинно) бути.

Наразі " http://my-site.com/visningshus " перелічує всі публікації цього типу. Я хочу показати сторінку, на якій замість цього є постійний шланг.

Як я можу змусити Wordpress не зробити так, щоб ім’я типу публікації брало перевагу, а замість того, як постійна посилання, і показувати сторінку?

Відповіді:


33

Найпростіше було б просто відключити сторінку архіву для цього CPT:

register_post_type( 'visningshus',
    array(
        [...]
        'has_archive' => false,
        [...]
    )
);

Не забудьте згодом оновити постійні посилання у розділі "Налаштування> Постійні посилання"


1
Працювало чудово - але тепер усі постійні посилання, починаючи з імені користувальницького типу публікації, дають 404, незважаючи на те, що вони є правильними у wp-адмініструванні, і, здається, перезапис не відбувається. Тобто, всі посилання на сайт є правильними на сайті, але всі користувацькі пости дають 404. Чи можете ви допомогти у цьому? :)
Генрік Ерландссон

@HenrikErlandsson Можливо, тип вашої публікації має однакову назву сторінки. У цьому випадку рекомендую змінити ім’я типу вашої пошти. Приклад: Ім'я типу власного допису - Раніше: продукти після: cpt_products.
Бруно Монтейро

Дуже розумний. Вирішує купу проблем
bysanchy

8

У мене недостатньо висока репутація, щоб коментувати публікацію @ Карла, але його правильна відповідь (принаймні, на таку ситуацію, щоб зберігати слизьку сторінки та користувацький тип публікації однаковою і не використовувати файл archive.php)

Але його відповідь дала б помилки з використанням сторінки. Щоб уникнути помилок сторінок:

add_rewrite_rule('^visningshus/page/([0-9]+)','index.php?pagename=visningshus&paged=$matches[1]', 'top');

Це дивиться на сторінку, захоплює номер сторінки, а потім на зворотному боці змушує її використовувати сторінку з відповідним слизом, а потім вставляє змінну сторінки.

Це на додаток до 'has_archive' => false,розміщені вище , повинні досягти бажаної функціональності.

Як зазначали інші, не забудьте спробувати правила переписання, відвідавши Налаштування> Постійні посилання після внесення цих змін.

Сподіваюсь, це комусь допоможе, бо я знаю, що це мене наткнуло насправді довго.


4

Тіна Генрік!

Я думаю, що все, що вам потрібно зробити, - це додати правило переписання до вже створених правил Wordpress Rewrite. Додайте цей фрагмент коду в свою функцію.php вашої теми або включіть її як окремий модуль ...

add_action('init', function () {
     add_rewrite_rule('visningshus/?$','index.php?pagename=visningshus', 'top');
     flush_rewrite_rules();
}, 1000);

4
Якщо хтось цим користується, видаліть flush_rewrite_rules();Ви не повинні змінювати правила перезапису initкожен раз. Перезавантажте один раз, потім видаліть його або вручну очистіть постійні посилання, перейшовши до налаштувань постійної посилання на панелі адміністратора та натисніть "Зберегти зміни"
tehlivi

0

Я вирішив це, не вирішуючи конфлікт. Створіть сторінку зі слуховим візінгом та напишіть на ній все, що завгодно. Візьміть на замітку ідентифікатор цієї сторінки.

Створіть і налаштуйте шаблон-архів-користування-post-type.php будь-яким способом (найімовірніше, ви просто використовуєте шаблон сторінки), але замініть частину циклу на

$recent = new WP_Query("page_id=your-page-id");  
while($recent->have_posts()) : $recent->the_post();
    the_content();
endwhile;

Потім, перейшовши на сторінку http://my-site.com/visningshus, ви побачите вміст, яким керує сторінка, за правильним URL-адресою.

Дайте мені знати, що це працює.


Хороша ідея, але це надмірно складно. Ви спробували моє рішення?
kraftner

@kraftner ні, я ні. Я спробую наступного разу. Спасибі!
молоком

Це також має деякі побічні ефекти, такі як заголовок, і все, що все ще створюється, як ніби це сторінка архіву, а не сторінка. Я б не радив використовувати це рішення.
kraftner

Що робити, якщо змінити ідентифікатор сторінки? Це не безпечно.
Джоель Джеймс

0

Не дозволяється голосувати, але + для рішення Carls, register_post_type повинен мати

'has_archive' => false

Простий. Однак, коли ви стикаєтесь із проблемами сторінки, погляньте на це

add_rewrite_rule

0

Що для мене виправлено - це встановлення архіву як помилкового, але також встановлення ієрархічного на хибне під час налаштування мого спеціального типу публікації!


0

Ось загальне рішення для визначення пріоритетності сторінок перед вмістом спеціальних типів публікацій для будь-яких спеціальних службових типів публікації.

// prioritize pagination over displaying custom post type content
add_action('init', function() {
  add_rewrite_rule(
    '(.?.+?)/page/?([0-9]{1,})/?$',
    'index.php?pagename=$matches[1]&paged=$matches[2]',
    'top'
  );
});

Окрім додавання цього фрагмента, ви також повинні переконатися, що ваш власний тип публікації archive = false

і останнє, але не менш важливо, перейдіть на сторінку налаштувань Постійних посилань Налаштування> Постійні посилання (/wp/wp-admin/options-permalink.php) та збережіть поточні налаштування для оновлення структури посилань на сторінці.

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