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

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

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

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

PHP

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

Q&A

解決済

1回答

618閲覧

同じタームを持つ前後の投稿にリンクしたい

inbloom0710

総合スコア3

WordPress

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

PHP

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

0グッド

0クリップ

投稿2024/01/20 11:34

実現したいこと

  • カスタム投稿の投稿ページ下部にナビゲーションを表示したい
  • ナビゲーションには同じタームを持つ前後の投稿のリンクを設置したい
  • 各投稿にはタームを1つだけ設定している。それを取得し、対応するタームのリンクを生成したい

解決方法分かる方がいましたらご教示お願いいたします。

発生している問題・分からないこと

$prev_post = get_previous_post(true, '', $term->slug);
$next_post = get_next_post(true, '', $term->slug);
上記のslugが読み取れておらず、aタグが表示されない

エラーメッセージ

error

1Attempt to read property "slug" on array in

該当のソースコード

php

1 <div class="nav"> 2 <?php 3 $term = get_the_terms($post->ID, 'taxname'); 4 $prev_post = get_previous_post(true, '', $term[0]->slug); 5 $next_post = get_next_post(true, '', $term[0]->slug); 6 ?> 7 <div class="prev"> 8 <?php if($prev_post): ?> 9 <a href="<?php echo get_permalink($prev_post->ID); ?>" class="link_b"> 10 <img src="ディレクトリ" alt="矢印"> 11 前の投稿へ 12 </a> 13 <?php endif; ?> 14 </div> 15 <div class="next"> 16 <?php if($next_post): ?> 17 <a href="<?php echo get_permalink($next_post->ID); ?>" class="link"> 18 次の投稿へ 19 <img src="ディレクトリ" alt="矢印"> 20 </a> 21 <?php endif; ?> 22 </div> 23 </div>

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

コードを書きの通りに変更したが、いずれもエラーメッセージが表示されてしまう

◆ケース1 $termの配列順を指定した
$term = get_the_terms($post->ID, 'taxname');
$prev_post = get_previous_post(true, '', $term[0]->slug);
$next_post = get_next_post(true, '', $term[0]->slug);

◆ケース2 foreachで取得した情報を分割した
$terms = get_the_terms($post->ID, 'taxname');
foreach ($terms as $term) :
$prev_post = get_previous_post(true, '', $term->slug);
$next_post = get_next_post(true, '', $term->slug);
endforeach;

補足

特になし

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

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

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

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

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

inbloom0710

2024/01/21 09:34

中身が空になっているようです。 記載したコードは下記の通りで、 <div class="nav"> <?php global $post; $post_id = $post->ID; var_dump("テスト:".$post_id."~!"); ?> <?php $term = get_term($post_id, 'cat'); var_dump("テスト:".$term."~!"); $prev_post = get_previous_post(true, '', $term->slug); $next_post = get_next_post(true, '', $term->slug); ?> <div class="prev"> <?php if($prev_post): ?> <a href="<?php echo get_permalink($prev_post->ID); ?>" class="link-back"> <img src="assets/images~" alt="矢印"> 前の投稿へ </a> <?php endif; ?> </div> <div class="next"> <?php if($next_post): ?> <a href="<?php echo get_permalink($next_post->ID); ?>" class="link"> 次の投稿へ <img src="assets/images~" alt="矢印"> </a> <?php endif; ?> </div> </div> var_dumpの結果はこのように出力されています。 string(21) "テスト:159~!" string(18) "テスト:~!" カテゴリにチェックが入っていないのかな?と思い投稿の編集画面を改めて確認しましたが、タームは設定されていました。
inbloom0710

2024/01/21 12:39

$term = get_the_terms($post_id, 'cat'); $slug = $term[0]->slug; $prev_post = get_previous_post(true, '', $slug); $next_post = get_next_post(true, '', $slug); var_dump($prev_post); 現状こうなっています。 get_the_terms()に変更したところ情報が取得でき、$slugにタームの情報を格納する所までは上手くいきました。 var_dump($prev_post); がNULLになっています。
inbloom0710

2024/01/22 08:20

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <?php $prev_post = get_previous_post(true, '', 'cat'); $next_post = get_next_post(true, '', 'cat'); ?> <div class="prev"> <?php if(!empty($prev_post)): ?> <a href="<?php echo get_permalink($prev_post->ID); ?>" class="link-back"> <img src="<?php echo get_template_directory_uri()?>/assets/images/common/arrow16px.png" alt="矢印"> <p>前の投稿へ</p> </a> <?php endif; ?> </div> <div class="next"> <?php if(!empty($next_post)): ?> <a href="<?php echo get_permalink($next_post->ID); ?>" class="link"> <p>次の投稿へ</p> <img src="<?php echo get_template_directory_uri()?>/assets/images/common/arrow16px.png" alt="矢印"> </a> <?php endif; ?> </div> <?php endwhile; endif; ?> get_previous_post()とget_next_post()の第三引数にタームを入れているのが不具合の原因でした。 カスタム投稿の場合、第三引数には「タクソノミー名」を入れる必要があるとのことでした。 お時間いただき見て下さった方、大変ありがとうございました。
guest

回答1

0

自己解決

解決しました

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php $prev_post = get_previous_post(true, '', 'cat'); $next_post = get_next_post(true, '', 'cat'); ?> <div class="prev"> <?php if(!empty($prev_post)): ?> <a href="<?php echo get_permalink($prev_post->ID); ?>" class="link-back"> <img src="~" alt="矢印"> <p>前の話へ</p> </a> <?php endif; ?> </div> <div class="next"> <?php if(!empty($next_post)): ?> <a href="<?php echo get_permalink($next_post->ID); ?>" class="link"> <p>次の投稿へ</p> <img src="~" alt="矢印"> </a> <?php endif; ?> </div> <?php endwhile; endif; ?>

get_previous_post()とget_next_post()の第三引数に「ターム名」を入れているのが不具合の原因でした。
カスタム投稿の場合、第三引数には「タクソノミー名」を入れる必要があるとのことでした。

お時間いただき見て下さった方、大変ありがとうございました。

投稿2024/01/22 14:03

inbloom0710

総合スコア3

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問