我已获得以下自定义短代码以显示一系列产品
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>';
}
我正在尝试在循环中添加一条文本消息,说明&#34;没有要显示的产品&#34;如果没有产品可以展示。
我努力正确地放置语句而不会出现语法错误。
我一直在摆弄这样的代码:
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 :(得分:1)
2件事:
1)您已移除 while循环。
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 :(得分:0)
试试这个例子,
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');
希望这会对你有所帮助。欲获得更多信息。