web-dev-qa-db-ja.com

Get_the_tagsリストから特定のタグを除外する

私は私の個人的な使用のために子供のテーマを作りますphpにあまり馴染みがなく、ロジックに基づいて基本的なことしかできません。単一の投稿のタグリストに表示されているタグを1つ除外する必要があります。このタグが投稿に割り当てられた唯一のタグである場合は、何も表示されないことが好ましい(つまり、「タグ」タイトルがない、何もない)。

これが私が親テーマから持っているものです:

$tags = get_the_tags( $post->ID );
$separator = ' ';
$output = '';
if($tags){
echo '<div class="entry-tags">';
    echo "<p><span>" . __('Tags', 'tracks') . "</span>";
        foreach($tags as $tag) {
            $output .= '<a href="'.get_tag_link( $tag->term_id ).'" title="' . esc_attr( sprintf( __( "View all posts tagged %s", 'tracks' ), $tag->name ) ) . '">'.$tag->name.'</a>'.$separator;
            }
            echo trim($output, $separator);
        echo "</p>";
    echo "</div>";
}

私は この の解決策を適用しようとしましたが、うまくいきませんでした。私は自分のしていることを完全には理解していないからでしょう。 :)

誰かが多分これで私を助けてもらえますか。

1
Jaaaarne
$tags = get_the_tags( $post->ID );
$separator = ' ';
$output = '';
if($tags){
echo '<div class="entry-tags">';
    echo "<p><span>" . __('Tags', 'tracks') . "</span>";
        foreach($tags as $tag) {
            // dpm($tag) here by uncomment you can check tag slug which you want to exclude
            if($tag->slug != "yourtag"){ // replace yourtag with you required tag name
               $output .= '<a href="'.get_tag_link( $tag->term_id ).'" title="' . esc_attr( sprintf( __( "View all posts tagged %s", 'tracks' ), $tag->name ) ) . '">'.$tag->name.'</a>'.$separator;
            }
          }
            echo trim($output, $separator);
        echo "</p>";
    echo "</div>";
}

Tagnameがあなたのタグと等しくない場合、それが出力に追加されるという条件を適用することができます。

ありがとうございます。

0
jas

get_the_tags()get_the_terms() を使います。

1265            return apply_filters( 'get_the_tags', get_the_terms( $id, 'post_tag' ) );

これは フィルタを適用します

1372            $terms = apply_filters( 'get_the_terms', $terms, $post->ID, $taxonomy );

あなたが望む用語を除外するためにそのフィルタを使うことができます。答えはこの質問の と実質的に同じです 。ただし、Coreでの関数呼び出しの順序は多少異なります。

function exclude_my_term($terms, $post, $taxonomy) {
  remove_filter('get_the_terms','exclude_my_term',10,3);
  unset($terms[123]); // where 123 is the ID of the term to exclude
  return $terms;
}
add_filter('get_the_terms','exclude_my_term',10,3);
1
s_ha_dum

私はより明確であると思うスタックオーバーフローについても同様の答えを見つけました。 get_the_tag_listからタグを除外するには、get_termsにフィルタを適用します。

add_filter('get_the_terms', 'exclude_terms');
echo get_the_tag_list('<p class="text-muted"><i class="fa fa-tags">',', ','</i></p>');
remove_filter('get_the_terms', 'exclude_terms');

get_the_termsにフィルタを追加し、エコーした後すぐにそれを削除します。

コールバック関数は、IDまたはスラッグによって用語を削除します。

function exclude_terms($terms) {
    $exclude_terms = array(9,11); //put term ids here to remove!
    if (!empty($terms) && is_array($terms)) {
        foreach ($terms as $key => $term) {
            if (in_array($term->term_id, $exclude_terms)) {
                unset($terms[$key]);
            }
        }
    }

    return $terms;
}

get_the_category_listについてもまったく同じことができます - 異なる名前で重複するコールバック関数を作成して(たとえば、exclude-cats)、除外したいIDを追加してフィルタを適用します。

add_filter('get_the_terms', 'exclude_cats');
echo get_the_category_list('<p class="text-muted"><i class="fa fa-tags">',', ','</i></p>');
remove_filter('get_the_terms', 'exclude_cats');

私はあなたがこれを一つの機能にしてIDを渡すことができると思います...

0
Bernard Meisler