web-dev-qa-db-ja.com

スティッキーポストクエリでなぜignore_sticky_posts

Ignore_sticky_postsがあなたのカスタムクエリからスティッキー投稿を除外するために使用されていることを私達は皆知っています。

しかし、なぜコーデックスページ https://codex.wordpress.org/Sticky_Posts に、スティッキー投稿のクエリでignore_sticky_postsが使われているのですか。

$args = array(
'posts_per_page' => 1,
'post__in'  => get_option( 'sticky_posts' ),
'ignore_sticky_posts' => 1
);
$query = new WP_Query( $args );

これはとても混乱して意味がありません、あなたはそれを望んでいますが、それでもあなたはそれを除外しますか?

7
吉 宁

ignore_sticky_postsはあなたのカスタムクエリからスティッキーポストを除外するために使用されることを私達は皆知っています。

- いいえ、この仮定は間違っています。


ignore_sticky_postsの意味

自然な英語ではありますが、ignore_sticky_postsはWordPressがクエリからのすべての付箋投稿を無視するべきであるように聞こえます、実際にはそれはWordPressがすることではありません。代わりに、次のように'ignore_sticky_posts' => 1引数を読む必要があります。

ignore_sticky_poststrueまたは1に設定されている場合、WordPressはカスタムクエリ内のスティッキーポストを設定するためのプロシージャを無視するになります。


ignore_sticky_postsが設定されていないときにWordPressがすること:

'ignore_sticky_posts' => 1が何をするのかを明確に理解するためには、ignore_sticky_posts引数が設定されていない場合、またはfalseまたは0(デフォルト)に設定されている場合のWordPressの動作を理解する必要があります。

  1. スティック投稿の一部である投稿がクエリ結果内にある場合、WordPressはそれらをクエリ結果の一番上にプッシュします。

  2. スティッキーポストがクエリ結果内に存在しない場合、WordPressはそれらのスティッキーポストをデータベースから再度取得し、それらをクエリ結果の先頭に設定します。

そのため、引数が'ignore_sticky_posts' => 1に設定されている場合、WordPressは単に上記の手順を無視しますのようになります。特にそれらを除外するものではありません。そのためにはpost__not_in引数を設定する必要があります。


コーデックスの例の説明

それでは、コーデックスから例を見てみましょう。

$args = array(
    'posts_per_page' => 1,
    'post__in'  => get_option( 'sticky_posts' ),
    'ignore_sticky_posts' => 1
);
$query = new WP_Query( $args );

ここでコーデックスは'ignore_sticky_posts' => 1効率的にするために、これ以上のことはしないを設定するだけです。持っていなくても、あなたは同じ期待された結果を得るでしょう:

$args = array(
    'posts_per_page' => 1,
    'post__in'  => get_option( 'sticky_posts' )
);
$query = new WP_Query( $args );

ただし、この場合、'ignore_sticky_posts' => 1引数が設定されていないため、(この例からの)これらの結果はすべてスティッキポストにすぎませんが、WordPressはスティッキポストを結果の先頭に設定する手順をすべて実行します。


WordPressで何かを学ぶ最善の方法は、コアのCODEを調べることです。もっと明確に理解するために、 WordPress CODEのこの部分 を調べてください。

13
Fayaz