質問: get_posts( $args ); foreach( $posts as $post ) { setup_postdata($post); ?> get_the_title()) ); ?> ``` ### ■質問 1カテゴリIDを取得する部分↓が間違っているのかなって思います。 get_queried_object_id($post->ID,'fields=ids'); 現状はこう書いておりますけれど、違うようです。 どうすれば、カスタム投稿タイプで「いま表示中のページのカテゴリID」を取得できるのでしょうか? 2それとも別のところでしょうか? 以上です。1か2か、お分かりになる方、よろしくお願いいたします。m(__)m ### ■ちなみに これはあっていると思いますが念のため。 functions.phpではこのように書いてカスタム投稿タイプにカテゴリを設定しています。 ``` // カスタム投稿タイプの追加 add_action( 'init', 'custum_post_type' ); function custum_post_type() { //test1の投稿タイプ追加 register_post_type( 'test1', array('labels' => array( 'name' => __( 'test1' ), 'singular_name' => __( 'test1' ) ), //投稿タイプの設定 'public' => true, 'menu_position' => 5, 'hierarchicla' => false, 'has_archive' => true, //パーマリンクを /test1/投稿名/ にします。 'rewrite' => array( 'slug' => 'wp-test1' ), //投稿編集ページの設定 'supports' => array('title','editor','thumbnail', //タイトル,編集,アイキャッチ 'custom-fields','excerpt','author','trackbacks', //カスタムフィールド,抜粋文&作成者,トラックバック 'comments','revisions','page-attributes') //コメント,リビジョン,作成者,表示順のボックス ) ); //test1のカテゴリー追加 register_taxonomy( 'test1-category', /* タクソノミーのslug */ 'test1', /* 属する投稿タイプ */ array( 'hierarchical' => true, 'update_count_callback' => '_update_post_term_count', 'label' => 'カテゴリー', 'singular_label' => 'カテゴリー', 'public' => true, 'show_ui' => true ) ); } ```
回答: 試行錯誤された結果だとは思うのですが、タグの順序がおかしかったり、 関数名が誤っていたり、少し散らかってしまっているようです。 まず、functions.phpの内容をもとに状況を整理します。 * **test1**というカスタム投稿タイプがある * **test1**に所属する、**test1-category**というカスタムタクソノミーがある * 今表示している記事と同じタームがついた記事を、カスタムフィールド**Views**の順番で5件表示したい 単語の意味については、以下のサイトさんなどを参考にされてください。 KANTENA.com | 投稿タイプ、タクソノミー、タームについて 通常のカテゴリーとカスタム投稿タイプと紐づく カスタムタクソノミー(として宣言したカテゴリー)では記述も大きく変わります。 質問文に記載頂いていた内容だと、カスタムタクソノミーに対応できていなかったので、 カスタムタクソノミーの内容を取得~記事を検索する流れを紹介します。 ### 1.表示中の記事が所属しているタームを取得する シングルページで`get_queried_object_id`を取得すると、 タームIDではなく、記事IDが返ってきてしまいます。 タームIDは、所属する全てのタームを取得できる`the_terms`を使って取得すると良いです。 ``` term_id; } ?> ``` ### 2.同じタームに所属している記事を検索する タームIDを指定して`get_posts`で取得するには以下の様にします。 ``` 'test1', //ここにはカスタム投稿タイプ名を入れます 'posts_per_page' => 5, 'meta_key' => 'views', 'orderby' => 'meta_value_num', 'tax_query' => array( //タームを検索する場合の表記はここから...... array( 'taxonomy' => 'test1-category', //ここにはカスタムタクソノミー名を入れます 'field' => 'term_id', //今回はタームIDで検索するのでterm_idを入れます 'terms' => $term_ids, //IDが格納された配列を指定します 'operator' => 'IN' //格納されているいずれかに一致した記事を見つける場合の表記です(全てに一致とする場合はANDにします) ), ), //......ここまで ); $posts = get_posts($args); ?> ``` サンプル viewsなどのカスタムフィールドを準備するのが手間だったので 動作の確認は行っていませんが、この様な感じで上手く動くのではと思います。 ``` term_id; } $args = array( 'post_type' => 'test1', 'posts_per_page' => 5, 'meta_key' => 'views', 'orderby' => 'meta_value_num', 'tax_query' => array( array( 'taxonomy' => 'test1-category', 'field' => 'term_id', 'terms' => $term_ids, 'operator' => 'IN' ), ), ); $posts = get_posts($args); ?> 関連記事 ...表示の内容... ``` もし、質問の解釈が間違えている部分などあればご指摘ください。 カスタム投稿タイプやカスタムタクソノミーにタームなど、 名前も似ていて紛らわしいですが、使いこなすとすっごく便利なものです。 難しいのは初めだけなので、頑張ってみてください!