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

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

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

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

Q&A

解決済

1回答

1057閲覧

Wordpress カスタム投稿タイプの詳細ページにカスタム分類で絞った関連記事を表示させたい

yesma

総合スコア16

WordPress

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

0グッド

0クリップ

投稿2020/03/10 09:46

前提・実現したいこと

Wordpressのテーマ作成をしております。
カスタム投稿の詳細ページにてカスタム分類で絞った関連記事を表示させたい

ここに質問の内容を詳しく書いてください。
functions.phpにてカスタム投稿とカスタム分類を追加するコードを記載しています。
記事詳細ページsingle-sale.phpには関連記事を詳細をコードを記載しています。

PHP 7.3.5
MySQL 8.0.16
WordPress Version 5.3.2

発生している問題・エラーメッセージ

関連記事は表示されますが、カスタム分類で作ったカテゴリーのみを関連記事に表示することができない

該当のソースコード

functions.php <?php function sale_excerpt_length(){ return 80; } add_filter('excerpt_mblength','sale_excerpt_length'); //商品の追加 function hamaen_sale_create_post_type(){ register_post_type('sale', array( 'labels' => array( 'name' => '商品一覧', 'singular_name' => '商品', ), 'public' => true, 'menu_position' => 5, 'has_archive' => true, 'hierarchical' => true, 'taxonomies' => array('type'), 'supports' => array( 'title', 'editor', 'excerpt', 'thumbnail', 'custom-fields', ), ) ); } add_action('init', 'hamaen_sale_create_post_type', 1); //商品ーカテゴリの追加 function hamaen_sale_create_taxonomies(){ $labels = array( 'name' => '商品の分類', 'singular_name' => '商品の分類', ); register_taxonomy('type',array('sale'), array( 'hierarchical' => true, 'labels' => $labels, 'show_ui' => true, 'show_admin_column' => true, 'show_in_nav_menus' => true, ) ); } add_action('init', 'hamaen_sale_create_taxonomies', 0);
archive-sale.php <?php get_header(); ?> <section class="page_title"> <div class="breadcrumb"> <a href="<?php echo home_url(); ?>">HOME</a> <a href="<?php echo home_url('/sale'); ?>"><?php wp_title(''); ?></a> </div> <img src="<?php echo get_template_directory_uri(); ?>/images/company/shio.svg" alt="塩"> <h2 class=""><?php wp_title(''); ?></h2> </section> <main> <section class="sale_list"> <h3>日本各地から海外まで<br>様々な「塩」を取り扱いしております</h3> <h4><img src="<?php echo get_template_directory_uri(); ?>/images/sale/h4_img1.svg" alt="カテゴリー"></h4> <ul class="category"> </ul> <h4><img src="<?php echo get_template_directory_uri(); ?>/images/sale/h4_img2.svg" alt="商品一覧"></h4> <div class="flex"> <?php if (have_posts()) : while (have_posts()) : the_post(); ?> <a href="<?php the_permalink(); ?>" class="card"> <?php if(has_post_thumbnail()): the_post_thumbnail(); else: ?> <img src="<?php echo get_template_directory_uri(); ?>/images/home/no-image.png" alt="" /> <?php endif; ?> <h5><?php the_title(); ?></h5> <p><span class="weight">300g</span>144<span class="value">円(税抜き)</span></p> <?php the_excerpt(); ?> </a> <?php endwhile; ?> </div> <ul class="pagination"> <?php global $wp_query; $big = 999999999; // need an unlikely integer echo paginate_links( array( 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), 'format' => '?paged=%#%', 'current' => max( 1, get_query_var('paged') ), 'total' => $wp_query->max_num_pages, 'prev_next' => true, 'prev_text' => __('Previous'), 'next_text' => __('Next') ) ); ?> </ul> <?php else: ?> <!--投稿が見つからない--> <p>申し訳ございません。ただいま準備中です。</p> <!--//投稿が見つからない--> <?php endif; ?> </section> </main> <!-- フッター --> <?php get_footer('common'); ?>
single-sale.php <?php get_header(); ?> <section class="page_title"> <div class="breadcrumb"> <a href="<?php echo home_url(); ?>">HOME</a> <a href="<?php echo home_url('/sale'); ?>"><?php wp_title(''); ?></a> </div> <img src="<?php echo get_template_directory_uri(); ?>/images/company/shio.svg" alt="塩"> <h2 class=""><?php wp_title(''); ?></h2> </section> <main> <?php if ( have_posts() ) : ?> <section class="single_info"> <?php while ( have_posts() ) : the_post(); ?> <!--ループ--> <h3><?php $terms = get_the_terms( $post->ID, 'type'); if (! is_wp_error($terms) && $terms) : foreach ( $terms as $term) : ?> <span class="<?php echo esc_attr( $term->slug ); ?>"><?php echo esc_html($term->name); ?></span><?php the_title(); ?></h3> <?php endforeach; endif; ?> <ul class="single-item"> <li><?php the_post_thumbnail('thumbnail'); ?></li> <li><img src="<?php echo get_template_directory_uri(); ?>/images/single/item2.jpg" alt="item1"></li> </ul> <?php $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'full' ); ?> <style> #slick-slide-control00::before { content:" "; width: 90px; height:90px; background:url(<?php echo $image[0]; ?>) no-repeat center center; background-size:cover; } #slick-slide-control01::before { content:" "; width: 90px; height:90px; background:url(../images/single/item2.jpg) no-repeat center center; background-size:cover; } .slick-dots li.slick-active button:before{ } </style> <p class="single_text"><?php $content_string = get_the_content(); $content_string = str_replace('<p','<p class="classname" ',$content_string); echo $content_string; ?> </p> <div class="single_list"> <p>下記の内容量から取り扱いしております。</p> <div class="flex"> <dl> <dt>容量</dt> <dd>金額</dd> </dl> <dl> <dt>100g</dt> <dd>100円</dd> </dl> <dl> <dt>300g</dt> <dd>200円</dd> </dl> <dl> <dt>1Kg</dt> <dd>1000円</dd> </dl> <dl> <dt>3Kg</dt> <dd>3000円</dd> </dl> </div> </div> <h4>商品情報</h4> <div class="single_value"> <dl> <dt>カテゴリ</dt> <dd>日本の塩 - (財)塩事業センターの塩</dd> </dl> <dl> <dt>用途</dt> <dd>家庭・業務用</dd> </dl> <dl> <dt>商品番号</dt> <dd>P150902-001</dd> </dl> <dl> <dt>原材料名</dt> <dd>メキシコ産天日塩炭酸Mg</dd> </dl> <dl> <dt>内容量</dt> <dd>300g×20</dd> </dl> <dl> <dt>備考</dt> <dd>製造元:公益財団法人塩事業センター</dd> </dl> </div> <!--//ループ--> <?php endwhile; ?> <?php else: ?> <!--投稿が見つからない--> <p>申し訳ございません。ただいま準備中です。</p> <!--//投稿が見つからない--> <?php endif; ?> </section> <section class="sale_list"> <h5><img src="<?php echo get_template_directory_uri(); ?>/images/single/h3_img.svg" alt="関連商品"></h5> <div class="flex"> <?php global $post; $args = array( 'numberposts' => 3, //8件表示(デフォルトは3件) 'post_type' => 'sale', //カスタム投稿タイプ名 'taxonomy' => 'type', //タクソノミー名 'orderby' => 'rand', //ランダム表示 'post__not_in' => array($post->ID) //表示中の記事を除外 ); ?> <?php $myPosts = get_posts($args); if($myPosts) : ?> <?php foreach($myPosts as $post) : setup_postdata($post); ?> <a href="<?php the_permalink(); ?>" class="card"> <?php if(has_post_thumbnail()): the_post_thumbnail(); else: ?> <img src="<?php echo get_template_directory_uri(); ?>/images/home/no-image.png" alt="" /> <?php endif; ?> <h5><?php the_title(); ?></h5> <p><span class="weight">300g</span>144<span class="value">円(税抜き)</span></p> <?php the_excerpt(); ?> </a> <?php endforeach; ?> <?php else : ?> <p>関連アイテムはまだありません。</p> <?php endif; wp_reset_postdata(); ?> </div> </section> </main> <!-- フッター --> <?php get_footer('common'); ?>

