过滤自定义页面上的多个不同主查询

时间:2013-02-11 作者:Pollux Khafra

好的,我有多个不同的页面模板,其中有一个主查询,我想对循环进行筛选。在我的示例中,我尝试使用一个函数来过滤我的站点的主循环以及页面“new”的主循环。现在,这对于主页来说很好,但使“新”页面返回“未找到页面”,而不使用分配给它的自定义模板。这样做的正确方法是什么?

function fod_filter_main_query( $query ) {

    if( is_front_page() && is_main_query() ) {


        $query->set(\'meta_key\', \'hotness\');
        $query->set(\'meta_value\', 0 );
        $query->set(\'meta_compare\', \'>\');
        $query->set(\'orderby\', \'meta_value_num\' );
        $query->set(\'order\', \'desc\');
        $query->set(\'cat\', -1 );
        $query->set(\'posts_per_page\', 16 );
        $query->set(\'post_type\', array( \'post\',\'fod_videos\',\'fod_music\',\'fod_articles\', \'fod_albums\'  ));

    } elseif  ( is_page(\'new\') && is_main_query() ) {

        $query->set(\'cat\', -1 );
        $query->set(\'order\', \'asc\');
        $query->set(\'posts_per_page\', 16 );
        $query->set(\'post_type\', array( \'post\',\'fod_videos\',\'fod_music\',\'fod_articles\', \'fod_albums\'  ));

    }

}
add_action(\'pre_get_posts\', \'fod_filter_main_query\', 9999);

1 个回复
SO网友:Milo

您不能通过更改页面查询pre_get_posts (以任何方式我都试过)到页面查询以外的其他内容。如果您查看生成的SQL,它会试图查询所有帖子类型以获取pagename 属于new. 如果您设置pagenamenull, 它将返回帖子,但将忽略您尝试设置的任何分类参数。

即使您可以成功地更改查询,它也不再是一个页面,也不会加载页面模板。

我认为处理这个问题最简单的方法就是通过以下途径在模板中创建一个新查询WP_Query.

结束

相关推荐

数组内的WP_QUERY变量

下面带有“\'taxonomy\'=>\'age\'”的数组不起作用,如果我复制并粘贴数组“array(\'19\',\'20\')”来代替变量,它就可以正常工作。我刚开始学习PHP,所以请对我放松:) if($_REQUEST[\"price\"] == 19){$price = \"\'19\'\";} elseif($_REQUEST[\"price\"] == 20){$price = \"array( \'19\', \