web-dev-qa-db-ja.com

Get_the_tagsからタグを除外する

日付順にタグを取得するために この記事 を使用しているときに、返されるものから特定のタグを除外できるかどうか疑問に思いました。ポイントはトレンドタグを持つことですが、いくつかのタグは常にそこにあるでしょう、そして私はそれらのタグを含めたくありません。

これがコードです:

    <?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:wp_tag_cloudの引数で 'exclude'オブジェクトを渡しても1つの回答としてはうまくいかなかったので、私は思っていますこの仕事をする?問題は、私がphpやWordpressについてあまり知らないということですので、上記のコードにそれをどのように組み込むかわからないです。

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

ご協力いただきありがとうございます!

更新2:@artlungの回答は完全に機能しました。

3
Dustin J
<?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
artlung

関数get_the_tagsは、投稿に割り当てられたタグごとに1つのオブジェクトのオブジェクトの配列を返します。いくつかのタグを除外したい場合は、wp_tag_cloud関数でタグIDまたはスラッグを使用してそれを実行できます。例:

$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 );
1