web-dev-qa-db-fra.com

Stocker la boucle dans un tableau

J'utilise le code suivant pour stocker les identifiants de messages dans un tableau:

<?php
    $args = array(
        'post_type' => 'product',
        'post_status' => 'publish',
        'ignore_sticky_posts'   => 1,
        'posts_per_page' => 5,
        'orderby' => 'date',
        'order' => 'desc');
$id = array();
$counter = 1;       
$products = new WP_Query( $args );
if ( $products->have_posts() ) : while ( $products->have_posts() ) : $products->the_post();
    $id[$counter] = get_the_id();
    //custom_shop_array_create($product, $counter);
    $counter++;
endwhile;
endif;
?>

Cependant, cela ne fonctionne pas car si je mets print_r($id) après endif, il n’imprime que l’identifiant du dernier message. Où est-ce que je fais une erreur?

Merci en avant

2
horin

Essayez de remplacer

$id[$counter] = get_the_id();

avec

array_Push( $id, get_the_ID() );

pour collecter les identifiants de publication dans le tableau $id.

Mettre à jour:

Si vous utilisez également $ids au lieu de $id:

    $args = array(
        'post_type' => 'product',
        'post_status' => 'publish',
        'ignore_sticky_posts'   => 1,
        'posts_per_page' => 5,
        'orderby' => 'date',
        'order' => 'desc');
$ids = array();
$products = new WP_Query( $args );
if ( $products->have_posts() ) : 
    while ( $products->have_posts() ) : $products->the_post();
       array_Push( $ids, get_the_ID() );
    endwhile;
endif;
4
birgire

Alors que la réponse de @ birgire résout le problème, elle ne l'explique pas. $id[$counter] = get_the_id(); devrait fonctionner, mais dans ce cas, déclenche une Warning indiquant que vous ne pouvez pas utiliser une valeur scalaire en tant que tableau. Pourquoi?

the_post EXÉCUTE setup_postdata , ce qui définit $id en tant qu'ID de publication, écrasant votre $id et le transformant en un entier. Vous pouvez le voir en ajoutant var_dump après the_post(), comme ceci:

$products->the_post();
var_dump($id);

Au-delà de cela, votre code est trop complexe. Vous n'avez pas besoin du compteur (et si vous l'aviez déjà, vous aviez $products->current_post) et vous n'avez besoin d'aucune fonction particulière pour pousser des éléments dans le tableau. Tout ce que vous avez à faire, c’est d’utiliser une variable que WordPress n’utilise pas déjà, ce qui permet à la solution de birgire de fonctionner.

$args = array(
  'post_type' => 'post',
  'post_status' => 'publish',
  'ignore_sticky_posts'   => 1,
  'posts_per_page' => 5,
  'orderby' => 'date',
  'order' => 'desc'
);

$ids = array();  
$products = new WP_Query( $args );
if ( $products->have_posts() ) : 
  while ( $products->have_posts() ) : 
    $products->the_post();
    $ids[] = $post->ID;
    //custom_shop_array_create($product, $counter);
  endwhile;
endif;
1
s_ha_dum