【问题标题】:Foreach loop not looping throughForeach 循环不循环
【发布时间】:2020-02-19 12:35:55
【问题描述】:

我有一个 foreach 循环,它只返回最新帖子的 title。例如,我将帖子 test 作为 products 中的最新帖子,并且在下面定义的循环中,当执行 var_dump 时,它只会转储名为“test”的最新帖子的标题。

这是为什么?

方法:

<?php
    $args = array(
        'post_type'        => 'products',
        'post_parent'       => 0,
        'posts_per_page'  => 15,
    );
    $products = get_posts( $args );

    if ($products){
      foreach ($products as $product) : setup_postdata( $product ); 
        var_dump(get_the_title());
      endforeach;
      wp_reset_postdata();

    }
?>

【问题讨论】:

标签: php wordpress foreach custom-post-type


【解决方案1】:
      foreach ($products as &$product) : setup_postdata( $product ); 

请在你的 foreach 循环中试试这个。

【讨论】:

  • 对于作为引用的循环变量,总是在循环之后执行unset($product);。因为引用在第二个循环中使用时表现异常。
【解决方案2】:

用这个

if ($products){
      foreach ($products as $product) : setup_postdata( $product ); 
        echo get_the_title($product->ID));
       // or echo $product->post_title;
      endforeach;
      wp_reset_postdata();

    }

【讨论】:

    【解决方案3】:

    这很奇怪,但是当您想将模板标签与setup_postdata() 一起使用时,您需要使用全局$post 变量。 setup_postdata() 实际上并没有设置该变量,它设置了一些相关的全局变量并运行 the_post 操作。你可以看看会发生什么here

    要为每个模板函数调用传递 id 等,您需要像这样设置循环。

    global $post;
    foreach ( $products as $post ) {
        setup_postdata( $post );
        // Your code here.
    }
    wp_reset_postdata();// Reset the global $post variable and re-setup postdata.
    

    【讨论】:

      猜你喜欢
      • 2021-05-28
      • 1970-01-01
      • 1970-01-01
      • 2016-09-26
      • 2012-07-19
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      相关资源
      最近更新 更多