Получите теги продуктов WooCommerce для множества продуктов

Можно ли получить список тегов продуктов WooCommerce, но только если они связаны с массивом конкретных продуктов?

У меня есть массив идентификаторов продуктов, но я не могу понять, с чего начать - я просмотрел множество функций get_tag в документации Wordpress Codex, но все они, похоже, предназначены только для отдельных сообщений / страниц / пользовательских типов сообщений и не для использования в массиве.


person Ben Iskander    schedule 17.07.2015    source источник


Ответы (2)


Почему бы не перебрать массив, чтобы получить все теги для списка товаров.

Вот код, который вы можете использовать:

function wdm_get_tags($products_array){
    echo "Tags: ";
    foreach($products_array as $single_product)
    {
        echo get_the_term_list($single_product, 'product_tag', '', ',' );
        echo ',';
    }

}

Вот код, с помощью которого вы можете проверить функцию:

$products=array(378,356);
    wdm_get_tags($products);

Вот результат демонстрационной установки, которую я пробовал:

введите описание изображения здесь

Этот код отлично работает. Сообщите мне, решило ли это вашу проблему.

person Domain    schedule 18.07.2015

С помощью WisdmLabs мне удалось собрать код, который собирает теги продуктов, найденные для всех продуктов в рамках определенного бренда WooCommerce.

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

• Product Tag 1 (12)
• Product Tag 3 (4)
• Product Tag 4 (7)
• Product Tag 8 (11)

Код ниже для всех, кто хотел бы его использовать или адаптировать. Я вывожу результаты под описанием бренда с помощью хука WooCommerce Brand woocommerce_archive_description.

    function get_wc_product_brand_related_tags() {
    global $post; 

    // Access the objects in the current WooCommerce query loop
    $queried_object = get_queried_object();

    // Get the term_id and term_name values
    $term_id = $queried_object->term_id;
    $term_name = $queried_object->slug;

    // FOR TESTING ONLY - Echo the term_id and term_name values to see if they are what we're expecting
    //echo '<p>The <em>term_id</em> is <strong>' . $term_id . '</strong> and the <em>term_name</em> is <strong>' . $term_name . '</strong>.</p>';

    // Create our products array for use later
    $products_array = array();

    // Query the posts using the product custom post type and product_brand custom taxonomy terms
    $brand_post_args = array(
        'post_type' => 'product',
        'posts_per_page' => -1,
        'product_brand' => $term_name
    );

    // Run our WP_Query with the args above
    $brand_post_query = new WP_Query($brand_post_args);

    // If any products (posts using the product custom post type) are found…
    if( $brand_post_query->have_posts() ) {
        while ($brand_post_query->have_posts()) : $brand_post_query->the_post();
            // FOR TESTING ONLY - shows a lot more information including product id, name and tags
            $products_array[] = get_the_id() . ' - ' . get_the_title() . ' - ' . get_the_term_list($brand_post_query->ID, 'product_tag');

            // Populate the array with the tags found for the product
            $products_tags_array[] = get_the_term_list($brand_post_query->ID, 'product_tag');
        endwhile;
    }

    // Count the duplicate values found inside our array
    $count_tag_totals = array_count_values($products_tags_array);

    // FOR TESTING ONLY - Used below to show the product information such as id, name etc
    $show_product_values = array_unique($products_tags_array);

    // Show the tags found for all of the products for the current brand, along with the number found for each tag
    echo '<ul>';    
    foreach($count_tag_totals as $key=>$value) {
        echo '<li>' . $key . ' ('. $value . ')</li>';   
    }
    echo '</ul>';

    // FOR TESTING ONLY - Displays unique tag name(s) along with a total of the products that have that tag
    //echo '<pre><h3>Unique product tag(s) and associated totals for this brand&hellip; </h3>',print_r($count_tag_totals,1),'</pre>';   

    // FOR TESTING ONLY - Displays a list of all products (id and name) along with their tags
    //echo '<pre><h3>The products details for this brand page are&hellip; </h3>',print_r($products_array,1),'</pre>';       

    // Reset the WP_Query for use elsewhere
    wp_reset_query();

}

add_action('woocommerce_archive_description', 'get_wc_product_brand_related_tags', 15);
person Ben Iskander    schedule 20.07.2015