Измените избранные изображения продуктов woocommerce на основе поисковых фильтров - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть интернет-магазин на основе woocommerce. Все мои продукты являются переменными. Все продукты имеют 5 атрибутов: цвет, текстура, тип каблука, стиль, размер. Два атрибута используются в качестве вариаций: цвет и размер.

Я хочу, чтобы изображения рекомендуемых товаров менялись на странице магазина, когда пользователь выполняет поиск. Изображение должно соответствовать фильтрам, которые использовал пользователь.

В настоящее время мой пользовательский код частично делает это. Изображения изменяются только для цвета, но не для остальных атрибутов. Это происходит потому, что мой код работает только для вариантов. Мне нужно изменить приведенный ниже код, чтобы он работал для атрибутов.

Вы можете найти мой сайт здесь http://newsandals.tsite.eu/shop/

function get_active_swatch($variations) {
if (empty($variations)) {
    return false;
}

$attributes = sw_get_attributes();
if (empty($attributes)) {
    return false;
}


foreach ($variations as $variation) {
    $filled_attrs = array_filter($variation['attributes'], function ($item){
        return !empty($item);
    });

    $diff = array_diff_assoc($filled_attrs, $attributes);

    if (count($diff) === (count($filled_attrs) - count($attributes))) {
        return sv_get_option_variation($variation['variation_id'], $variations);
    }
}

return false;

}

function sw_get_attributes() {
$attributes = [];
if (!empty($_GET['filter_color'])) {
    $attributes['attribute_pa_color'] = $_GET['filter_color'];
}
if (!empty($_GET['filter_texture'])) {
    $attributes['attribute_pa_texture'] = $_GET['filter_texture'];
}
if (!empty($_GET['filter_style'])) {
    $attributes['attribute_pa_style'] = $_GET['filter_style'];
}
if (!empty($_GET['filter_heel-type'])) {
    $attributes['attribute_heel-type'] = $_GET['filter_heel-type'];
}

return $attributes;
}

function sv_get_option_variation( $variation_id, $available_variations, $attribute_name = 'pa_color' ) {
foreach ( $available_variations as $key => $variation ) {
    if ( $variation['variation_id'] === $variation_id ) {
        $attr_key         = 'attribute_' . $attribute_name;
        if ( ! isset( $variation['attributes'][ $attr_key ] ) ) {
            continue;
        }

        $val = $variation['attributes'][ $attr_key ];

        $option_variation = array(
            'key' => $val,
            'variation_id' => $variation['variation_id'],
            'is_in_stock'  => $variation['is_in_stock'],
            'image_src'  => $variation['image']['src'],
            'image_srcset'  => $variation['image']['srcset'],
            'image_sizes'  => $variation['image']['sizes'],
        );

        global $product;
        $product_id = $product->get_id();

        $swatch = woodmart_has_swatch( $product_id, $attribute_name, $val );
        return array_merge( $swatch, $option_variation );
    }
}

return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...