如何检查是否请求了提要URL?

时间:2019-09-09 作者:Rafael Carneiro de Moraes

我正在写一个插件来阻止一些匿名用户访问我的网站。我已经阻止了一些页面,但无法识别提要页面my-wordpress-site.com/feed.

我尝试过:

  • $GLOBALS[\'pagenow\'] == \'feed\'
  • is_feed()
  • is_page(\'feed\')$_SERVER[\'REQUEST_URI\'] 和$_SERVER[\'PATH_INFO\']
2 个回复
最合适的回答,由SO网友:freejack 整理而成

您尚未指定代码运行的确切时间,但可以挂接到“request”以检查请求的页面:

add_filter( \'request\', function( $request ){
    if( isset( $request[\'feed\'] ) ){
        //This is a feed request
    }
    return $request;
});
当请求的页面是提要时$request, 它是一个查询变量数组,将包含一个名为“feed”的项,该项用feed的名称设置,例如“rss”。https://codex.wordpress.org/Plugin_API/Filter_Reference/request

SO网友:cjbj

您没有指定要挂接操作的位置,但很可能挂接得太早,因为is_feed 应该真正做到这一点。让我们看看WordPress hook order.

正如您所看到的,插件的常见挂钩是init. 然而,此时WP尚未完全加载。仅在wp_loaded 钩子,WP开始处理查询。因为is_feed 是的函数$wp_query 类,它不会返回true 在这一点之前。

因此,您仍然可以将插件的主要功能挂接到init, 但您必须确保在该函数中为后面的挂钩添加操作。最符合逻辑的挂钩是template_redirect, 因为你想要的是为一些用户提供一个不同的(空)页面。这相当于:

 [inside your plugins main function]
 add_action (\'template_redirect\',\'wpse346949_redirect_feed\');

 [elsewhere in your plugin]
 function wpse346949_redirect_feed () {
   if (is_feed () && ( ... other conditions ... ) ) {
     wp_redirect (home_url ());
     die;
     }
   }
这将引导用户访问您的主页,但您当然可以指定任何其他页面,甚至可以通过根本不重定向它们而直接切断页面呈现来将它们发送到树林中。

相关推荐

PHP文件不能在WordPress文件夹中工作,但可以在另一个虚拟主机中工作

因此,基本上我制作了一个php文件,该文件用两个参数(订单总数和订单号)调用,它会弹出一个带有EPC二维码的png(因此人们只需扫描它,他们的银行应用程序就会填写所有细节)。这个文件在一个空的虚拟主机中工作,但当我把它放在wordpress目录/虚拟主机中的任何位置时,它都无法工作。是否存在阻止非wordpress php文件执行的设置?