使用筛选器或挂钩重写循环

时间:2011-10-13 作者:Andrei

我正在尝试替换$wp_query 对象,而无需处理创建新模板和创建新WP_Query 对象在那里。

我的目标是将循环可用的数据从该请求的默认值更改为自定义查询。

add_filter( \'pre_get_posts\', \'custom_wpquery\' );

function custom_wpquery( $query ){
global $wp_query;
   if (is_category(121)) {
             if ($wp_query === $query) {
                   $query = new WP_Query(\'page_id=146\');
                   $query->set(\'page_id\', 146);
             }
   }
  return $query;
};
这似乎根本不会影响循环,我做错了什么?

1 个回复
SO网友:Annika Backstrom

这似乎是可行的,但如果这是提供这种覆盖的“正确”方式,我很想听听其他人的意见。我假设您访问的是一个类别归档页面,例如http://www.example.com/category/computers/.

// landing page = 188
// category = "computers" (#8)

function custom_wpquery( $query ){
    // the main query
    global $wp_the_query;

    if ( \'computers\' === $query->get( \'category_name\' ) ) {
        if ( $wp_the_query === $query) {
            // reset and override the active query
            $query->init();
            $query->query( \'page_id=188\' );
        }
    }
};
add_filter( \'pre_get_posts\', \'custom_wpquery\' );
这可能需要测试$query->is_archive, 也

结束

相关推荐

hooks & filters and variables

我是updating the codex page example for action hooks, 在游戏中完成一些可重用的功能(最初是针对这里的一些Q@WA)。但后来我遇到了一个以前没有意识到的问题:在挂接到一个函数以修改变量的输出后,我再也无法决定是要回显输出还是只返回它。The Problem: 我可以修改传递给do_action 用回调函数钩住。使用变量修改/添加的所有内容仅在回调函数中可用,但在do_action 在原始函数内部调用。很高兴:我将其修改为一个工作示例,因此您可以将其复制/粘贴