【Wordpress】通常投稿に親子関係を持たせた上で、更に指定のカテゴリの一覧ページに親+子ワンセットで表示させていきたい。
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 1,280
Wordpressで飲食店のポータルサイトを作成しています。
各大元の店の紹介ページを通常の投稿機能で行い
下記内容をfunctions.phpに記載を行い
function registered_post_hierarchical( $post_type, $post_type_object ) {
if ( $post_type == 'post' ) {
$post_type_object->hierarchical = true;
add_post_type_support( 'post', 'page-attributes' );
}
}
add_action( 'registered_post_type', 'registered_post_hierarchical', 10, 2 );
△△店や◇◇店と言った風に更にその各店舗を子ページとして投稿できるようにしてはおりますが
固定ページで作成している一覧ページに特定のカテゴリのみを表示し、
各親ページの下に子ページを表示させる方法が見つからず苦戦しております。
イメージと致しましては
■ストア1(親ページ)
├─△△店(子ページ)
├─◇◇店(子ページ)
└─☆☆店(子ページ)
■ストア2(親ページ)
├─▲▲店(子ページ)
├─◆◆店(子ページ)
└─★★店(子ページ)
という風に親ページとその子ページをワンセットで表示させていけるようにしたいと思っております。
※小ページ部分にはアイキャッチとAdvanced Custom Fieldsで追加した項目を表示させるようにする予定です。
<?php
$arg = array(
'posts_per_page' => -1,
'orderby' => 'date',
'order' => 'DESC',
'category_name' => 'tokyo' // 仮で東京と言うカテゴリに設定してある投稿のみ表示させております。
);
$posts = get_posts( $arg );
if( $posts ): ?>
<?php
foreach ( $posts as $post ) :
setup_postdata( $post ); ?>
<li>
<a href="<?php the_permalink(); ?>">
<?php if ( has_post_thumbnail() ): ?>
<?php the_post_thumbnail( 'thumbnail' ); // 親ページのアイキャッチ ?>
<?php else: ?>
<img src="<?php echo get_stylesheet_directory_uri(); ?>/images/no-img.png" alt="no image" title="no image" width="100" height="100" />
<?php endif; ?>
</a>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<dl class="shop">
<!-- ↓↓ここに親ページに含まれている子ページを一覧で出して行きたい -->
<dt>
<a href="<?php the_permalink(); ?>">
<?php if ( has_post_thumbnail() ): ?>
<?php the_post_thumbnail( 'thumbnail' ); // 子ページのアイキャッチ ?>
<?php else: ?>
<img src="<?php echo get_stylesheet_directory_uri(); ?>/images/no-img.png" alt="no image" title="no image" width="100" height="100" />
<?php endif; ?>
</a>
子ページの店舗名
</dt>
<dd><?php the_field('shop_address'); // Advanced Custom Fieldsで追加した項目 ?></dd>
<dd><?php the_field('shop_tell'); // Advanced Custom Fieldsで追加した項目 ?></dd>
<dd><?php the_field('shop_open'); // Advanced Custom Fieldsで追加した項目 ?></dd>
</dl>
<?php endforeach; ?>
<?php
endif;
wp_reset_postdata();
?>
上記は謝っている記述である事は承知の上ですが、
やりたい事をお伝えさせて頂くご説明用として解釈して頂ければ幸いです。
上記内において
<!-- ↓↓ここに親ページに含まれる子ページを一覧で出して行きたい -->
の下からの方法が見つからない状態で御座います。
ご説明が上手く伝わっているか不安な所では御座いますが、伝わらないようでしたら、お申し出ください。
ぜひ、お知恵をお貸し頂ければ幸いです。
どうぞ宜しくお願い致します。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
wp_list_filter 関数で親ページ、子ページをそれぞれ取得すれば可能だと思います。
<?php
$args = array(
'orderby' => 'date',
'order' => 'DESC',
'category_name' => 'tokyo',
'posts_per_page' => -1,
);
$stores = get_posts( $args );
if ( $stores ) {
$parents = wp_list_filter( $stores, array( 'post_parent' => 0 ) );
foreach( $parents as $parent ) {
setup_postdata( $GLOBALS['post'] =& $parent );
?>
<!-- ここで親ページの情報を出力する. -->
<?php
$children = wp_list_filter( $stores, array( 'post_parent' => get_the_ID() ) );
foreach ( $children as $child ) {
setup_postdata( $GLOBALS['post'] =& $child );
?>
<!-- ここで子ページの情報を出力する. -->
<?php
}
}
}
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.34%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2019/07/08 14:37
検証や調整にお時間掛かり、ご返信遅れて申し訳ございません。
まず頂きました内容の
// ここで親ページの情報を出力する.
// ここで子ページの情報を出力する.
の下部にそれぞれ、吐き出す情報を各々記載し
表示テストを行ってみたいのですが、エラーとなってしまいました…。
記述の部分でも
Wordpressのテーマエディタ内にて
// ここで親ページの情報を出力する.
の部分に親ページの出力情報を記載すると
$children = wp_list_filter( $stores, array( 'post_parent' => get_the_ID() ) );
の部分の色が変わってしまい、以降がエラーとなってしまいました。
※親ページの情報もエラーになってしまっております。
諸々、調整なども試みてみましたが
<?php the_title(); ?>や<?php the_post_thumbnail( 'thumbnail' ); // 親ページのアイキャッチ ?>だけではなく
<span>テスト</span>と言った記述でもエラーとなってしまいます。
記載していきたい内容は
<a href="<?php the_permalink(); ?>">や
<?php if ( has_post_thumbnail() ): ?>
<?php the_post_thumbnail( 'thumbnail' ); ?>
<?php else: ?>
<img src="<?php echo get_stylesheet_directory_uri(); ?>/images/no-img.png" alt="no image" title="no image" width="100" height="100" />
<?php endif; ?>
などと言った記述の他にAdvanced Custom Fieldsで追加した項目などなのですが、
上記を表示させる方法をご教授頂いても宜しいでしょうか?
大変、お手数お掛けし誠に恐れ入りますが、宜しくお願い申し上げます。
2019/07/08 14:50
2019/07/08 15:24
ご回答頂きありがとうございます。
>回答に記載したコメント部分に the_title(); とだけ書いてもエラーになりますか?
こちらですが、言葉足らずで申し訳ございません。
the_title();やthe_post_thumbnail( 'thumbnail' );と言ったのみの記載ですと反映はしているのですが
<a href="<?php the_permalink(); ?>">
<?php if ( has_post_thumbnail() ): ?>
<?php the_post_thumbnail( 'thumbnail' ); ?>
<?php else: ?>
<img src="<?php echo get_stylesheet_directory_uri(); ?>/images/no-img.png" alt="no image" title="no image" width="100" height="100" />
<?php endif; ?>
</a>
のような、記述ですとエラーになってしまうと言う意味合いになります。
いわゆる、htmlとの複合記述が反映しないと言う形になるかと存じますが
そちらを行うとエラーになってしまう為、良い方法御座いましたらご教授頂ければ幸いで御座います。
2019/07/08 15:43
2019/07/08 16:22
>回答のコードには終了タグと開始タグを追記しましたので合わせてご確認ください。
ご教授頂きありがとうございます。
調整時にそちらの方法を行っていましたが、
最後4段目に記述して頂いた<?phpの記述が抜けており
そちらが原因のようでした。
無事反映の方、確認致しました。
この度は、ご回答頂きありがとうございました。