web-dev-qa-db-ja.com

WP_Query post_parentパラメータは常に現在のページの子を返します

まあタイトルはそれをすべて離れてそれを与えます...

これがコードです:

$args = array(
"post_type" => "page",
"post_parent" => $cat, // runs through a loop of 5, 128, 130
"posts_per_page" => -1
);

print_r($args);

$postsLang = new WP_Query($args);

while ($postsLang->have_posts()) {
    $postsLang->the_post();
    $postID = get_the_ID();
    array_Push($result, $postID);
}
wp_reset_query();

print_r($result);

ここでprint_rは次のように出力します。

Array ( [post_type] => page [post_parent] => 5 [posts_per_page] => -1 ) 
Array ( [0] => 30 [1] => 23 ) 

Array ( [post_type] => page [post_parent] => 128 [posts_per_page] => -1 ) 
Array ( [0] => 30 [1] => 23 ) 

Array ( [post_type] => page [post_parent] => 130 [posts_per_page] => -1 ) 
Array ( [0] => 30 [1] => 23 ) 

そのため、$ argsは正しくクエリに入りますが、結果は常に同じです。現在のページの子のID(ID = 5)です。

Post_parentをstaticに設定して128と言っても、現在のページの子を取得できます。

Post_parentパラメータを削除すると、(必要に応じて)すべてのページが表示されます。

Get_postsにも同じ問題があります。これは構文は正しいと思いますが、post_parentパラメータの動作を誤解している可能性があります。

どんな考えも大歓迎です!

1
Steve222

post_parent は、値としてIDが指定されているページの子ページのみのみを返します

post_parent(int) - 子ページのみを返すにはページIDを使用します。最上位エントリのみを返すには0に設定します。

特定のページだけを表示するには、page_idpagename、またはpost__inを(post_type=pageと共に)使用します。

私はあなたがむしろページを問い合わせるために特にそこにある get_pages を使うことを勧めます。

ここでちょっと注意してください、wp_reset_query()query_postsと一緒に使われます。 wp_reset_postdata()WP_Queryと一緒に使うべきです

-

これは、以下のコメントからの解決策です。

Polylangは新しいカスタムパラメータ "lang"を作成します。このパラメータはデフォルトで ""に見えます。これは any の値で投稿を返すことになっています。代わりに、現在のページの言語値のみを含む投稿を返します(したがって、現在のページID = 5の子のみ)。修正として、私は今 "lang"のすべての値を持つページを取得するために "lang"の利用可能な値を手動でループしています。これがバグなのか、それとも私の環境が原因なのか、プラグインの作者に確認します。

0
Pieter Goosen