Как отключить одно представление для настраиваемого типа сообщений?

Я создал собственный тип сообщения:

  register_post_type ( 'sample_post_type', массив (
    'labels' => массив (
        'name' => _x ('Sample Posts', 'post type general name'),
        'unique_name' => _x ('Sample Post', 'сингулярное имя типа сообщения')
    ),
    'public' => правда,
    'show_in_nav_menus' => ложный,
    'exclude_from_search' => правда
));
 

Как отключить одно сообщение для этого типа сообщений? Отображение простого 404 в порядке или перенаправление на главную страницу. Это внутри плагина, поэтому я не могу создать файл single-sample_post_type.php для установки пустой страницы.

35 голосов | спросил passatgt 5 Jpm1000000pmSun, 05 Jan 2014 18:05:33 +040014 2014, 18:05:33

5 ответов


29

Вы можете использовать крючок template_redirect для перенаправления для персонализированного типа сообщения, вы можете использовать любой другой URL-адрес, который вы хотите вместо home_url () , а код ошибки в другой аргумент.

  & л;? PHP
add_action ('template_redirect', 'wpse_128636_redirect_post');

function wpse_128636_redirect_post () {
  $ queried_post_type = get_query_var ('post_type');
  if (is_single () & amp; & amp; 'sample_post_type' == $ queried_post_type) {
    wp_redirect (home_url (), 301);
    Выход;
  }
}
? & GT;
 

<сильный> Обновлено:

Альтернативным подходом было бы установить 'publicly_queryable' => false во время регистрации пользовательского сообщения, как упоминалось ранее @gustavo. Но это просто даст вам 404 напрямую, он скроет как один, так и архив, в основном полностью скрытый от front-end и может быть установлен только для пользовательских сообщений.

ответил sven 5 Jpm1000000pmSun, 05 Jan 2014 18:12:14 +040014 2014, 18:12:14
56

Просто установите аргумент

  'publicly_queryable' => ложный
 

, когда вы вызываете register_post_type ()

ответил Gustavo 28 SunEurope/Moscow2014-12-28T00:38:13+03:00Europe/Moscow12bEurope/MoscowSun, 28 Dec 2014 00:38:13 +0300 2014, 00:38:13
7

Более простой способ сделать это можно передать следующие аргументы при регистрации типа пользовательской публикации

  register_post_type ( 'sample_post_type', массив (
'labels' => массив (
    'name' => _x ('Sample Posts', 'post type general name'),
    'unique_name' => _x ('Sample Post', 'сингулярное имя типа сообщения')
),
'public' => правда,
'exclude_from_search' => правда,
'show_in_admin_bar' => ложный,
'show_in_nav_menus' => ложный,
'publicly_queryable' => ложный,
'query_var' => ложный
));
 
ответил 0v3rth3d4wn 24 Maypm14 2014, 23:01:04
6

Один. Из вашего файла функций.

  add_action ('template_redirect', 'redirect_cpt_singular_posts');
    функция redirect_cpt_singular_posts () {
      if (is_singular ('ваш-cpt-slug')) {
        wp_redirect (home_url (), 302);
        Выход;
      }
    }
 

Два. Из файла single.cpt.php:

  & lt;? php wp_redirect (home_url ()); Выход; ? & GT;
 
ответил Brad Dalton 24 Maypm14 2014, 23:10:43
1

Работая с действительно хорошего ответа Свена, я переписал его функцию, чтобы упростить добавление нескольких типов сообщений с помощью in_array () в инструкции if, а затем перенаправление на страницу архива, а не на домашнюю страницу стр.

(кстати, я думаю, что параметр query_var и /или публично_queryable в false будет отключать не только одиночные представления, но и просмотр собственного архива, переопределяя < code> 'has_archive' => true . В этом случае вы можете настроить пользовательский WP_query и создать свою собственную страницу архива в шаблоне, но основной запрос больше этого не сделает, будет ли это ?)

  function fq_disable_single_cpt_views () {
  $ queried_post_type = get_query_var ('post_type');
  $ cpts_without_single_views = array ('my-post-type', 'my-other-post-type');
  if (is_single () & amp; & amp; in_array ($ queried_post_type, $ cpts_without_single_views)) {
    wp_redirect (home_url ('/'. $ queried_post_type. '/'), 301);
    Выход;
  }
}

add_action ('template_redirect', 'fq_disable_single_cpt_views');
 
ответил slashbob 9 J000000Saturday16 2016, 19:27:21

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132