WordPress搜索筛选器仅适用于具有子项的页面

时间:2011-11-03 作者:skycrew

浏览此网站的问题后,我找到了以下解决方法:

function SearchFilter($query) {
    if ($query->is_search) {
        global $post;
        $query->set( \'post_parent\', 21 );
    }
    return $query;
}
add_filter(\'pre_get_posts\',\'SearchFilter\');
当我这样做时,它只搜索父对象21的子对象,而不是父对象21的子对象。

此外,query\\u vars只接受post\\u parent的单个值。

对此,我们高度赞赏任何解决方案。

谢谢

1 个回复
SO网友:Yoav Aner

你可能可以这样做。它可能效率较低,但应该查找给定页面的所有子代,而不仅仅是直接子代。

function find_descendants($post_id) {
    $descendant_ids = array();
    $pages = get_pages("child_of=$post_id");
    foreach ($pages as $page) { array_push($descendant_ids, $page->ID); }
    return $descendant_ids;
}

function SearchFilter($query) {

    if ($query->is_search) {
        $query->set ( \'post__in\', find_descendants(21) );
    }
    return $query;
}
add_filter(\'pre_get_posts\',\'SearchFilter\');

结束