このサイトから質問を閲覧した後、私はこれのための回避策を見つけました:
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に対して単一の値のみを受け入れます。
このための任意の解決策は高く評価されています。
ありがとう
あなたはおそらくこのようなことをすることができます。おそらく効率は悪くなりますが、直接の子供ではなく、特定のページのすべての子孫を見つけるべきです。
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');