2015-07-17 3 views
3

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

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

ответ

1

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

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

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

код ниже для тех, кто хотел бы использовать его или адаптировать. Я выводил результаты ниже описания бренда, используя крюк бренда WooCommerce 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); 
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); 

Вот выход для демонстрационной установки, который я попытался на:

enter image description here

Этот код работает отлично. Дайте мне знать, если это решит вашу проблему.