Store loop into array

时间:2013-07-22 作者:horin

我使用以下代码将帖子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;
?>
但是它不起作用,因为如果我print_r($id) 结束后,它只打印最后一篇文章的id。我在哪里犯错?

感谢转发

2 个回复
最合适的回答,由SO网友:birgire 整理而成

尝试替换

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

SO网友:s_ha_dum

虽然@birgire的答案解决了这个问题,但并没有解释它。$id[$counter] = get_the_id(); 应该可以,但在这种情况下会触发Warning 不能将标量值用作数组。为什么?

the_post runs setup_postdata, 其中设置$id 到帖子ID,覆盖您的$id 把它变成一个整数。您可以通过添加var_dump 之后the_post(), 像这样:

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

结束

相关推荐

内容.php中的_excerpt()和single.php中的get_模板_part()

每个人所以我创建了一个博客主题the_excerpt() 在里面content.php 我的index.php 为不同类型的帖子格式显示不同的帖子摘录。我有content-gallery.php, content-audio.php, 等等,我在每一个the_excerpt() 而不是the_content(). 如果我把the_content() 而且在“阅读更多”标签之前有很多文本,它打破了布局,因为设计是针对每篇文章的小片段进行的。这是否意味着我不能使用get_template_part( \'co