如何在“PRE_GET_POST”期间检查WP是否对特定的自定义模板执行了默认查询?

时间:2013-06-13 作者:Gniewomir Świechowski

我想修改由我现在正在编写的插件加载的自定义RSS模板的默认查询。如果要执行特定自定义teplate的默认查询,以便我可以修改它,那么签入连接到“pre\\u get\\u posts”的函数的最佳方法是什么?

Answer:

这比我想象的要容易得多。使用中建议的方法时Controlling and customising RSS feeds in WordPress 在重写中可以看到类似的内容index.php?feed=custom_feed 只需检查查询变量,您的操作如下所示:

    add_action(\'pre_get_posts\', \'gs_gscrf_pre_get_posts\');
    function gs_gscrf_pre_get_posts($query) {
        if (!is_admin() && $query->is_main_query() && $query->query_vars[\'feed\'] == \'custom_feed\') {
        // do stuff
        }
    }
检查Rarst explanation, 如果你想知道我为什么要用query_vars无法检查模板。

1 个回复
最合适的回答,由SO网友:Rarst 整理而成

正如你所描述的那样,时间安排不太合适。WP堆芯荷载期间:

主查询被创建并处理为查询变量(使用pre_get_posts 作为能够影响结果的挂钩之一)然后template-loader.php 使用条件(取决于这些查询变量)确定要在以下位置使用的模板pre_get_posts 您无法从技术上检查模板选择,因为这还没有发生。然而,您可以检查的是,查询变量是那些与随后选择的模板相对应的变量。这实际上非常接近。

结束

相关推荐

更改默认RSS提要中的链接URL

我的wordpress feeds帖子项目如下所示:<item> <title>Taste Trail – Lima and Cusco’s Best Eats</title> <link> http://example.com/taste-trail-lima-and-cuscos-best-eats/</link> <comments>http://example.com/t