如何在不清除其他过滤器的情况下修改插件中的循环?

时间:2014-02-21 作者:Matt

我正在尝试修改the_loop 插件的输出。我已经调查过了pre_get_posts, 这肯定有效,但我需要通过自定义分类法过滤循环。我可以用$query->set(\'tax_query\',$my_tax_new_query), 但问题是,这会覆盖以前可能已设置的任何分类查询。它应用了我的查询INSTEAD 前一个查询的IN ADDITION TO IT. 如何在不删除之前的查询的情况下向循环应用额外的分类过滤器?

编辑:

例如:

function myplugin_filter_the_loop($query) {

    $taxonomy = \'hobbies\';
    $exclude_terms = array(\'biking\',\'swimming\',\'horsebackriding\');

    $query->set(\'tax_query\',$exclude_terms)

}
add_filter(\'pre_get_posts\',\'myplugin_filter_the_loop\');
这是可行的,但它将取代以前定义的tax_query 在循环中。

编辑2:

替代使用posts_where:

function myplugin_filter_the_loop($where) {

    $relationship_ids = array(97,98,99);

    foreach ( $relationship_ids as $id ) :

        $where .= " AND ( wp_posts.ID NOT IN ( SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id IN ($id)"

    endforeach;

}
add_filter(\'posts_where\',\'myplugin_filter_the_loop\');
为了实现这一点,我只需要通过term\\u id或slug等获得相应的关系id。

1 个回复
SO网友:Otto

使用$tax_query = $query->get( \'tax_query\' ); 要获取现有的tax\\u查询,请通过添加您的更改对其进行修改,然后使用$query->set( \'tax_query\', new_$tax_query ); 把整件事都放回去。

结束

相关推荐

Count post views in loop

我正在尝试显示博客页面上每个帖子的帖子视图(所以在循环中)。我在函数中使用以下代码进行了尝试。php: // function to count views. function setAndViewPostViews($postID) { $count_key = \'views\'; $count = get_post_meta($postID, $count_key, true); if($count==\'\'){ $