missing00
@missing00
Разработчик

Почему не отробатывает код PHP?

Добрый день!
Имеется код на php который получает все посты и с помощью цикла выводит данные каждого поста:
<?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>";
?>


Все работает, но возникает необходимость переиспользовать данный код, изменив всего-лишь несколько параметров, вот пример где тот же код обернут в функцию:
<?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');
?>


Казалось бы все должно быть точно также как и в первом варианте, но данные получаются "unknown";

Я только начинаю разбираться с wordpress-ом и php, и хотелось бы понять:
- почему так происходит?
- как создавать переиспользуемые функции в таких ситуациях?
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
@aylo
попробуйте в the_field указывать id конкретно. the_field('card_name', get_the_ID()) или $post->ID
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы