web-dev-qa-db-ja.com

分類法から現在のタグを取り出すにはどうすればよいですか。

そこで私は、ページ/プロジェクトに複数のカテゴリを追加するためのカスタム分類法をいくつか作りました。 (single-work.php)デフォルトのもの(組み込みカテゴリ)はproject typeで、2つの新しいものはclientagencyです。

基本的に3つすべてに同じコードを使用しますが、2つのカスタムカテゴリに対して行っていることは基本的に、特定のページに選択されたタグだけを表示するのではなく、別のプロジェクトに追加したすべてのタグを読み取ることです。

言い換えれば、それは基本的に「最も使用されているタグから選択する」エリアの下にあるすべてのタグを表示しているだけです。各プロジェクトに選択されているタグは1つだけですが。

私はそれが多少明確だったことを願っています:)

これが私が使っているコードです:

<?php $terms = get_terms( 'portfolio_tags_client' );
    foreach ( $terms as $term ) {
        $term_link = get_term_link( $term );
        if ( is_wp_error( $term_link ) ) {
            continue;
        }
    echo 'Client: <a href="' . esc_url( $term_link ) . '">' . $term->name . '</a>&nbsp;<br />';
    }
?>

そして、これが出てくる分類法です。

register_taxonomy(
    'portfolio_tags_client',  //The name of the taxonomy. Name should be in slug form (must not contain capital letters or spaces). 
    'work', // Post type name
    array(
        'hierarchical'  =>  false,
        'label'         =>  'Clients', // Display name
        'singular_name' =>  'Client',
        'query_var'     =>  true,
        'rewrite'       =>  array(
        'slug'          =>  'client', // This controls the base slug that will display before each term
        'with_front'    =>  false // Don't display the category base before 
        )
    )
);

誰かがそれが何であるかを知っていますか?私はこれを直そうとしたことを認めたいよりもずっと多くの時間を費やしました:)

UPDATE修正しました。助けてくれてありがとう。ほんとうにありがとう。これが最終的なコードです。

<?php $post_tags = get_the_terms(get_the_ID(), 'portfolio_tags_client'); 
    if ($post_tags) {
        foreach($post_tags as $tag) {
        echo 'Client: <a href="'.get_tag_link($tag->term_id).'" title="'.$tag->name.'">'. $tag->name .'</a>&nbsp;<br />';
        }
    }
?>
1
dem0n

あなたが探しているのはget_the_terms()です。次のコードを使用して、現在の投稿のカスタム用語を取得できます。

$post_tags = get_the_terms(get_the_ID(), 'portfolio_tags_client'); 
if ($post_tags) { ?>
    <div class="tags-div">
        <h3><?php _e( 'Tags', 'text-domain' ); ?></h3>  
        <div class="post-tags"><?php
            foreach($post_tags as $tag) {
                echo '<a href="'.get_tag_link($tag->term_id).'" title="'.$tag->name.'">'. $tag->name .'</a>'; 
            } ?>
        </div>      
    </div><?php 
}

これはあなたのsingle.phpまたはあなたの投稿のコンテンツをレンダリングするテンプレートで使われるべきです。 get_the_term()自体はどこでも使用できますが、投稿のIDを渡す必要があるため、適切なテンプレートファイルで使用する必要があります。

2
Jack Johansson

これはget_terms()の予想される動作です。代わりに wp_get_object_terms() を使用できます。

$terms = wp_get_object_terms( $post->ID, 'portfolio_tags_client' );

ループの内側にいる場合は、代わりに次のものを使用できます。

$terms = wp_get_object_terms( get_the_ID(), 'portfolio_tags_client' );
2
kero