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


27

次からクエリされた投稿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 );

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


リック、あなたの質問はあいまいです。質問を投稿する前に、あなたが望むものを非常に明確にしてください。これにより、すべての人が無関係なものに答えることがなくなります。あなたが実際にポストIDの文字列に返さ必要はありません配列
ピーター・グーセン

1
あなたのwp_reset_postdata文の場合、それは変更されていないとき、そうでなければ、ポストデータがリセットされる場合があります、ない内外でなければなりません
トム・J Nowell

1
IDのみが必要な場合は、s_ha_dumの答えを真剣に検討する必要があります。これにより、データベースから他の多くのデータを取得せずにIDが返され、その後、そのデータは破棄されます。
クリス・レイ

回答:


43

試してみる

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

読む wp_list_pluck


5
これは、投稿IDだけでなく、各投稿のデータ全体も必要な場合に便利です。それ以外の場合は、@ s-ha-dumのソリューションを使用します。
マリアン

74

fieldsクエリで引数を使用します。

fields(文字列)-返されるフィールド。
デフォルトでは、すべてのフィールドが返されます。他の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);

12
これは、IDのクエリのみを行うため、受け入れられた回答である必要があります。
バリーKooij 16

たとえば、通常のwp_queryが既に実行された後にIDを取得する必要がある場合があります。たとえば、後で2つのクエリをマージし、前のクエリから結果を除外するためにIDが必要な場合です。
trainoasis

2

@ s-ha-dumのソリューションを使用すると、IDを取得するだけで、以前のクエリオブジェクトが設定されていない場合に経済的です。

その理由は次のとおりです。

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は、ジョブを実行します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.