我接到一位客户的请求,这让我有点头疼!他们想要一个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
但我不希望这些帖子被谷歌编入索引或被网站访问者使用。你知道我如何让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();
}
最合适的回答,由SO网友:birgire 整理而成
你可以尝试强制404
使用this 方法:
/**
* 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()
如果要允许登录的用户查看警报,请选中,或者! current_user_can( \'some_capability\' )
对于某些用户的能力要求。