it-swarm.com.de

post__in für get_posts mit einem dynamischen Array

Ich erstelle einen RSS-Feed. Ich habe in meiner Datenbank eine Tabelle mit 400 Post-IDs erstellt. Ich habe den RSS-Feed codiert. Ich versuche jetzt, die beiden zu verknüpfen, sodass mein RSS-Feed nur für die Liste von 400 Posts aus meiner Tabelle ausgeführt wird.

Auf meiner RSS-Feed-Seite kann ich mithilfe einiger IDs ein Array erstellen (siehe unten).

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

Dies funktioniert und erstellt einen RSS-Feed für die IDs 12345,12346.

Ich kann das Array meiner 400 Datenbanktabellendatensätze auf der Seite auch wie folgt drucken.

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

Dies erzeugt Daten dieses Formulars

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

Jedoch kann ich nicht scheinen, den Code richtig zu erhalten, um $myarray mit post__in zum Beispiel zu verwenden

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

funktioniert nicht. Ich habe verschiedene Variationen ausprobiert, aber mir fehlt etwas darüber, wie ich eine Liste von Beitrags-IDs von meinem Array an post__in senden kann.

Was vermisse ich?

4
Jolo

post__in akzeptiert eine Reihe von Post-IDs, z. array(5, 4, 8, 9);

@Bravokeyl-Kommentar wird erweitert. Standardmäßig ist das Ergebnis Objekt. Wie der Codex vorschlägt, können Sie den Ausgabetyp von get_results() in diese Werte ändern.

  • OBJECT - Ergebnis wird als numerisch indiziertes Array von Zeilenobjekten ausgegeben.
  • OBJECT_K - Ergebnis wird als assoziatives Array von Zeilenobjekten ausgegeben, wobei die Werte der ersten Spalte als Schlüssel verwendet werden (Duplikate werden verworfen).
  • ARRAY_A - Ergebnis wird als numerisch indiziertes Array von assoziativen Arrays ausgegeben, wobei Spaltennamen als Schlüssel verwendet werden.
  • ARRAY_N - Ergebnis wird als numerisch indiziertes Array von numerisch indizierten Arrays ausgegeben.

Hier können wir die Ausgabe in ARRAY_A ändern, Post-IDs extrahieren und an post__in übergeben.

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

Hier ist eine Möglichkeit, wpdb::get_col() zu verwenden und die Spalte id abzurufen:

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

Wir könnten es dann bereinigen, indem wir jede ID mit Integer umwandeln:

$pids = wp_parse_id_list( $pids );

Beachten Sie nur den unterschiedlichen Maximalwert für intval(), abhängig von 32- oder 64-Bit-Systemen.

1
birgire