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

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

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

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

PHP

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

Q&A

解決済

wordpress(PHP8.0)でget_adjacent_postを使うと、次の記事がない場合エラーが表示される

senen-boy
semknb

総合スコア1

WordPress

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

PHP

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

1回答

0グッド

0クリップ

82閲覧

投稿2023/01/25 04:10

wordpress(PHP8.0)でget_adjacent_postを使うと、次の記事がない場合エラーが表示される

個別投稿タイプで各記事に、「前の記事へ」「次の記事へ」を表示する際get_adjacent_postを使ってプロパティを取得して表示しているのですが、
最新の記事(次の記事が無い場合)に、取得するプロパティがないためかエラーが出てしまいます。
PHP7.4だと大丈夫なのですが、PHP8.0だとエラーが出てしまいます。

対処法などあればご教授ください。

実現したいこと

PHP8.0でget_adjacent_postを使って最新の記事(次の記事が無い場合)を表示してる際に
エラーが出ないようにしたい。

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

Warning: Attempt to read property "ID" on string in /Users/XXXXXX/Local Sites/sumaho/app/public/wp-content/themes/sumaho/single.php on line 136

該当のソースコード

$previous_post = get_adjacent_post(false,'',true,'category'); $next_post = get_adjacent_post(false,'',false,'category');

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

tabuu

2023/01/25 06:06

$previous_postや$next_postといった変数をその後どのように処理していますか? single.phpの136行目前後だと思います。 質問を編集してソースコードをご提示ください。
senen-boy

2023/01/25 06:17

ご返信ありがとうございます。 こんな感じになっております。 <?php $previous_post = get_previous_post(false); $previous_id = $previous_post->ID; $previous_date = mysql2date('Y年m月d日', $previous_post->post_date); $next_post = get_next_post(false); $next_id = $next_post->ID; $next_date = mysql2date('Y年m月d日', $next_post->post_date); if($previous_post or $next_post): ?> <ul class="postPager"> <li class="postPager__list prev"> <?php if($previous_post): ?> <a href="<?php the_permalink( $previous_id ); ?>" class="postPager__list__inner"> <div class="postPager-img"> <?php if(has_post_thumbnail($previous_id)): ?> <img src="<?php echo get_the_post_thumbnail_url( $previous_id, ""); ?>"> <?php else: ?> <img src="<?php echo esc_url(get_theme_file_uri("images/no-image.jpg")); ?>"> <?php endif; ?> </div> <div class="postPager-body"> <p class="label"><span class="arrow"><</span>前へ</p> <p class="title"><span><?php echo get_the_title($previous_id) ?></span></p> <p class="time"><span><?php echo $previous_date; ?></span></p> </div> </a> <?php else: ?> <p class="no-article">記事がありません</p> <?php endif; ?> </li> <li class="postPager__list next"> <?php if($next_post): ?> <a href="<?php the_permalink( $next_id ); ?>" class="postPager__list__inner"> <div class="postPager-img"> <?php if(has_post_thumbnail($next_id)): ?> <img src="<?php echo get_the_post_thumbnail_url( $next_id, ""); ?>"> <?php else: ?> <img src="<?php echo esc_url(get_theme_file_uri("images/no-image.jpg")); ?>"> <?php endif; ?> </div> <div class="postPager-body"> <p class="label"><span class="arrow"><</span>次へ</p> <p class="title"><span><?php echo get_the_title($next_id) ?></span></p> <p class="time"><span><?php echo $next_date; ?></span></p> </div> </a> <?php else: ?> <p class="no-article">記事がありません</p> <?php endif; ?> </li> </ul> <?php else: ?> <?php endif; ?>
tabuu

2023/01/25 07:14

私の説明も良くなかったのですが、ここの質問欄ではなく本文にソースコードを記載ください。 そしてマークダウンで記載ください。 後から見た人に伝えやすくするためです。

回答1

1

ベストアンサー

前後の記事が存在するか確認してからIDを取得するようにしてみてください。
例えば前の記事は、

PHP

1$previous_post = get_previous_post(false); 2if ($previous_post) { 3 $previous_id = $previous_post->ID; 4 ... 5}

投稿2023/01/25 07:20

tabuu

総合スコア2273

semknb❤️を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

senen-boy

2023/01/25 11:09

ありがとうございます!!! 解決いたしました!!!

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

WordPress

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

PHP

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