Разрешить настраиваемое имя типа сообщения против конфликта константы страницы (тот же самый пул)

У меня есть пользовательский тип сообщения, называемый «visningshus», а также страница с этой пулей. Это так, как должно (должно) быть.

В настоящее время « http://my-site.com/visningshus » содержит список всех сообщений этого типа. Я хочу показать страницу, на которой есть ссылка permalink.

Как я могу заставить WordPress не заставлять имя типа сообщения иметь приоритет, а вместо этого – постоянную ссылку и показывать страницу?

Самый простой способ – просто отключить страницу архива для этого CPT:

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

Не забудьте обновить ваши постоянные ссылки в разделе «Настройки»> «Постоянная ссылка»)

У меня недостаточно высокая репутация, чтобы комментировать запись @ Carl, но его правильный ответ (по крайней мере, в этой ситуации, когда содержимое slug и пользовательский пул сообщений одинаковы и не используют файл archive.php)

Но его ответ привел бы к ошибкам с разбивкой на страницы. Чтобы избежать ошибок разбивки на страницы:

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

Это смотрит на разбиение на страницы, захватывает номер страницы, а затем на оборотной стороне заставляет ее использовать страницу с соответствующим слипом, а затем вставляет переменную страницы.

Это в дополнение к 'has_archive' => false, вышеописанное должно обеспечить желаемую функциональность.

Как указывалось другими, не забудьте сбросить правила перезаписи, посетив «Настройки»> «Постоянная ссылка» после внесения этого изменения.

Надеюсь, это помогает кому-то, потому что я знаю, что это сильно заглохло меня надолго.

Тена Хенрик!

Я думаю, все, что вам нужно сделать, это добавить правило перезаписи к правилам перезаписи WordPress, которые уже созданы. Добавьте этот фрагмент кода к своим функциям.php вашей темы или включите его в отдельный pugin …

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

Я решил это без разрешения конфликта. Создайте страницу с slug visningshus и напишите все, что хотите. Обратите внимание на идентификатор этой страницы.

Создайте и настройте шаблон archive-custom-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-адресом.

Позвольте мне знать, что это работает.

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

 'has_archive' => false 

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

 add_rewrite_rule