可以通过feed(RSS、Atom、RDF)使用以下功能使站点完全不可访问:
function itsme_disable_feed() {
wp_die( __( \'No feed available, please visit the <a href="\'. esc_url( home_url( \'/\' ) ) .\'">homepage</a>!\' ) );
}
add_action(\'do_feed\', \'itsme_disable_feed\', 1);
add_action(\'do_feed_rdf\', \'itsme_disable_feed\', 1);
add_action(\'do_feed_rss\', \'itsme_disable_feed\', 1);
add_action(\'do_feed_rss2\', \'itsme_disable_feed\', 1);
add_action(\'do_feed_atom\', \'itsme_disable_feed\', 1);
add_action(\'do_feed_rss2_comments\', \'itsme_disable_feed\', 1);
add_action(\'do_feed_atom_comments\', \'itsme_disable_feed\', 1);
但这会禁用整个站点的提要,即主提要、类别提要、标签提要、评论提要、帖子提要、页面提要、自定义帖子类型提要等。
如何仅禁用main feed 以及main comments feed 网站的?i、 e.仅制造site.com/feed/
和site.com/comments/feed/
无法接近
简单地使用下面的内容隐藏提要是不可取的:
remove_action( \'wp_head\', \'feed_links_extra\', 3 );
remove_action( \'wp_head\', \'feed_links\', 2 );
最合适的回答,由SO网友:s_ha_dum 整理而成
非常非常迅速的非科学研究表明,只有一个query_var
设置为主进给。其他提要(如category、tag、author提要)有多个提要query_var
. 因此,以下操作应杀死主进料,但其他进料应完好无损。
add_filter(
\'pre_get_posts\',
function($qry) {
if ($qry->is_feed()) {
$fvars = array_filter($qry->query_vars);
if (1 == count($fvars)) {
wp_die( __( \'No feed available, please visit the <a href="\'. esc_url( home_url( \'/\' ) ) .\'">homepage</a>!\' ) );
}
}
},
1
);
要删除主评论提要,需要进行一个小的编辑以检查是否存在
$fvars[\'withcomments\']
.
add_filter(
\'pre_get_posts\',
function($qry) {
if ($qry->is_feed() ) {
$fvars = array_filter($qry->query_vars);
if (1 == count($fvars) || isset($fvars[\'withcomments\'])) {
wp_die( __( \'No feed available, please visit the <a href="\'. esc_url( home_url( \'/\' ) ) .\'">homepage</a>!\' ) );
}
}
},
1
);
Be warned: 几乎未经测试。可能是马车
排空警告。不退款。
SO网友:gmazzap
这是的修改版本@s_ha_dum 答复
我同意他的观点,在主提要中设置的唯一变量是\'feed\'
(用于POST feed)和\'withcomments\'
对于主注释提要,但不依赖于当前查询对象变量,并使用array_filter
, 我认为-,也许-,看起来更可靠$wp->query_vars
: 仅包含有效用于运行查询的查询变量的数组:
add_action(\'pre_get_posts\', \'no_main_feeds\', 1);
function no_main_feeds( $q ) {
if ( is_feed() || is_comment_feed() ) {
$vars = $GLOBALS[\'wp\']->query_vars;
unset( $vars[\'feed\'], $vars[\'withcomments\'] );
if ( empty($vars) ) wp_die( \'No feed available\' );
}
}
检查
is_comment_feed()
实际上是不必要的,因为在主评论提要中
is_feed()
是
true
, 但我认为它使代码的意图更加明确,可能也更能证明未来,而且最终不会造成伤害。。。
与这里的其他答案不同,它(应该)适用于任何permalink结构,如果禁用了漂亮的permalinks,也可以。