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
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
.
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;
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;