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

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

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

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

PHP

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

Q&A

解決済

1回答

450閲覧

カスタム投稿の内容をページとして表示させたい

numakichi

総合スコア11

WordPress

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

PHP

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

0グッド

0クリップ

投稿2022/07/13 08:31

前提

functions.phpに『よくある質問(FAQ)』というカスタム投稿を追加し、Custom Field Templateで『質問』と『回答』を入力するカスタムフィールドを作成しました。

カスタム投稿の各タイトル(計3つ)ごとに『よくある質問(FAQ)』を表示させたく、
カスタム投稿をコンテンツとしてページに表示するやり方が分からず、苦戦しています。

記事を調べたところ、以下の記事を参考に『single-{スラッグ名}.php』で値を表示させるところまではできました。

↓『質問』と『回答』をグループ化し、自由に追加・削除するやり方
https://kacco-e.com/blog/406

↓同一の項目に配列で入った値を出力させるやり方
http://doshiroutonike.com/web/wordpress/wp-plugin/1666

WordPress管理画面(カスタムフィールドテンプレート)
イメージ説明
WordPress管理画面(カスタム投稿-タイトル3つ分)
イメージ説明
WordPress管理画面(カスタム投稿-『よくある質問』)
イメージ説明

実現したいこと

カスタム投稿の各タイトル(計3つ)ごとに『よくある質問(FAQ)』をページへ表示させたいです。
お力添えいただければ幸いです。

該当のソースコード

functions.php

1// 2022/07/11 カスタム投稿「よくある質問」の追加 2function custom_post_type_FAQ(){ 3 $labels = array( 4 'name' => _x('よくある質問', 'post type general name'), 5 'singular_name' => _x('よくある質問', 'post type singular name'), 6 'add_new' => _x('よくある質問を追加', 'book'), 7 'add_new_item' => __('新しいよくある質問を追加'), 8 'edit_item' => __('よくある質問を編集'), 9 'new_item' => __('新しいよくある質問'), 10 'view_item' => __('よくある質問を編集'), 11 'search_items' => __('よくある質問を探す'), 12 'not_found' => __('現在、よくある質問はありません'), 13 'not_found_in_trash' => __('ゴミ箱によくある質問はありません'), 14 'parent_item_colon' => '' 15 ); 16 $args = array( 17 'labels' => $labels, 18 'public' => true, 19 'publicly_queryable' => true, 20 'show_ui' => true, 21 'query_var' => true, 22 'rewrite' => true, 23 'capability_type' => 'post', 24 'has_archive' => true, 25 'hierarchical' => true, 26 'menu_position' => 4, 27 'supports' => array('title','excerpt','custom fields'), 28 ); 29 register_post_type('faq',$args); 30 } 31 add_action('init', 'custom_post_type_FAQ'); 32 33// 2022/07/11 カスタム投稿「よくある質問」の追加end

single

1<!-- FAQのカスタム投稿を表示するコード --> 2<?php 3// カスタムフィールドの値を取得 4$FAQfield = post_custom('FAQfield'); 5$FAQQuestion = post_custom('FAQQuestion'); 6$FAQAnswer = post_custom('FAQAnswer'); 7?> 8 9<?php if ( !empty( $FAQfield ) ): ?> 10<div class="faq-box"> 11 <?php if( $FAQfield == 1 ){ 12 echo '<ul>'; 13 echo '<li>'.$FAQQuestion.'</li>'; 14 echo '<li>'.$FAQAnswer.'</li>'; 15 echo '</ul>'; 16 }else{ 17 for( $i = 0; $i < $FAQfield; $i++ ){ 18 echo '<ul>'; 19 echo '<li>'.$FAQQuestion[$i].'</li>'; 20 echo '<li>'.$FAQAnswer[$i].'</li>'; 21 if( $i < $FAQfield -1 ){ echo '</ul>'; } 22 } 23 } ?> 24</div> 25<?php endif; ?> 26<!-- FAQのカスタム投稿を表示するコードend -->

