次のコードを使用して、投稿IDを配列に格納します。
<?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;
?>
ただし、endifの後にprint_r($id)
を付けると、最後の投稿のIDしか表示されないため、うまくいきません。どこで間違えていますか?
今後ともどうぞ
交換してみてください
$id[$counter] = get_the_id();
と
array_Push( $id, get_the_ID() );
投稿IDを$id
配列に収集します。
$ids
の代わりに$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;
@ birgireの答えが問題を解決する間、それはそれを説明しません。 $id[$counter] = get_the_id();
は動作するはずですが、この場合、スカラー値を配列として使用することはできませんWarning
をトリガーします。どうして?
the_post
はsetup_postdata
を実行します。これは、$id
を投稿IDに設定し、$id
を上書きして整数に変換します。次のように、the_post()
の後にvar_dump
を追加するとわかります。
$products->the_post();
var_dump($id);
それ以上に、あなたのコードは非常に複雑です。あなたはカウンターを必要としません(そしてあなたが既に$products->current_post
を持っているなら)そしてあなたはアイテムを配列にプッシュするための特別な関数を必要としません。あなたが本当にする必要があるのはWordPressがまだ使用していない変数を使用することです、それはbirgireの解決を働かせるものです。
$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;