たりない情報等がございましたら教えてください。
お願いいたします。

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

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

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

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

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

rjunakc

2020/03/10 09:58

カスタム分類の一覧を表示したいのか、現在の情報が保持しているカスタム分類の同類の商品を表示したいのか、どちらでしょうか?
yesma

2020/03/10 09:59

ありがとうございます。 後者のカスタム分類の同類の商品を表示させたいです。
kei344

2020/03/11 12:09

まだ質問が「受付中」になっていますが、「ベストアンサー」を選び「解決済」にされてはいかがでしょうか。
yesma

2020/03/12 01:03

失礼しました。 対応致します。
guest

回答1

0

ベストアンサー

関連記事と同じ形式で書きます。
ちなみに、検証していませんのでエラーが発生したらすみません。

※重量や価格が決め打ちになっていますが、適宜取得して下さい。

<section class="sale_list"> <h5><img src="<?php echo get_template_directory_uri(); ?>/images/single/h3_img.svg" alt="関連商品"></h5> <div class="flex"> <?php global $post; $args = array( 'posts_per_page' => 3, 'post_type' => 'sale', 'taxonomy' => 'type', 'orderby' => 'rand', 'post__not_in' => array($post->ID) ); // 現在の投稿のタクソノミーを条件に追加 $terms = get_the_terms( $post->ID, 'type'); if (! is_wp_error($terms) && $terms){ foreach ( $terms as $term) { $args['tax_query'][] = array( 'taxonomy' => 'type', 'field' => 'slug', 'terms' => $term->slug ); } } // タクソノミーが複数選択されているとして、すべてのタクソノミーが一致する場合 // (※複数のうち、最低1個が含まれればよい場合はAND $args['tax_query']['relation'] = 'AND'; $the_query = new WP_Query( $args ); if($the_query->have_posts()) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?> <a href="<?php the_permalink(); ?>" class="card"> <?php if(has_post_thumbnail()): the_post_thumbnail(); else: ?> <img src="<?php echo get_template_directory_uri(); ?>/images/home/no-image.png" alt="" /> <?php endif; ?> <h5><?php the_title(); ?></h5> <p><span class="weight">300g</span>144<span class="value">円(税抜き)</span></p> <?php the_excerpt(); ?> </a> <?php endwhile; ?> <?php else : ?> <p>関連アイテムはまだありません。</p> <?php endif; wp_reset_postdata(); ?> </div> </section>

