ACF复选框循环不显示所有帖子

时间:2018-01-17 12:04:26

标签: wordpress advanced-custom-fields

我创建了一个显示循环的短代码,其中应该显示“产品”中的所有帖子,其中复选框被选为值“是”。但是,它没有显示所有帖子,它只显示一个。

这是我的代码:

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');

在显示多个帖子方面,我在做错了什么?

这是我的自定义字段设置:

enter image description here

现在我遇到了输出问题。出于某种原因,循环显示在页面内容容器的顶部:

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');

1 个答案:

答案 0 :(得分:0)

这里的问题是,每次迭代时都会覆盖$ output。

这意味着您只能获得最后一个标题。

在=符号前面放一个点,将收集它而不是覆盖它。

总结一下 -

启动

$output ="";

在循环之外,然后在你的内部将它们推到一起

$output .="whateverHtml".$variable."whateverHtml";