@Korvin3

Почему результат WPQuery выводится до текста страницы?

Добрый день. Помогите, пожалуйста.
Пишу простой плагин, который выводит и фильтрует по атрибутам товары из нужной мне категории WooCommerce.
Шорткодом это все выводится на нужную мне страницу. В плагине все работает через wp_query.

Содержимое страницы (сокращенное):
<div class="some-text">
Some text.
</div>
[my_shortcode]


Цикл, по которому товары выводятся в плагине (нашел в сети):
$wc_query = new WP_Query($params); 
            ?>
            <?php if ($wc_query->have_posts()) :  ?>
            <?php while ($wc_query->have_posts()) :
                            $wc_query->the_post(); ?>
            <?php wc_get_template_part( 'content', 'product' );  ?>
            <?php endwhile; ?>
            <?php wp_reset_postdata();  ?>
            <?php else:  ?>
            <p>
                 <?php _e( 'No Products' ); ?>
            </p>
            <?php endif;


А в результате, вывод товаров на странице происходит до div-а
  • Вопрос задан
  • 70 просмотров
Пригласить эксперта
Ответы на вопрос 4
deniscopro
@deniscopro Куратор тега WordPress
WordPress-разработчик, denisco.pro
Добрый.

Попробуйте использовать буферизацию вывода.
Для этого нужно обернуть код:
ob_start();
$wc_query = new WP_Query($params); 
?>
<?php if ($wc_query->have_posts()) :  ?>
	<?php while ($wc_query->have_posts()) :
			$wc_query->the_post(); ?>
			<?php wc_get_template_part( 'content', 'product' );  ?>
	<?php endwhile; ?>
	<?php wp_reset_postdata();  ?>
<?php else:  ?>
	<p>
		<?php _e( 'No Products' ); ?>
	</p>
<?php endif;
return ob_get_clean();


Также у WooCommerce есть встроенные шорткоды, позволяющие выводить и фильтровать товары.
Ответ написан
Комментировать
@cluberr
Это магия )
Ответ написан
Комментировать
@YanAlexandrov
Чайник со стажем
Используйте конструкцию
ob_start();
  // некий код
  $output = ob_get_contents();
  ob_end_clean();
  return $output;
Ответ написан
Комментировать
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Ответ Денис Янчевский правильный, я лишь допишу, что происходит это потому что шорткод должен возвращать данные, а ваш код (без буферизации) данные не возвращает, а выводит. Соответственно вывод происходит в момент выволпнения, до того как была собрана страница целиком.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы