Intereting Posts

Использование настраиваемого типа сообщений только для RSS-канала

У меня был запрос от клиента, который вызывает у меня головную боль! Они хотят, чтобы RSS-канал показывал контент, который не отображается нигде на веб-сайте.

Я зарегистрировал новый пользовательский тип сообщения (удаленный код);

$alert_args = array( 'public' => false, 'show_ui' => true, 'label' => 'Alerts', 'has_archive' => true, 'supports' => array( 'title', 'editor' ), ); register_post_type( 'alerts', $alert_args ); 

Для того, чтобы RSS-канал работал, кажется, мне нужен public аргумент, установленный в TRUE но я не хочу, чтобы эти сообщения индексировались Google или использовались посетителями веб-сайта. Любая идея, как я могу заставить RSS-канал работать самостоятельно?

Спасибо, Дэн.

—РЕДАКТИРОВАТЬ—

Обратите внимание: в итоге у меня было изменение get_post_type() на get_query_var( 'post_type' ) потому что первое не работает с страницами шаблонов архива. См. Код;

 if( 'alerts' === get_query_var( 'post_type' ) && ! is_feed() ) { $GLOBALS[ 'wp_query' ]->set_404(); status_header( 404 ); nocache_headers(); } 

Solutions Collecting From Web of "Использование настраиваемого типа сообщений только для RSS-канала"

Вы можете попробовать форсировать 404 используя этот метод:

 /** * Force 404 on all "alerts" custom post type pages except for the feed * * @see https://wordpress.stackexchange.com/a/162303/26350 */ add_action( 'template_redirect', function() { if( 'alerts' === get_post_type() && ! is_feed() ) { $GLOBALS['wp_query']->set_404(); status_header( 404 ); nocache_headers(); } } ); 

со следующей настройкой:

 $alert_args = array( 'public' => true, 'show_ui' => true, 'has_archive' => true, 'exclude_from_search' => true, 'label' => 'Alerts', 'supports' => array( 'title', 'editor' ), ); register_post_type( 'alerts', $alert_args ); 

чтобы разрешить доступ только к фиду для настраиваемого типа сообщений alerts .

Вы также можете рассмотреть возможность добавления дополнительного ! is_user_logged_in() ! is_user_logged_in() , если вы хотите разрешить ! is_user_logged_in() пользователей просматривать предупреждения или ! current_user_can( 'some_capability' ) ! current_user_can( 'some_capability' ) для некоторых требований к возможностям пользователя.