A
A
Alexandr Mi2018-04-19 19:09:39
WordPress
Alexandr Mi, 2018-04-19 19:09:39

Why doesn't PHP code work?

Good afternoon!
There is a php code that receives all posts and displays the data of each post using a loop:

<?php
    // параметры
    $args = [
        'numberposts'      => 0,
        'category'         => 'home_of_timber',
        'order'            => 'DESC',
        'post_type'        => 'post',
        'suppress_filters' => true, // подавление работы фильтров изменения SQL запроса
    ];
  
  
    // получаем посты по нашим параметрам
    $posts = get_posts( $args );
  
    // открываем html обертку
    echo "<div class='shop-cards' id='shop-cards-5'>";
  
    // перебираем полученные данные
    foreach ( $posts as $post ) {
    
        // задаем... не знаю как это называется в php, я воспринимаю это как некий контекст
        // вообще подозреваю что проблема кроется в этой функции,
        // но не могу понять почему и как исправить
        setup_postdata( $post );
    
        // далее шаблон для вывода html	
        ?>
        <div class='col-md-3 col-sm-6 col-xs-12'>
            <div class='shop-card'>
                <img src='<?php the_field('card_image')?>' alt=''>
                <h3><?php the_field('card_name')?></h3>
                <p>Площадь <?php the_field('card_area')?> м<sup>2</sup></p>
                <span><?php the_field('card_old_price')?></span>
                <b><?php the_field('card_new_price')?> руб.</b>
                <button type='submit' class='popup-btn button-small'>Оставить заявку</button>
            </div>
        </div>
        <?php
    
    }
    // сбрасываем конекст
    wp_reset_postdata();
  
    // закрываем html обертку
    echo "</div>";
?>

Everything works, but it becomes necessary to reuse this code by changing just a few parameters, here is an example where the same code is wrapped in a function:
<?php
    // создаем функцию которая принимает параметры:
    // $args_category - категория поста ( Рубрика в Wordpress )
    // $cards_id - id для html тега
    function get_house_cards( $args_category, $cards_id ) {
        $args = [
            'numberposts'      => 0,
            'category'         => $args_category,
            'order'            => 'DESC',
            'post_type'        => 'post',
            'suppress_filters' => true, // подавление работы фильтров изменения SQL запроса
        ];
    
        $posts = get_posts( $args );
    
        echo "<div class='shop-cards' id='$cards_id'>";
    
        foreach ( $posts as $post ) {
            setup_postdata( $post );		  
        ?>
        <div class='col-md-3 col-sm-6 col-xs-12'>
            <div class='shop-card'>
                <img src='<?php the_field('card_image')?>' alt=''>
                <h3><?php the_field('card_name')?></h3>
                <p>Площадь <?php the_field('card_area')?> м<sup>2</sup></p>
                <span><?php the_field('card_old_price')?></span>
                <b><?php the_field('card_new_price')?> руб.</b>
                <button type='submit' class='popup-btn button-small'>Оставить заявку</button>
            </div>
        </div>
        <?php
    }

    wp_reset_postdata();
    echo "</div>";
}
    // вызываем созданную функцию
    get_house_cards('home_of_timber', 'shop-cards-5');
?>

It would seem that everything should be exactly the same as in the first option, but the data is "unknown";
I'm just starting to understand wordpress and php, and I would like to understand:
- why is this happening?
- how to create reusable functions in such situations?

Answer the question

In order to leave comments, you need to log in

1 answer(s)
E
E, 2018-04-19
@missing00

try specifying id specifically in the_field. the_field('card_name', get_the_ID()) or $post->ID

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question