最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

categories - Display all product tags associated with a specific product category

programmeradmin0浏览0评论

I need some help writing a shortcode to display all product tags associated with a specific product category which can be displayed on any page.

My problem is that I can display all product tags anywhere by using the below code, but I'm unable to filter those tags by a given product category:

function product_terms_by_cat() {       
    $terms = get_terms (
        array (
            'taxonomy' => 'product_tag', 
            'hide_empty' => false)
        );
    foreach ( $terms as $term ) {
        echo $term->name;
    }
}       
add_shortcode('product_terms_by_cat', 'product_terms_by_cat');

I've tried using functions for standard WP post tags/categories but they're used within the loop (eg. category pages or single post pages) and don't help.

Could modifying the code found on this link work?The code filters categories based on tags (the opposite of what I want). Cheers

I need some help writing a shortcode to display all product tags associated with a specific product category which can be displayed on any page.

My problem is that I can display all product tags anywhere by using the below code, but I'm unable to filter those tags by a given product category:

function product_terms_by_cat() {       
    $terms = get_terms (
        array (
            'taxonomy' => 'product_tag', 
            'hide_empty' => false)
        );
    foreach ( $terms as $term ) {
        echo $term->name;
    }
}       
add_shortcode('product_terms_by_cat', 'product_terms_by_cat');

I've tried using functions for standard WP post tags/categories but they're used within the loop (eg. category pages or single post pages) and don't help.

Could modifying the code found on this link work?The code filters categories based on tags (the opposite of what I want). Cheers

Share Improve this question asked Aug 19, 2019 at 0:47 JVANJVAN 232 silver badges5 bronze badges 0
Add a comment  | 

2 Answers 2

Reset to default 1

Ahh ha! Have figured out how to do this. Here's the code for future people who are looking for the same thing:

function get_category_tags($args) {
    global $wpdb;
    $tags = $wpdb->get_results("
        SELECT DISTINCT terms2.term_id as tag_id, terms2.name as tag_name, terms2.slug as tag_slug, null as tag_link
        FROM
            wp_posts as p1
            LEFT JOIN wp_term_relationships as r1 ON p1.ID = r1.object_ID
            LEFT JOIN wp_term_taxonomy as t1 ON r1.term_taxonomy_id = t1.term_taxonomy_id
            LEFT JOIN wp_terms as terms1 ON t1.term_id = terms1.term_id,

            wp_posts as p2
            LEFT JOIN wp_term_relationships as r2 ON p2.ID = r2.object_ID
            LEFT JOIN wp_term_taxonomy as t2 ON r2.term_taxonomy_id = t2.term_taxonomy_id
            LEFT JOIN wp_terms as terms2 ON t2.term_id = terms2.term_id
        WHERE
            t1.taxonomy = 'product_cat' AND p1.post_status = 'publish' AND terms1.term_id IN (".$args['categories'].") AND 
            t2.taxonomy = 'product_tag' AND p2.post_status = 'publish'
            AND p1.ID = p2.ID
        ORDER by tag_name
    ");

    $count = 0;

    foreach ($tags as $tag) {
        $tags[$count]->tag_link = get_tag_link($tag->tag_id);
        $count++;
    }
    return $tags;
}

$args = array('categories'=> "YOUR PRODUCT CATEGORY ID HERE"); 
$tags = get_category_tags($args); 

foreach ($tags as $tag) {   
    echo '<a href="'.$tag->tag_link.'">' . $tag->tag_name . '</a>';  
}

I used this in a WP Bakery shortcode and it worked a treat. I guess you could use this wherever you would like. Enjoy!

function product_terms_by_cat() {       
$terms = get_terms (
    array (
        'taxonomy' => 'product_category', 
        'hide_empty' => false)
    );
foreach ( $terms as $term ) {
    echo $term->name;
}
}       
add_shortcode('product_terms_by_cat', 'product_terms_by_cat');
发布评论

评论列表(0)

  1. 暂无评论