web-dev-qa-db-fra.com

Filtre de recherche Wordpress uniquement pour Page avec l'enfant de l'enfant de l'enfant de l'enfant de l'enfant

après avoir consulté la question de ce site, j'ai trouvé la solution de contournement pour ceci:

function SearchFilter($query) {
    if ($query->is_search) {
        global $post;
        $query->set( 'post_parent', 21 );
    }
    return $query;
}
add_filter('pre_get_posts','SearchFilter');

Lorsque je le fais, sa seule recherche est l’enfant du parent 21 et non l’enfant du parent 21.

En outre, query_vars accepte uniquement la valeur unique pour post_parent.

toute solution pour cela est très appréciée.

merci

1
skycrew

Vous pouvez probablement faire quelque chose comme ça. C'est probablement moins efficace, mais devrait trouver tous les descendants d'une page donnée plutôt que de simplement diriger les enfants.

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');
2
Yoav Aner