試したこと

page.phpやsingle.phpのいずれかに以下のように記述しても表示されませんでした。

page.php,single.php

1if( get_post_type() === 'faq' ){ 2 3 get_template_part( 'single', 'faq' ); 4 5 }

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

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

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

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

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

guest

回答1

0

自己解決

WordPressのテンプレート階層で混乱していたため、実現できていませんでした。
single-{スラッグ名}.phpをつくり、その中へ以下を記述まではOK。

single‐faq.php

1<!-- FAQのカスタム投稿を表示するコード --> 2<?php 3// カスタムフィールドの値を取得 4$FAQfield = post_custom('FAQfield'); 5$FAQQuestion = post_custom('FAQQuestion'); 6$FAQAnswer = post_custom('FAQAnswer'); 7?> 8<?php if ( !empty( $FAQfield ) ): ?> 9 <div class="faq-box"> 10 <?php if( $FAQfield == 1 ){ 11 echo '<ul>'; 12 echo '<li>'.$FAQQuestion.'</li>'; 13 echo '<li>'.$FAQAnswer.'</li>'; 14 echo '</ul>'; 15 }else{ 16 for( $i = 0; $i < $FAQfield; $i++ ){ 17 echo '<ul>'; 18 echo '<li>'.$FAQQuestion[$i].'</li>'; 19 echo '<li>'.$FAQAnswer[$i].'</li>'; 20 if( $i < $FAQfield -1 ){ echo '</ul>'; } 21 } 22 } ?> 23 </div> 24<?php endif; ?> 25<!-- FAQのカスタム投稿を表示するコードend -->

カスタム投稿で投稿されたものを以下のように、archive-{スラッグ名}.phpで呼び出す

archive‐faq.php

1<?php 2 $args = [ 3 'post_type' => 'faq', // カスタム投稿名が「faq」の場合 4 'posts_per_page' => 100, // 表示する数 5 ]; 6 $my_query = new WP_Query($args); ?> 7 8<?php if ($my_query->have_posts()): // 投稿がある場合 ?> 9 10 <div class="faq-box-content"> 11 12 <?php while ($my_query->have_posts()) : $my_query->the_post(); ?> 13 14 <!-- ▽ ループ開始 ▽ --> 15 16 <h3><?php the_title(); ?></h3> 17 <!-- FAQのカスタム投稿を表示するコード --> 18 <?php 19 // カスタムフィールドの値を取得 20 $FAQfield = post_custom('FAQfield'); 21 $FAQQuestion = post_custom('FAQQuestion'); 22 $FAQAnswer = post_custom('FAQAnswer'); 23 ?> 24 <?php if ( !empty( $FAQfield ) ): ?> 25 <div class="faq-box"> 26 <?php if( $FAQfield == 1 ){ 27 echo '<ul>'; 28 echo '<li>'.$FAQQuestion.'</li>'; 29 echo '<li>'.$FAQAnswer.'</li>'; 30 echo '</ul>'; 31 }else{ 32 for( $i = 0; $i < $FAQfield; $i++ ){ 33 echo '<ul>'; 34 echo '<li>'.$FAQQuestion[$i].'</li>'; 35 echo '<li>'.$FAQAnswer[$i].'</li>'; 36 if( $i < $FAQfield -1 ){ echo '</ul>'; } 37 } 38 } ?> 39 </div> 40 <?php endif; ?> 41 <!-- FAQのカスタム投稿を表示するコードend --> 42 43 <!-- △ ループ終了 △ --> 44 45 <?php endwhile; ?> 46 47 </div> 48 49<?php else: // 投稿がない場合?> 50 51 <p>まだ投稿がありません。</p> 52 53<?php endif; wp_reset_postdata(); ?>

あとはページとして表示するために、get_header、get_footerなど呼び出したり、CSSで見た目調整したりします。

投稿2022/07/14 01:41

numakichi

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問