Отобразить связанные продукты, отфильтрованные по атрибуту продукта, в Woocommerce - PullRequest
0 голосов
/ 23 ноября 2018

Я хочу отобразить связанные продукты, отфильтрованные по атрибуту, чтобы он был равен значению из файлов cookie страницы.

Я редактирую шаблон related.php, чтобы он выглядел так:

<?php woocommerce_product_loop_start(); ?>

<?php foreach ( $related_products as $related_product ) :
    // extract attribute filter_location in an array
    $results = $related_product->get_attribute( 'pa_filter_location' );

    // extract value from cookies filter_location
    $fl = $_COOKIE['filter_location'];

    foreach ( $results as $key ) {
        if( $key == $fl ) {
            $post_object = get_post( $related_product->get_id() );

            setup_postdata( $GLOBALS['post'] =& $post_object );

            wc_get_template_part( 'content', 'product' );
        }
    }

endforeach; ?>

<?php woocommerce_product_loop_end(); ?>

Но я получаю сообщение об ошибке: Предупреждение:

Указан неверный аргумент для foreach ()

В чем может быть проблема?

1 Ответ

0 голосов
/ 23 ноября 2018

Проблема возникает из этой строки:

$results = $related_product->get_attribute( 'pa_filter_location' );

Это не массив , а строка терминов, разделенных запятой.Таким образом, вы не можете использовать его в цикле foreach таким образом.

Вместо этого используйте следующий пересмотренный код:

<?php woocommerce_product_loop_start(); ?>

<?php foreach ( $related_products as $related_product ) :
    // extract attribute filter_location in an array
    $terms = $related_product->get_attribute( 'pa_filter_location' );

    // Set each term in an array
    $terms = ! empty($terms) ? (array) explode(', ', $terms) : array();

    foreach ( $terms as $term ) {
        if( isset($_COOKIE['filter_location']) && $term == $_COOKIE['filter_location'] ) {
            $post_object = get_post( $related_product->get_id() );

            setup_postdata( $GLOBALS['post'] =& $post_object );

            wc_get_template_part( 'content', 'product' );
        }
    }

endforeach; ?>

<?php woocommerce_product_loop_end(); ?>

Это должно окончательно решить вашу ошибку, связанную с циклом foreach.

...