Добрый день!
Имеется код на 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, и хотелось бы понять:
- почему так происходит?
- как создавать переиспользуемые функции в таких ситуациях?