web-dev-qa-db-ja.com

動的配列を持つget_postsの場合はpost__in

RSSフィードを作成しています。データベースに400の投稿IDを持つテーブルを作成しました。私は自分のRSSフィードが私のテーブルからの400の投稿のリストに対してのみ実行されるように、私は今2つをリンクしようとしているRSSフィードをコード化している。

私のRSSフィードページでは、いくつかのidを使って配列を作成することができます(下記参照)。

$myarray2 = array(12345,12346);
$args = array(
'post_type' => 'posttype',
'post__in' => $myarray2
);

これは動作し、id 12345,12346のRSSフィードを作成します。

次のようにして、400個のデータベーステーブルレコードの配列をページに印刷することもできます。

$myarray = $wpdb->get_results("SELECT * FROM my_table");
print_r($myarray)

これはこの形式のデータを生成します

( 
        [0] => stdClass Object ( 
                [id] => 145 
            ) 
        [1] => stdClass Object ( 
                [id] => 4573 
            ) 
        [2] => continues.....
)

しかし、私は$myarraypost__inと一緒に使用するためのコードを正しく取得できないようです。例えば

$myarray = $wpdb->get_results("SELECT * FROM my_table");
$args = array(
'post_type' => 'posttype',
'post__in' => $myarray
);

動作しません。さまざまなバリエーションを試してみましたが、投稿IDのリストを配列からpost__inに配信する方法について何か足りません。

何が足りないの?

4
Jolo

post__inは投稿IDの配列を受け取ります。 array(5, 4, 8, 9);

@bravokeylコメントを拡張します。デフォルトでは、結果はObjectです。コーデックスが示唆するように、 get_results() の出力タイプをこれらの値に変更することができます。

  • OBJECT - 結果は、行オブジェクトの数値インデックス配列として出力されます。
  • OBJECT_K - 結果は、最初の列の値をキーとして使用して、行オブジェクトの連想配列として出力されます(重複は破棄されます)。
  • ARRAY_A - 結果は、列名をキーとして使用して、連想配列の数値インデックス配列として出力されます。
  • ARRAY_N - 結果は、数値インデックス配列の数値インデックス配列として出力されます。

ここで、出力をARRAY_Aに変更し、投稿IDを抽出してpost__inに渡すことができます。

global $wpdb;
$fivesdrafts = $wpdb->get_results("SELECT ID FROM my_table", ARRAY_A);
$post_ids = array_map(function($single_array){
    return $single_array['ID'];
}, $fivesdrafts);

//Pass this to post__in
array(
    'post__in' => $post_ids
);
1
Sumit

これはwpdb::get_col()を使用してid列を取得することによる1つの方法です。

$pids = $wpdb->get_col( "SELECT id FROM my_table" );

それから、各idを整数に変換してきれいにすることができます。

$pids = wp_parse_id_list( $pids );

ちょっと注意してくださいintval()の最大値は32または64ビットシステムによって異なります。

1
birgire