質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

4393閲覧

wordpressカスタム投稿を呼び出す時にカスタムフィールドの値を使いたい

ohagin

総合スコア14

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/05/11 09:22

編集2017/05/11 11:21

カスタム投稿で制作した特定カテゴリに属する記事のタイトルを、投稿ページ(single.php)に読み込みたいです。
その際カスタム投稿のカテゴリの指定方法は、カスタムフィールドの値で指定したいのですが、調べても何も出てきません。

<?php query_posts( array( 'post_type' => 'gallery', 'posts_per_page' => -1, 'category' => 'ここにカスタムフィールドの値を入れたい' )); ?> <?php if(have_posts()): ?> <?php while(have_posts()):the_post(); ?> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> <?php endwhile; else: ?> 無い場合は何も表示しない <?php endif; ?> <?php wp_reset_query(); ?>

カスタムフィールドの値は、投稿ページで指定した、カスタム投稿のカテゴリ名です。
このような事は実現可能なのかどうか、もしできるならヒントだけでも教えていただけないでしょうか。
よろしくお願いいたします。

教えていただいた後、query_postsの件を調べ書き換えましたが、やはり思うような動きにはなりません。

<?php $custom_field= get_post_meta($post_id, 'カスタムフィールド名', true ); $args = array( 'post_type' => 'gallery', 'category' => '$custom_field', 'posts_per_page' => -1 ); $myposts = get_posts( $args ); if( !empty( $myposts ) ) : foreach ( $myposts as $post ) : setup_postdata( $post ); ?> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> <?php endforeach; ?> <?php elseif( empty( $myposts ) ): ?> 無い場合は何も表示しない <?php endif; ?> <?php wp_reset_query(); ?>

カテゴリの箇所に変数を入れたところカスタム投稿が全て表示されました。
変数をカテゴリスラッグに変えても同様にすべて表示されます。
IDを入れたところ、逆に何も表示されなくなりました。
この現象から、コード自体が間違っておりカスタム投稿のカテゴリ分岐自体が出来ていないのではないかと思うのですが、どこをどう間違っているのか分かりません。
何度も申し訳ないのですが、お分かりになられる方お教えください。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

投稿ページ(single.php)のカスタムフィールドの値を使用するなら、

ここの

php

1$custom_field= get_post_meta($post_id, 'カスタムフィールド名', true );

$post_id は get_the_ID() にする必要があると思います。

で、

php

1'category'=>$custom_field

の $custom_field の値はカテゴリー ID を指定する必要があります。

テンプレートタグ/get posts

追記

カスタム投稿に設定されたのは、カテゴリーではなくタクソノミーといわれるものです。
$myposts の前2行を以下のコードに、

php

1 $custom_field = get_post_meta(get_the_ID(), 'カスタムフィールド名', true ); 2 $term = get_term( $custom_field, カスタムタクソノミー名 ); 3 $slug = $term->slug; // タームのスラッグ 4$args = array( 5 'post_type' => 'カスタム投稿タイプ名', 6 'posts_per_page' => -1, 7 'tax_query' => array( 8 array( 9 'taxonomy' => 'カスタムタクソノミー名', 10 'field' => 'slug', 11 'terms' => $slug, 12 ), 13 ), 14 );

これでいけるのではないでしょうか。

投稿2017/05/12 00:09

編集2017/05/12 06:43
8-0_nyan5

総合スコア2352

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ohagin

2017/05/12 00:32

ありがとうございました。 やはり同じ動きでカテゴリIDをカスタムフィールドに入れると「無い場合は何も表示しない」と表示されます。 しかし、スラッグの場合はエラーが起こっているのか、カスタム投稿内のすべての投稿がとれます。 カスタム投稿にカテゴリを作り、カテゴリ一覧でも何件と表示されているのに、カテゴリに入らない等あるのでしょうか? 知識が乏しいために何度もお手数をおかけし申し訳ありません。 ありがとうございます。
8-0_nyan5

2017/05/12 00:35

投稿ページ(single.php)に上記のコードを設置しているのですよね。
ohagin

2017/05/12 00:41

はい、投稿ページ(single.php)にコードを書き、カスタム投稿した記事のタイトルを呼び出そうとしています。 カテゴリを指定ではなく、カスタムフィールドの値で呼び出しを試してみたところ、問題なく呼び出しが出来ました。 ただこの方法ですと、都度カスタムフィールドに入力が必要となるため、カテゴリ分けで実現できるのが理想です。 <?php $custom=get_post_custom_values("カスタムフィールド名"); $args = array( 'post_type' => 'housegallery', 'meta_key' => 'カスタム投稿のカスタムフィールド名', 'meta_value' => $custom[0], 'posts_per_page' => 5 ); $myposts = get_posts( $args ); if( !empty( $myposts ) ) : foreach ( $myposts as $post ) : setup_postdata( $post ); ?> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> <?php the_post_thumbnail(''); ?> <?php endforeach; ?> <?php elseif( empty( $myposts ) ):  ?> 無い場合は何も表示しない <?php endif; ?> <?php wp_reset_query(); ?> 何度もありがとうございます。
8-0_nyan5

