Цикл по каждому элементу не проходит - PullRequest
0 голосов
/ 23 октября 2019

У меня есть цикл 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 ]

1 голос
/ 23 октября 2019
      foreach ($products as &$product) : setup_postdata( $product ); 

Пожалуйста, попробуйте это в цикле foreach.

0 голосов
/ 23 октября 2019

Странно, но когда вы хотите использовать теги шаблонов вместе с setup_postdata(), вам нужно использовать глобальную переменную $post. setup_postdata() на самом деле не устанавливает эту переменную, он устанавливает некоторые связанные глобальные переменные и запускает действие the_post. Вы можете увидеть, что происходит здесь

Чтобы делать то, что вы хотите делать без передачи идентификаторов и т. Д. Для каждого вызова функции шаблона, вам необходимо настроить цикл таким образом.

global $post;
foreach ( $products as $post ) {
    setup_postdata( $post );
    // Your code here.
}
wp_reset_postdata();// Reset the global $post variable and re-setup postdata.
0 голосов
/ 23 октября 2019

Используйте это

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

    }
...