サポート » プラグイン » Custom Post Type UI にて作成したカスタム投稿記事のタグ取得について

  • 解決済 pandora001

    (@pandora001)


     お世話になります。
    初めての質問で不備等ありましたら申し訳ありません。

     プラグイン”Custom Post Type UI”にて”NEWS”というカスタム投稿タイプを作成しております。

    ブログ記事(”投稿”にて作成)の中に、そのブログ記事で使用したタグと同じタグを持つ最新の”NEWS”記事を表示できるようなコードを書きたいと思っているのですが、上手くいかず困っております。

    自分では色々調べてみたのですが、解決できず助けていただけないでしょうか?

    現在下記のようなコードで、タグが”投稿”にて作成した記事からしか拾えない状態です。

    <?php
        global $post_id;    //グローバル変数より投稿IDをゲット
        global $tags;       //グローバル変数よりタグ情報をゲット
        $relatedpost_count = 0; //関連記事を出力した数(カウンタ)
        $relatedpost_max = 3;   //関連記事を出力する最大数
        $related_taglist = [];  //関連記事を出力する為のタグリスト
        $tags = get_the_terms( $id, 'post_tag');
        // get_the_tags();
    
        //記事からタグを集める
        foreach( $tags as $tag ):   //記事に含まれるタグの数だけ繰り返し
            $related_taglist[] = $tag -> term_id;    //タグIDをリスト配列に追加
        endforeach;
    
        $args = array(              //出力用セッティング
          'post__not_in'=> array( $post_id ),    //おおもとの記事は除外する
          'tag__in'     => $related_taglist, //タグ配列に含まれるタグに含まれる記事を取得
        );
        query_posts( $args );       //設定より記事取得
        while ( have_posts() ) :    //一致する記事が見つかった場合繰り返す
            the_post();
        ?>
            <?php if( !$relatedpost_count ): /* 最初の記事の場合、ヘッダを付与 */ ?>
                <div id="related_article">
                    <h2 class="related_article_title">
                        ニュース
                    </h2>
                    <div class="related_article_posts">
            <?php endif; ?>
                    <a class="related_article_link" href="<?php echo get_permalink(); ?>" target="_blank">
                        <div class="date fontss">
                          <?php the_time('Y/m/d'); ?>
                        </div>
                        <div class="related_article_post">
                            <?php the_title(); ?>
                        </div>
                    </a>
        <?php
            $relatedpost_count++;   //記事を出力した数を加算
            if( !($relatedpost_count < $relatedpost_max ) ): //[if]目的の数記事を出力した場合
                break;                                              //ループを出る
            endif;
        endwhile;
        if( $relatedpost_count ):   ?>
      </div>
                </div><!--id:related_article close-->
        <?php
        endif;
        wp_reset_query();   //元のクエリを復帰
    ?>
    

    Custom Post Type UIの設定は以下の様になっております

    name: news
    label: NEWS
    singular_label: NEWS
    description: “”
    public: true
    publicly_queryable: true
    show_ui: true
    show_in_nav_menus: true
    show_in_rest: false
    rest_base: “”
    rest_controller_class: “”
    has_archive: false
    has_archive_string: “”
    exclude_from_search: false
    capability_type: post
    hierarchical: false
    rewrite: true
    rewrite_slug: “”
    rewrite_withfront: true
    query_var: true
    query_var_slug: “”
    menu_position: “”
    show_in_menu: true
    show_in_menu_string: “”
    menu_icon: “”
    custom_supports: “”

    サポート

    title
    editor
    thumbnail
    comments

    タクソノミー

    post_tag

    お手間おかけいたしますが、ご教授いただければ幸いです。

    • このトピックは pandora001が2 週間、 3 日前に変更しました。
5件の返信を表示中 - 1 - 5件目 (全5件中)
  • CG

    (@du-bist-der-lenz)

    投稿、固定ページ、カスタム投稿タイプを串刺しにして、同じタグを持つコンテンツを表示させたい、ということでしょうか。

    こんにちは

    まず、コード上で問題があるところを何点か挙げてみます。

    1.

    global $post_id; //グローバル変数より投稿IDをゲット

    投稿ページに、グローバル変数 $post_id は存在しません。

    $post_id = get_the_ID();

    ではないでしょうか。

    2.

    global $tags;       //グローバル変数よりタグ情報をゲット
    (省略)
    $tags = get_the_terms( $id, 'post_tag');

    投稿ページに、グローバル変数 $tags は存在しません。また、$id が未定義です。

    $tags = get_the_tags();

    ではないでしょうか。

    3.

    $args = array(              //出力用セッティング
      'post__not_in'=> array( $post_id ),    //おおもとの記事は除外する
      'tag__in'     => $related_taglist, //タグ配列に含まれるタグに含まれる記事を取得
    );

    $args = array(              //出力用セッティング
      'post_type' => 'news',    // <- 追加
      'post__not_in'=> array( $post_id ),    //おおもとの記事は除外する
      'tag__in'     => $related_taglist, //タグ配列に含まれるタグに含まれる記事を取得
    );

    上手くいかず困っております。

    あとは、どのように上手くいかないのか、もう少し具体的に示していただければと思います。

    CG (@du-bist-der-lenz)様、ishitaka (@ishitaka)様

     ご教授ありがとうございます。

    投稿、固定ページ、カスタム投稿タイプの串刺しではなく、NEWSのコンテンツかつ、同じタグを持つ記事のみ表示したいと考えておりました。

    ishitaka (@ishitaka)様のご指摘点を修正しましたら、思っていたような機能を実装することができました。本当にありがとうございました。

    もう一点。
    query_posts() はテンプレート内で使用することは推奨されていないので、get_posts() や WP_Query クラス等を使用することをおすすめします。
    https://wpdocs.osdn.jp/テンプレートタグ/query_posts

    query_posts( $args );       //設定より記事取得
    while ( have_posts() ) :    //一致する記事が見つかった場合繰り返す
        the_post();
        (省略)
    wp_reset_query();   //元のクエリを復帰

    $the_query = new WP_Query( $args );
    if ( $the_query->have_posts() ) {
    	while ( $the_query->have_posts() ) :
    		$the_query->the_post();
    		(省略)
    	wp_reset_postdata();
    }

    あと、解決したらトピックのステータスを「解決済み」にしておいて下さいね。
    https://ja.wordpress.org/support/topic/質問ルール/

    ishitaka (@ishitaka)様

    お世話になっております。
    詳細までご教示ありがとうございます。

    解決済ステータスの件もありがとうございます。
    本当に助かりました。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • このトピックに返信するにはログインが必要です。