サポート » 使い方全般 » 同じterm_groupの記事を関連記事として表示したい

  • 解決済 yuzunon

    (@yuzunon)


    Tag Groupsというプラグインを使って投稿タグをグループ分けしました。

    Tag Groups
    https://wordpress.org/plugins/tag-groups/

    作成したグループのIDはterm_groupに保存されるようなので、term_groupを使って記事を抽出出来ないかと思い色々調べてみたのですが事例が見つけられませんでした。

    term_groupで記事の抽出は出来ないのでしょうか?

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • yuzunonさん

    関数リファレンス/wp get object terms

    これとは、違う感じでしょうか?

    トピック投稿者 yuzunon

    (@yuzunon)

    mura0403さん、ご返信ありがとうございます。

    ご提示のページも見たのですが、’orderby’ => ‘term_group’だと並び順を変更するだけになってしまってterm_groupで絞り込みする方法が分かりませんでした。

    関連記事の出力は下記のサイトで紹介されているコードを使っています。
    https://manablog.org/wordpress-related-post/

    yuzunonさん

    term_group (整数)
    親タームのターム ID (’parent’ としても格納される)

    関数リファレンス/wp get post terms

    普通に親IDを指定するやり方だと指定が難しいですか?

    
    // タクソノミーにはデフォルト値がないので下記を例として使う。
    $taxonomies = array( 
        'taxonomy_name',
    );
    $args = array(
        'orderby'       => 'id',//id,count,name - デフォルト,slug,term_group - 実装が充分ではない(利用を避けること),none
        'order'         => 'ASC',//ASC - デフォルト(昇順),DESC(降順)
        'hide_empty'    => true, //空タームを表示させない true or false
        'exclude_tree'  => array(), //除外親ID
        'include'       => array(),//指定IDのみ表示(空の場合は全部表示)
        'number'        => '', //表示するタームの数
        'fields'        => 'all', 
        /*
        all - タームオブジェクトの配列を返す - デフォルト
        ids - 整数(ターム ID)の配列を返す
        names - 文字列(ターム名)の配列を返す
        count - (バージョン 3.2 以上)見つかったタームの個数を返す
        id=>parent - 連想配列を返す。キーはターム ID、値は親タームの ID またはゼロ(親がない場合)
        id=>slug - 連想配列を返す。キーはターム ID、値はスラッグ
        id=>name - 連想配列を返す。キーはターム ID、値はターム名 
        */
        'slug'          => '', //表示させるslug
        'parent'        => '',
        /*直近の子タームを返す(指定された値が親タームの ID であるタームのみ)。
        ゼロを指定するとトップレベルのタームのみを返す。デフォルトは空文字列。
        */
        'hierarchical'  => true, //子タームを持たせるかどうか
        /*
        1 (true) - デフォルト
        0 (false) 
        */
        'child_of'      => 0, //指定したタームの子孫をすべて取得します。デフォルトは 0 です。
        'childless'     => false,
        /*タクソノミーが階層有りの場合、子を持たないタームのみを返します。
        階層無しの場合、すべてのタームを対象とします。
        */
        'get'           => '', //この値を 'all' にすると 'hide_empty' と 'child_of' が無効になります(すべてのタームを取得します)。 
        'name__like'    => '',//ターム名にマッチさせたい文字列。
        'description__like' => '',//タームの説明に 'description__like' の文字列を含む(大文字小文字を区別して)タームを返します
        'pad_counts'    => false,//true のとき、子孫タームすべてのカウント 
        'offset'        => '', //見つかったタームの先頭から指定の個数を読み飛ばして返します。必ず 'number' と一緒に使ってください。
        'search'        => '', //ターム名にマッチさせたい文字列。ターム名とスラッグに対して検索対象
        'cache_domain'  => 'core'
         
    ); 
     
    $terms = get_terms(  $taxonomies, $args );
    

    ここから、タームIDをURLのソースに渡してあげればいかがでしょうか?

    「親タームのターム ID (’parent’ としても格納される)」が前提ですが

    間違っていたらすみません。

    サンプルコード、ありますね。
    ご覧になりましたでしょうか?

    http://www.christoph-amthor.de/software/tag-groups/examples-applications/

    トピック投稿者 yuzunon

    (@yuzunon)

    親タームのターム ID (’parent’ としても格納される)

    ↑も見てたので、下記のような設定にしたのですがうまく動いてくれなくて…

    $term = wp_get_post_tags( $post->ID, array( 'fields' => 'ids' ) );
    $term_p = $term->parent;
    $arg = array (
        'post_status' => 'publish',
        'post_type' => 'post',
        'tax_query' => array(
            'relation' => 'AND',
            array(
                'taxonomy' => 'post_tag',
                'field' => 'term_id',
                'terms' => $term_p,
                'operator' => 'IN'
            )
        )
    );
    $searched_posts = get_posts( $arg );
    トピック投稿者 yuzunon

    (@yuzunon)

    get_queried_object()でtermのオブジェクトを確認してみたらparentにterm_groupのIDが格納されていませんでした(^_^;)

    Tag Groupsプラグインで追加したterm_groupはparentには格納されない?ようでした。

    ということで、Tag Groupsプラグインのサンプルコード「7. Display tags in columns」を参考に同じterm_groupに属するterm_idを抜き出して、それをそのままtax_queryに入れることにしました。

    $term = get_queried_object();
    $groups = tag_groups_cloud( array( 'include' => $term->term_group, 'show_tabs' => 0 ), true );
    foreach ( $groups as $group ){
        foreach ( $group['tags'] as &$tag ){
            if( $tag['term_id'] == $term->term_id ) {
                unset( $tag['id'] );
            }
        }
        foreach ( $group['tags'] as $tag ){
            $group_terms .= $tag['id'] . ',';
        }
    }
    $group_terms_id = rtrim($group_terms, ',');

    スマートなコードではないと思いますが、取りあえず思い通りの表示が出来るようになったので解決済みとさせていただきます。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「同じterm_groupの記事を関連記事として表示したい」には新たに返信することはできません。