2017/05/12 02:16

ちょっと整理したいんですが、もしかして、 「投稿のcategory(カテゴリのID)」をもとに「カスタム投稿のカスタムフィールド(投稿のカテゴリID)」をもってくると言うことですか?
ohagin

2017/05/12 02:47

ありがとうございます。 8-0_nyan5様にご指摘いただきました、逆の事がしたいのです。 投稿のカスタムフィールドの値を元に、カスタム投稿のカテゴリに入っている記事を持ってきたいです。 カスタム投稿ーーカテゴリ1ーカスタム投稿記事1       |-カテゴリ2ーカスタム投稿記事2       |-カテゴリ3       |-カテゴリ4 カスタムフィールドでカテゴリ1のIDを指定した投稿ページに、カスタム投稿記事1を掲載したいです。 ややこしくて本当に申し訳ございません。
8-0_nyan5

2017/05/12 05:43

投稿とカスタム投稿で同じカテゴリーを設定すればいいような気もしますし、 そもそも、カテゴリーを設定したカスタム投稿がカテゴリー指定で呼び出せないのは変ですね。 もしかして、カスタム投稿に設定しているのは、カテゴリーでなくカスタムタクソノミーということはないですか。
ohagin

2017/05/12 05:58

何度もご返答下さり本当にありがとうございます。 カスタム投稿自体は下記コードで制作しておりますが、間違っていますでしょうか? どうぞよろしくお願いいたします。 //カスタム投稿タイプ add_action('init', 'gallery_init'); function gallery_init() { $labels = array( 'name' => _x('アルバム', 'post type general name'), 'singular_name' => _x('アルバム', 'post type singular name'), 'add_new' => _x('アルバムを追加する', 'gallery'), 'add_new_item' => __('アルバムを追加する'), 'edit_item' => __('アルバムを編集'), 'new_item' => __('新しいアルバム'), 'view_item' => __('アルバムを見てみる'), 'search_items' => __('アルバムを探す'), 'not_found' => __('アルバムはありません'), 'not_found_in_trash' => __('ゴミ箱にアルバムはありません'), 'parent_item_colon' => '' ); $args = array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'query_var' => true, 'rewrite' => true, 'capability_type' => 'post', 'hierarchical' => false, 'menu_position' => 5, 'supports' => array('title','editor','thumbnail','custom-fields','excerpt','revisions','page-attributes','comments'), 'has_archive' => true ); register_post_type('gallery',$args); //カテゴリータイプ $args = array( 'label' => 'アルバムカテゴリー', 'public' => true, 'show_ui' => true, 'hierarchical' => true ); register_taxonomy('gallery_category','gallery',$args); //タグタイプ $args = array( 'label' => 'アルバムタグ', 'public' => true, 'show_ui' => true, 'hierarchical' => false ); register_taxonomy('gallery_tag','gallery',$args); }
ohagin

2017/05/12 09:03

ありがとうございました。 無事に思う形を実現することができました。 カスタム投稿とカスタムタクソノミーの違いがあまりよく分かっておらず、長々とご教授いただくことになり申し訳ありませんでした。 本当に助かりました。 ありがとうございました。
guest

0

適当な変数にカスタムフィールドの値を格納し、それを引数に指定すればいいです。

例えば、

'category'=>$custom_field

こんなふうに。
特別なことをする必要はありません。

後、余談にはなりますが、テンプレートファイル内でquery_postsは使わない方がいいです。
理由は様々なサイトで解説されているので、調べてみてください。


追記

https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/get_posts#.E3.83.91.E3.83.A9.E3.83.A1.E3.83.BC.E3.82.BF

注意: category パラメータではカテゴリー名ではなくカテゴリー ID を指定する必要があります。


追記2
$custom_fieldに想定している値が入っているかは確認しましたか。

投稿2017/05/11 09:40

編集2017/05/11 13:38
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ohagin

2017/05/11 11:22

ありがとうございました。 思うような動きにならず質問に追記させていただきました。
8-0_nyan5

2017/05/11 11:24

'$custom_field' シングルクォーテーションがいらないんじゃないですか?
ohagin

2017/05/11 12:03

ありがとうございます。 やはり動きません。 カスタムフィールドにカテゴリスラッグを入れるとすべて表示され、IDを入力すると一件も表示されなくなる。 このことから、コードではなくカテゴリの作り方に問題がある可能性が大きいでしょうか?
ohagin

2017/05/11 13:44

追記ありがとうございました。 はい、確認しております。 カテゴリスラッグを入れた場合と、カテゴリIDを入れた場合、表示が違いました。 スラッグの場合は全てのカスタム投稿が表示され、 カテゴリIDの場合は、一件も表示されませんでした。 echoで読み込まれている確認も行いましたので、変数の取得は出来ていると思うのですが…
8-0_nyan5

2017/05/11 14:08

$post_id には何が入っていますか?
ohagin

2017/05/11 23:43

ありがとうございます。 すみません、$post_idの中身の確認方法が分からず止まっています。 カスタム投稿の設定が間違っており、カテゴリに正しく入っていないという可能性はありますでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問