web-dev-qa-db-ja.com

こどものこどものこどものあるページ専用のワードプレス検索フィルター

このサイトから質問を閲覧した後、私はこれのための回避策を見つけました:

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_varsはpost_parentに対して単一の値のみを受け入れます。

このための任意の解決策は高く評価されています。

ありがとう

1
skycrew

あなたはおそらくこのようなことをすることができます。おそらく効率は悪くなりますが、直接の子供ではなく、特定のページのすべての子孫を見つけるべきです。

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