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

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

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

特殊な記法により文書に埋め込む形で記述される付加情報をタグと呼びます。文書構造や書式、文字飾りなどを指示したり、画像や他の文書へのリンクを埋め込むことができる。

WordPress

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

PHP

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

613閲覧

Wordpressのカスタム投稿で作成された記事詳細に、関連するタグの記事一覧を表示したい

spbob

総合スコア9

タグ

特殊な記法により文書に埋め込む形で記述される付加情報をタグと呼びます。文書構造や書式、文字飾りなどを指示したり、画像や他の文書へのリンクを埋め込むことができる。

WordPress

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

PHP

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/05/26 12:38

編集2020/05/27 05:43

Wordpressのカスタム投稿機能を使って、エリアごとの記事ページを作成しています。

例えば、北海道、関東、東北といった記事詳細にはそれぞれエリアごとのタグが設定されており、
そのエリアに関連する記事を画像・タイトルとともにサイドナビに一覧で表示したいと考えています。

※タグには、エリアの他に「価格(例:10,000円、30,000円)」、「ジャンル(例:和食、洋食)」といったタグも設定しています。

以下の通り、wp_get_object_terms関数を使って、タクソノミー情報を取得し、一覧表示しようとしましたが、特定のタームを絞り込むことができず、表示することができませんでした。

分かる方いらっしゃいましたら、教えていただけますと幸いです。
どうぞよろしくおねがいします。

php

1<?php 2 $taxonomy_slug = 'areatag'; 3 $post_type_slug = 'area'; 4 // ターム情報を取得 5 $post_terms = wp_get_object_terms($post->ID, $taxonomy_slug); 6 if( $post_terms && !is_wp_error($post_terms)) { 7 $terms_slug = array(); 8 foreach( $post_terms as $value ){ 9 $terms_slug[] = $value->slug; 10 } 11 } 12 $args = array( 13 'post_type' => $post_type_slug, 14 'posts_per_page' => 5, 15 'post__not_in' => array($post->ID), // 現在の投稿を除外 16 'tax_query' => array( 17 array( 18 'taxonomy' => $taxonomy_slug, 19 'field' => 'slug', // スラッグに一致するタームを返す 20 'terms' => $terms_slug[2] // タームの配列を指定 21 ) 22 ) 23 ); 24 $the_query = new WP_Query($args); if($the_query->have_posts()): 25?> 26<!-- 同じエリアの記事 --> 27<div class="d-flex justify-content-between mb-2 mt-3 mt-md-0 bg-black pl-3 py-2"> 28 <p class="font-weight-bold mb-0 text-white">同じエリアの記事</p> 29 <p class="h8 mb-0 pr-4 pt-1"> 30 <?php $terms = get_the_terms( $post->ID, $taxonomy_slug); ?> 31 <?php foreach( $post_terms as $term ): ?> 32 <a href="<?php echo get_term_link( $term->term_id, $taxonomy_slug ); ?>" class="text-white <?php echo $term->slug ?>"> 33 <?php echo 'もっと見る' ?> 34 </a> 35 <?php endforeach; ?> 36 </p> 37</div> 38<?php while ($the_query->have_posts()): $the_query->the_post(); ?> 39<div class="d-flex"> 40 <div class="w-30"> 41 <a href="<?php the_permalink(); ?>" class="d-block overflow-hidden img-cropped"> 42 <?php if ( get_field('メイン画像') ) : ?> 43 <?php echo wp_get_attachment_image( get_field('メイン画像'), 'thumbnail', false, array( 'class' => 'img-fluid' ) ); ?> 44 <?php else : ?> 45 <img src="/example.png" class="img-fluid" alt="No_image_available"> 46 <?php endif; ?> 47 </a> 48 </div> 49 <div class="w-70"> 50 <p class="h9 ml-2"><a href="<?php the_permalink(); ?>" class="text-body"><?php the_title(); ?></a></p> 51 </div> 52</div> 53<hr class="my-2" /> 54<?php endwhile; ?> 55<?php wp_reset_postdata(); ?> 56<?php endif; ?>

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

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

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

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

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

CHERRY

2020/05/29 04:32 編集

> 特定のタームを絞り込むことができず、表示することができませんでした。 「できませんでした」では、何が起きているのか状況が伝わらないので、わかりません。 「実行した結果で、なにが表示されたのか」を記載してください。 例: - 真っ白な画面になった - 〇〇というエラーメッセージが表示された - □□が表示された。 (□□ は〜〜なので違う) 等
spbob

2020/06/04 02:51

言葉足らずで大変申し訳ありません。 コンテンツ自体は表示されますが、サイドナビの一覧自体は表示されませんでした。
guest

回答1

0

自己解決

以下で解決することができました、スマートではないですが。。

  • foreachをなくす(ページが重くなるので)

- termのスラッグを特定の文字列を条件として絞り込み、抽出
- 配列のindexを振り直す(抽出した配列が、必ずしも同じ番号とは限らないと思い、再振りしてます)

php

1 2<?php 3 $post_type_slug = get_post_type($post->ID); 4 $taxonomy_slug = 'areatag'; 5 // ターム情報を取得 6 $post_terms = get_the_terms($post->ID, $taxonomy_slug); 7 // 値がある場合 8 if( $post_terms && !is_wp_error($post_terms)) { 9 $tm_slugs = array_column( $post_terms, 'slug' ); 10 $tm_slug = array_values(preg_grep('/^area/', $tm_slugs)); 11 } 12 $args = array( 13 'post_type' => $post_type_slug, 14 'posts_per_page' => 5, 15 'post__not_in' => array($post->ID), // 現在の投稿を除外 16 'tax_query' => array( 17 array( 18 'taxonomy' => $taxonomy_slug, 19 'field' => 'slug', // スラッグに一致するタームを返す 20 'terms' => $tm_slug // タームの配列を指定 21 ) 22 ) 23 ); 24$the_query = new WP_Query($args); if($the_query->have_posts()): 25$target_term_link = $tm_slug[0]; 26?> 27<!-- 同じエリアの記事 --> 28<div class="d-flex justify-content-between mb-2 mt-3 mt-md-0 bg-black pl-3 py-2"> 29 <p class="font-weight-bold mb-0 text-white">同じエリアの記事</p> 30<p class="h8 mb-0 pr-4 pt-1"> 31 <a href="/areatag/<?php echo $target_term_link ?>" class="text-white">もっと見る</a> 32</p> 33</div> 34<?php while ($the_query->have_posts()): $the_query->the_post(); ?> 35<div class="d-flex"> 36 <div class="w-30"> 37 <a href="<?php the_permalink(); ?>" class="d-block overflow-hidden img-cropped"> 38 <?php if ( get_field('メイン画像') ) : ?> 39 <?php echo wp_get_attachment_image( get_field('メイン画像'), 'thumbnail', false, array( 'class' => 'img-fluid' ) ); ?> 40 <?php else : ?> 41 <img src="/example.png" class="img-fluid" alt="No_image_available"> 42 <?php endif; ?> 43 </a> 44 </div> 45 <div class="w-70"> 46 <p class="h9 ml-2"><a href="<?php the_permalink(); ?>" class="text-body"><?php the_title(); ?></a></p> 47 </div> 48</div> 49<hr class="my-2" /> 50<?php endwhile; ?> 51<?php wp_reset_postdata(); ?> 52<?php endif; ?>

投稿2020/06/04 02:59

spbob

総合スコア9

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問