web-dev-qa-db-fra.com

post__in pour get_posts avec un tableau dynamique

Je crée un flux RSS. J'ai créé une table dans ma base de données avec 400 identifiants de publication. Le flux RSS étant codé, je tente maintenant de lier les deux afin que mon flux RSS ne fonctionne que pour la liste des 400 messages de mon tableau.

Sur ma page de flux RSS, je peux créer un tableau en utilisant quelques identifiants (voir ci-dessous).

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

Cela fonctionne et crée un flux RSS pour 12345,12346 id.

Je peux également imprimer le tableau de mes 400 enregistrements de table de base de données sur la page comme suit;

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

Cela produit des données de cette forme

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

Cependant, je n'arrive pas à obtenir le code qui convient pour utiliser $myarray avec post__in par exemple

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

ne marche pas. J'ai essayé diverses variantes, mais il me manque quelque chose sur la manière de fournir une liste d'identifiants de post de mon tableau à post__in

Qu'est-ce que je rate?

4
Jolo

post__in accepte un tableau d'ID de publication, par exemple array(5, 4, 8, 9);

Extension du commentaire @bravokeyl. Par défaut, le résultat est Object. Comme le suggère le codex, vous pouvez remplacer le type de sortie de get_results() par ces valeurs.

  • OBJECT - le résultat sera généré sous la forme d'un tableau indexé numériquement d'objets de ligne.
  • OBJECT_K - le résultat sera affiché sous la forme d'un tableau associatif d'objets de ligne, en utilisant les valeurs de la première colonne comme clés (les doublons seront ignorés).
  • ARRAY_A - le résultat sera affiché sous forme de tableau indexé numériquement de tableaux associatifs, en utilisant les noms de colonne comme clés.
  • ARRAY_N - le résultat sera affiché sous forme de tableau indexé numériquement de tableaux indexés numériquement.

Ici, nous pouvons changer la sortie en ARRAY_A puis extraire les identifiants de publication et passer à 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

Voici un moyen d'utiliser wpdb::get_col() et d'extraire la colonne id:

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

Nous pourrions ensuite le nettoyer en convertissant chaque identifiant avec:

$pids = wp_parse_id_list( $pids );

Notez simplement la valeur maximale différente pour intval(), selon les systèmes 32 ou 64 bits.

1
birgire