我创建了一个显示循环的短代码,其中应该显示“产品”中的所有帖子,其中复选框被选为值“是”。但是,它没有显示所有帖子,它只显示一个。
这是我的代码:
function featured_products() {
$args = array(
'posts_per_page' => -1,
'post_type' => 'products',
'meta_query' => array(
array(
'key' => 'home_featured',
'value' => '1',
'compare' => 'LIKE'
),
),
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
$output = '<p>' . get_the_title() . '</p>';
}
echo '</ul>';
wp_reset_postdata();
} else {
$output = "<p>There aren't any products to display.</p>";
}
return $output;
}
add_shortcode('featured_products', 'featured_products');
在显示多个帖子方面,我在做错了什么?
这是我的自定义字段设置:
现在我遇到了输出问题。出于某种原因,循环显示在页面内容容器的顶部:
function featured_products() {
$args = array(
'posts_per_page' => 10,
'post_type' => 'products',
'meta_query' => array(
array(
'key' => 'home_featured',
'value' => '1',
'compare' => 'LIKE'
),
),
);
$output .= '<div class="products">';
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
$output .= '<div class="col-eq-height col-md-6" style="margin-bottom:30px;">';
$output .= '<div class="product">';
$output .= '<div id="thumbnail"><a href="' . get_the_permalink() . '">';
$output .= get_the_post_thumbnail();
$output .= '</a></div>';
$output .= '<div id="content">';
$output .= '<p id="title"><a href="' . get_the_permalink() . '">' . get_the_title() . '</a></p>';
echo '<p>' . the_field('product_price_exc_vat') . '</p>';
$output .= '</div>';
$output .= '</div>';
$output .= '</div>';
}
wp_reset_postdata();
} else {
$output .= "<p>There aren't any products to display.</p>";
}
$output .= '</div>';
return $output;
}
add_shortcode('featured_products', 'featured_products');
答案 0 :(得分:0)
这里的问题是,每次迭代时都会覆盖$ output。
这意味着您只能获得最后一个标题。
在=符号前面放一个点,将收集它而不是覆盖它。
总结一下 -
启动
$output ="";
在循环之外,然后在你的内部将它们推到一起
$output .="whateverHtml".$variable."whateverHtml";