Exclude Tags from get_the_tags

While following this article to get tags by date, I was wondering if I could exclude certain tags from what gets returned. The point is to have trending tags but some tags will always be there and I don’t want to include those ones.

Here is the code:

Read More
    <?php
    $how_many_posts = 50;
    $args = array(
        'posts_per_page' => $how_many_posts,
        'orderby' => 'date',
        'order' => 'DESC',
    );
    // get the last $how_many_posts, which we will loop over
    // and gather the tags of
    query_posts($args);
    //
    $temp_ids = array();
    while (have_posts()) : the_post(); 
        // get tags for each post
        $posttags = get_the_tags();
        if ($posttags) {
            foreach($posttags as $tag) {
                // store each tag id value
                $temp_ids[] = $tag->term_id;
            }
        }
    endwhile;
    // we're done with that loop, so we need to reset the query now
    wp_reset_query();
    $id_string = implode(',', array_unique($temp_ids));
    // These are the params I use, you'll want to adjust the args
    // to suit the look you want    
    $args = array(
        'smallest'  => 15, 
        'largest'   => 15,
        'unit'      => 'px', 
        'number'    => 10,  
        'format'    => 'flat',
        'separator' => "n&bull;n",
        'orderby'   => 'count', 
        'order'     => 'DESC',
        'include'   => $id_string,  // only include stored ids
        'link'      => 'view', 
        'echo'      => true,

    );
    wp_tag_cloud( $args );
    ?>

UPDATE: I am wondering since doing passing an ‘exclude’ object in the args for wp_tag_cloud didn’t work as one answer suggested, if doing an unset before the wp_tag_cloud runs is how to make this work? The problem is is that I don’t know much about php or WordPress so I’m not sure how to work that in to the above code.

                foreach( $tags as $tag_key => $tag_object ) {
                if ( 'tag1' == $tag_object->slug || 'tag2' == $tag_object->slug ) {
                        unset( $tags[$tag_key] );
                        }
                    }

Thanks for your help!

UPDATE 2:
@artlung answer worked perfectly.

Related posts

Leave a Reply

2 comments

  1. <?php
        $how_many_posts = 50;
        $exclude_these_term_ids = array(
           10,
           20,
           35,
        );
        $args = array(
            'posts_per_page' => $how_many_posts,
            'orderby' => 'date',
            'order' => 'DESC',
        );
        // get the last $how_many_posts, which we will loop over
        // and gather the tags of
        query_posts($args);
        //
        $temp_ids = array();
        while (have_posts()) : the_post(); 
            // get tags for each post
            $posttags = get_the_tags();
            if ($posttags) {
                foreach($posttags as $tag) {
                    // store each tag id value
                    // that is not in the $exclude_these_term_ids
                    // array
                    if (!in_array($tag->term_id, $exclude_these_term_ids)) {
                        $temp_ids[] = $tag->term_id;
                    }
                }
            }
        endwhile;
        // we're done with that loop, so we need to reset the query now
        wp_reset_query();
        $id_string = implode(',', array_unique($temp_ids));
        // These are the params I use, you'll want to adjust the args
        // to suit the look you want    
        $args = array(
            'smallest'  => 15, 
            'largest'   => 15,
            'unit'      => 'px', 
            'number'    => 10,  
            'format'    => 'flat',
            'separator' => "n&bull;n",
            'orderby'   => 'count', 
            'order'     => 'DESC',
            'include'   => $id_string,  // only include stored ids
            'link'      => 'view', 
            'echo'      => true,
    
        );
        wp_tag_cloud( $args );
        ?>
    
  2. The function get_the_tags returns an array of objects, one object for each tag assigned to the post. If you want to exclude some tags you can do it in the wp_tag_cloud function by the tag id or slug. Example:

    $args = array(
            'smallest'  => 15, 
            'largest'   => 15,
            'unit'      => 'px', 
            'number'    => 10,  
            'format'    => 'flat',
            'separator' => "n&bull;n",
            'orderby'   => 'count', 
            'order'     => 'DESC',
            'include'   => $id_string,  // only include stored ids
            'exclude'   => 'tag1, tag2, tag3',
            'link'      => 'view', 
            'echo'      => true,
    
        );
        wp_tag_cloud( $args );