web-dev-qa-db-ja.com

WP_Queryから投稿IDを取得しますか?

私は以下から照会された投稿IDの配列を取得することができる方法はあります:

$latest = new WP_Query( array (
    'orderby'               => 'Rand',
    'posts_per_page'        => 3
));

if ( $latest -> have_posts() ) : while ( $latest -> have_posts() ) : $latest -> the_post();

    get_template_part( 'templates/content', 'post' );

endwhile; endif; wp_reset_postdata();

ファローアップ:

私はwp_list_pluckを使って投稿IDの配列を取得しました:

$post_ids = wp_list_pluck( $latest->posts, 'ID' );

その後、関数implodeを使って配列を文字列に変換します。

$post_ids_string = implode( ',', $post_ids );

あいまいな質問でごめんね。

24
Rich

やってみる

$post_ids = wp_list_pluck( $latest->posts, 'ID' );

読み取り wp_list_pluck

40
shanebp

クエリでfields引数を使用してください。

fields(string) - どのフィールドを返すかすべてのフィールドはによって返されます。
デフォルト。他に2つのオプションがあります。 - 'ids' - 投稿IDの配列を返します。 - 'id => parent' - 連想配列[parent => ID、…]を返します。

http://codex.wordpress.org/Class_Reference/WP_Query#Return_Fields_Parameter

$latest = new WP_Query( array (
    'orderby'               => 'Rand',
    'posts_per_page'        => 3,
    'fields' => 'ids'
));
var_dump($latest->posts);
66
s_ha_dum

IDを取得するだけで済み、以前のクエリオブジェクトを設定していない場合は、@ s-ha-dumの解を使用するのが経済的です。

これが理由です:

switch ( $q['fields'] ) {
    case 'ids':
        $fields = "$wpdb->posts.ID";
        break;
    case 'id=>parent':
        $fields = "$wpdb->posts.ID, $wpdb->posts.post_parent";
        break;
    default:
        $fields = "$wpdb->posts.*";

なぜなら'fields' => 'ids'だけを指定するのであれば、IDよりも何も得られません。

もしあなたが'fields' => 'id=>parent'(本当に面白いように見えます)と一緒に行くなら、あなたはまた親IDのものを得るでしょう。

'fields'引数を使用する他の方法は、WordPress v4.7からは影響を受けません。

しかし、例のようなクエリがある場合は、wp_list_pluckが役目を果たします。

2
prosti