トピック投稿者
fjsk
(@fjsk)
…何故かタイトルが消えていましたが、編集で短くすると直りました。
カスタム投稿タイプのカスタムフィールドの項目を固定ページにて一覧を表示させる事は可能か?
と記載しました。宜しくお願い致します!
やり方が分からないのは、どの部分でしょう?
- カスタム投稿の1つの投稿を表示するページを作る(カスタムフィールドなし)
- そのページに追加して、カスタムフィールドの値を表示させる
- 固定ページにカスタム投稿の一覧を表示させる(カスタムフィールドなし)
- そのページに追加して、カスタムフィールドのいくつかだけを表示させる
なお、カスタム投稿の一覧を表示する固定ページを作る代わりに、カスタム投稿のアーカイブページを作るのでもよいのではないでしょうか。
トピック投稿者
fjsk
(@fjsk)
> gblsm さま
ご返信有難うございます。
スミマセン、現段階の情報が足りなかったですね!
現在の状況は、A店のカスタム投稿タイプのカスタムフィールドで制作した情報はA店として表示させることまでは行っています。
それをB店、C店、D店。。。の一部だけ(店舗名、住所、電話番号のみ)を固定ページにて一覧表示させるところが、どうやって引っ張ってくれば良いのかが分からずポストさせて頂きました。
とりあえず、固定ページよりも簡単な、カスタム投稿タイプのアーカイブページを利用してみてはどうですか?
パーマリンク設定で例えば「投稿名」を選んでおくと(「デフォルト」ではないものにします)
wordpressサイト名/カスタム投稿タイプ名 ( 例えば wordpress/shop )
というURLで、そのカスタム投稿タイプのアーカイブを表示できます。その時、テーマのテンプレートファイル archive.php が使われます。
しかし archive-カスタム投稿タイプ名.php があれば優先して使われるので、archive.php をコピーして archive-shop.php を作り、その中でカスタムフィールドを表示させればよいと思います。
トピック投稿者
fjsk
(@fjsk)
> gblsm さま
ご返信遅くなりまして申し訳ありません。
固定ページで展開したいのは、既に固定ページでショップ情報ページがあり
(ホーム > 取扱い店舗 > ショップ > ショップ情報)
現在は固定ページに本店しか記載されていませんが、本店はそう変わらないですが、取扱いショップはある期間が経つと変わる可能性があるのでカスタム投稿タイプで作って、本店の下に一覧として自動的に引っ張ってきたいと思っているのですが、固定ページにカスタム投稿タイプの任意のカスタムフィールドを引っ張ってくるのは、archiveでまとめるよりも、やはり難易度が高いのですね?
カスタムフィールドを引っ張ってくる難易度は、固定ページの場合でもアーカイブの場合でも、それほど変わりません。差が出るのは、固定ページだと自分で get_posts 等を使ってクエリを一から書くのに対して、アーカイブだとクエリはWordPress本体が面倒を見てくれるのでテンプレート側に書くPHPコードが少なくて済むという点です。そういう訳で、固定ページを使うなら次のようにします。
- カスタム投稿を検索するためのクエリを用意する
- WP_Query または get_posts で、1.のクエリを実行する
- 2.の結果に対してループを回す
- ループを一度回るたびに、一つのカスタム投稿を表示する。その時、そのカスタム投稿に付けられたカスタムフィールドを引っ張ってきて一緒に表示する。
全体の組み立ては下記のWebページが参考になります。
それから「カスタム投稿に付けられたカスタムフィールドを引っ張ってくる」のは、fjskさんの「A店のカスタム投稿タイプのカスタムフィールドで制作した情報はA店として表示させる」方法が応用できるのではないかと思います。
トピック投稿者
fjsk
(@fjsk)
> gblsm さま
素早いご返信、誠に感謝しております!
なるほどですね、たしかにアーカイブテンプレートを作成するだけでは固定ページには実装出来ないので、その点、カスタム投稿タイプのアーカイブ機能は大変楽ですね!
頂いたリンクはかなりヒントになりまして、参考にして希望の情報を表示させることが出来ましたが、こんな感じで良いですかね?
// 情報取得
$args = array(
'post_type' => 'shop_list',
);
$myposts = get_posts($args);
foreach ( $myposts as $post ) :
setup_postdata( $post );
// 取得するカスタムポスト
echo get_post_meta($post->ID, '店舗名', true);
echo get_post_meta($post->ID, '住所', true);
echo get_post_meta($post->ID, '電話番号', true);
// 終わったらリセット
endforeach;
wp_reset_postdata();