投稿2020/03/10 10:15

編集2020/03/10 10:33
rjunakc

総合スコア368

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

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

rjunakc

2020/03/10 10:19

ごめんなさい。 WP_Queryに書き換えたのに「numberposts」を「posts_per_page」に変更していませんでした。
yesma

2020/03/10 13:31

ありがとうございます! こちらで確認してみます!!
yesma

2020/03/11 01:20

すみません。 「numberposts」を「posts_per_page」こちらの部分がわからなかったですが、 関連表示されるようになりました!! ありがとうございます。
yesma

2020/03/11 01:37

追記ですみません。 今回の知識不足を改善したいのですが、こちらはPHPを学習すればよいでしょうか? お時間がありましたら、ご確認お願い致します。
rjunakc

2020/03/11 03:40

WordPressをカスタマイズするのであれば、PHPの基礎は最低限必要ですが、それよりもWordPressでどのような関数やクラスがあって、それをどのように使えば自分の行いたいことができるかを理解するために、WordPress Codexを参照されることを推奨します。 条件分岐やテンプレート階層などは必須です。 あと、投稿を抽出する場合はたいてい今回使った「WP Query」で事足ります。 https://wpdocs.osdn.jp/Main_Page あとはググればどの関数を使えば問題を解決できるかだいたい出てきます。
yesma

2020/03/12 01:07

ご回答ありがとうございます。 こちら読み込んでみます。 ベストアンサーとさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問