如何正确使用带有‘Child_of’的Get_Pages()用子页面替换页面

时间:2015-02-20 作者:360zen

我正在努力获得我想要的结果。在谷歌上搜索了几个小时后,我决定向大家寻求帮助。

我试图查看当前(查询的)页面的子页面,如果该页面在特定分类中有特定的术语,则显示子页面内容,而不是最初查询的页面。因此,我有以下几点:

function site_child($pid) {

    $site_term = io_multi_get_var(\'term\', null);  //this is working properly from another function
    $args = array(
        \'child_of\' => $pid,
        \'hierarchical\' => 0,
        \'parent\' => $pid,
    );
    // http://codex.wordpress.org/Function_Reference/get_pages
    $children = get_pages($args);

    foreach ($children as $child) {

        if ( has_term($site_term,\'site_assign\',$child) ) {
            return $child->ID;
        }
    }
    return false;
}

// modify the PAGE main query
add_action( \'pre_get_posts\', \'replace_content_with_child\' );
function replace_content_with_child( $query ) {

    if( $query->is_main_query() && !is_admin() && is_page() ) {

        if( $sitechild = site_child($query->query_vars[\'page_id\']) ) {
            $query->query_vars[\'page_id\'] = $sitechild;
        }
    }
}
这种方法实际上在主页上非常有效。找到了“主页”的子页面,并更改查询以显示该页面。然而,例如,当我在/关于我们/任务/上尝试时,我没有得到任何结果(即使有一个子页面符合条件)。如果我在“主页”上var\\u dump($children),我会得到一个结果:正确的结果。如果我在另一个页面上var\\u dump($子页面),我只会得到所有顶级页面的数组(没有任何子页面)。我做错了什么?我在没有“parent”参数和“child\\u of”参数的情况下尝试了此操作。我不知道是否只是没有找到正确的参数组合,或者在我尝试的过程中是否存在根本性的缺陷。。。

任何帮助都将不胜感激。

编辑:如果我在主页以外的任何页面上转储var\\u($pid),我将收到“int(0)”。我想这是问题的根源。关于$query->query_vars[\'page_id\'] 未生成当前页的实际ID。

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

好了,我已经解决了。我只需要更换$query->query_vars[\'page_id\'] 具有get_queried_object_id() 一切都正常!

然而,我刚刚读到皮特的回应,根据法典,这似乎确实是行不通的。但很奇怪,因为它正在发挥作用。我想我们会看看是否有东西坏了。。。

结束

相关推荐