0

タブ内で使用する個別の div に一連の製品をロードするカスタム関数をコーディングしようとしています。各タブにはカテゴリの名前があり、各タブのコンテンツには製品が含まれています。

woocommerce テンプレートを使用して製品をループで表示しようとしていますが、すぐにエコーが発生し、デザインが壊れます。結果を出力パラメーターに受け取り、最後にエコーする必要があります。

私のコードは、カテゴリをループした後 (foreach を $prod_cat として)、次のようになります。

$args = array(
    'post_type' => 'product',
    'tax_query' => array(
        array(
            'taxonomy' => 'product_cat',
            'field' => 'tag_ID',
            'terms' => $prod_cat['id']
        )
    ),
    'order' => 'ASC'
);

$my_query = null;
$my_query = new WP_Query($args);
$counter = 0;
if ($my_query->post_count) {
    $output .= '<ul class="products">';

    if ($my_query->have_posts()) {
        while ($my_query->have_posts()) : $my_query->the_post();

            setup_postdata($post);

            $output .= woocommerce_get_template_part('content', 'product');

        endwhile;
    }
    $output .= '</ul>';
}

したがって、実際には機能して製品を正常にロードしますが、「woocommerce_get_template_part」が「load_template」を呼び出すため、ファイルの内容がエコーされます。エコーなしで $output に戻りたいです。それは可能ですか?

ありがとう

4

1 に答える 1

3

私が問題を正しく理解していれば、PHP の出力バッファリング機能を使用してこれを実行できるはずです。このようなもの(テストされていません):

while ($my_query->have_posts()) : $my_query->the_post();
    setup_postdata($post);
    ob_start(); // Start buffering
    woocommerce_get_template_part('content', 'product');
    $output .= ob_get_clean(); // Get the content of the buffer, and end buffering
endwhile;
于 2013-09-23T11:11:48.927 に答える