Foreach循环未循环通过

时间:2019-10-23 09:38:43

标签: php wordpress foreach custom-post-type

我有一个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();

    }
?>

3 个答案:

答案 0 :(得分:0)

public int compare(SomeBean o1, SomeBean o2) {
    Map<String, Integer> firstLevel = new HashMap<>();
    firstLevel.put("FIRS", 1);
    firstLevel.put("LAS", 2);


    int cmp = firstLevel.get(o1.getDir()).compareTo(firstLevel.get(o2.getDir()));

    if (cmp != 0) {
        return cmp;
    }

    Map<String, Integer> secondLevel = new HashMap<>();
    secondLevel.put("P", 1);
    secondLevel.put("T", 2);

    cmp = secondLevel.get(o1.getEnv()).compareTo(secondLevel.get(o2.getEnv()));

    if (cmp != 0) {
        return cmp;
    }

    Map<String, Integer> thirdLevel = new HashMap<>();
    thirdLevel.put("ORD", 1);
    thirdLevel.put("DES", 2);
    thirdLevel.put("INV", 3);

    return thirdLevel.get(o1.getReport()).compareTo(thirdLevel.get(o2.getReport()));

}

请在您的foreach循环中尝试此操作。

答案 1 :(得分:0)

使用这个

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

    }

答案 2 :(得分:0)

这很奇怪,但是当您想与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.