Получите категории продуктов WooCommerce, содержащие конкретный c бренд продукта - PullRequest
1 голос
/ 05 мая 2020

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

Я продаю одежду в своем интернет-магазине, а затем, если вы, например, выбираете бренд «Levis» в меню заголовка, затем на боковой панели на странице магазина вы должны увидеть все товарные категории, содержащие продукцию бренда «Levis». Надеюсь, это имеет смысл.

Я все искал и искал решение, но пока не добился успеха. Где-то в сети написано, что для этого нет решения, поэтому мне приходится разрабатывать его с нуля.

Если необходимо разработать его с нуля, как вы подойдете к этому наиболее легко? Я сам разработал несколько тем для Wordpress, поэтому знаю, как работает Wordpress. Просто не понимаю, как решить эту проблему.

Некоторая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 06 мая 2020

Это можно сделать только с помощью специального запроса SQL с использованием класса WordPress WPDB.

Теперь, когда для WooCommerce доступно несколько плагинов брендов продуктов, в зависимости от плагина, который вы используете, вам нужно будет настроить правильную таксономию:

  • product_brand для брендов WooCommerce плагин ( здесь по умолчанию в функции ниже)
  • yith_product_brand для YITH WooCommerce Brands плагин
  • pa_brand для настраиваемого атрибута продукта (самодельный)

Ниже вы найдете настраиваемую функцию, которая возвращает массив объектов категорий продуктов WooCommerce на основе термина бренда продукта slug :

// The defined taxonomy here in the function $taxonomy argument is for WooCommerce Product brand plugin
function get_product_categories_from_a_product_brand( $brand_term_slug, $taxonomy = 'product_brand' ) {
    global $wpdb;

    return $wpdb->get_results( "
        SELECT t1.*
        FROM    {$wpdb->prefix}terms t1
        INNER JOIN {$wpdb->prefix}term_taxonomy tt1
            ON  t1.term_id = tt1.term_id 
        INNER JOIN {$wpdb->prefix}term_relationships tr1
            ON  tt1.term_taxonomy_id = tr1.term_taxonomy_id
        INNER JOIN {$wpdb->prefix}term_relationships tr2
            ON  tr1.object_id = tr2.object_id
        INNER JOIN {$wpdb->prefix}term_taxonomy tt2
            ON  tr2.term_taxonomy_id = tt2.term_taxonomy_id         
        INNER JOIN {$wpdb->prefix}terms t2
            ON  tt2.term_id = t2.term_id
        WHERE tt1.taxonomy = 'product_cat'
        AND tt2.taxonomy = '$taxonomy'
        AND  t2.slug = '$brand_term_slug'
    " );
}

Код входит в functions. php файл вашей активной дочерней темы (или активной темы). Протестировано и работает.


Пример использования кода в любом php файле - Показать все связанные названия категорий продуктов для ярлыка бренда продукта:

$brand_term_slug = 'levis'; // A term slug is required (not the term id or term name)

$results = get_product_categories_from_a_product_brand( $brand_term_slug );

if( ! empty($results) ) {

    $term_names = []; // Initializing an empty array variable

    // Loop through each product category terms:
    foreach ( $results as $result ) {
        $term_id   = $result->term_id; // Term id
        $term_name = $result->slug; // Term slug
        $term_slug = $result->name; // Term name
        $taxonomy  = 'product_cat'; 

        $term_link = get_term_link( get_term( $result->term_id, $taxonomy ), $taxonomy );

        // Example: Set the linked formatted term name in an array
        $term_names[] = '<a class="'.$result->slug.'" href="'.$term_link.'">'.$result->name.'</a>';
    }   

    // Display the linked formatted terms names
    echo '<div class="brand-categories '.$brand_term_slug.'">'.implode(' ', $term_names).'</div>';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...