Поместите заявление IF ELSE в цикл продуктов Woocommerce — WordPress

У меня есть следующий пользовательский шорткод для отображения ассортимента товаров

add_shortcode( 'my_shortcode_name', 'on_sale_products' );

function on_sale_products() {
global $product, $woocommerce, $woocommerce_loop;

$args = apply_filters('woocommerce_related_products_args', array(
// this is working array, just empty for this example
)
);
$products = new WP_Query( $args );

ob_start();

woocommerce_product_loop_start();

while ( $products->have_posts() ) : $products->the_post();

wc_get_template_part( 'content', 'product' );

endwhile;

woocommerce_product_loop_end();

woocommerce_reset_loop();
wp_reset_postdata();

return '<div class="on-sale">' . ob_get_clean() . '</div>';
}

Я пытаюсь добавить текстовое сообщение внутри цикла, в котором будет указано «Нет товаров для отображения», если нет товаров для показа.

Я пытаюсь правильно разместить оператор без получения синтаксической ошибки.

Я возился с кодом вроде этого:

add_shortcode( 'my_shortcode_name', 'on_sale_products' );

function on_sale_products() {
global $product, $woocommerce, $woocommerce_loop;

$args = apply_filters('woocommerce_related_products_args', array(
// this is working array, just empty for this example
)
);
$products = new WP_Query( $args );

ob_start();

woocommerce_product_loop_start();

if ( $products->have_posts() ) : $products->the_post() {

wc_get_template_part( 'content', 'product' );

} else {

echo '<div class="no-products">There are no products to display</div>';
}

woocommerce_product_loop_end();

woocommerce_reset_loop();
wp_reset_postdata();

return '<div class="on-sale">' . ob_get_clean() . '</div>';
}

Но это не правильно.

Не могли бы вы указать мне правильное направление?

0

Решение

2 вещи:

1) Вы удалили в то время как цикл.
2) есть ошибка в этой строке:

if ( $products->have_posts() ) : $products->the_post() {

Должно быть вместо (в вашем коде):

if ( $products->have_posts() ) {
$products->the_post();

Поэтому следующий код должен быть правильным способом заставить это работать:

add_shortcode( 'my_shortcode_name', 'on_sale_products' );
function on_sale_products() {
global $product, $woocommerce, $woocommerce_loop;

$products = new WP_Query( apply_filters('woocommerce_related_products_args', array(
// this is working array, just empty for this example
) ) );

ob_start();
woocommerce_product_loop_start();

if ( $products->have_posts() ):
while ( $products->have_posts() ):
$products->the_post();
wc_get_template_part( 'content', 'product' );
endwhile;
else:
echo '<div class="no-products">There are no products to display</div>';
endif;

woocommerce_product_loop_end();
woocommerce_reset_loop();
wp_reset_postdata();

return '<div class="on-sale">' . ob_get_clean() . '</div>';
}

Код помещается в файл function.php вашей активной дочерней темы (или темы) или также в любой файл плагина.

Это должно работать для вас сейчас …

1

Другие решения

Попробуйте этот пример,

function newsItems( $atts ) {
$news_query= null;
$args = array(
'post_type'      => 'news',
'post_status'    => 'publish',
'posts_per_page' => 10,
);

$news_query = new WP_Query( $args );
$output = '';
if ( $news_query->have_posts() ) {
$output .= '<div class="news-shortcode-posts">';
while ( $news_query->have_posts() ) : $news_query->the_post();
ob_start();
get_template_part( 'inc/news-item' );
$output .= ob_get_clean();
endwhile;
if( $show_archive == 'true' ) {
$output .= '<div class="full-width align-right">';
$output .= 'See All Archives';
$output .= '</div>';
}
$output .= '</div>';
}
return $output;
}
add_shortcode('teamsters-news', 'newsItems');

Надеюсь, это поможет вам. для дополнительной информации.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector