WordPress5.3のテンプレートarchive.phpでphpエラーが発生しています。
どのように修正すればよいか、ご教授いただければ幸いです。
発生しているエラー文
Notice: Trying to get property 'ancestors' of non-object in /xxx/xxx/wp-content/themes/xxx/functions.php on line 136
function.phpの該当部分
//固定ページの親子階層ごとに条件分岐 function page_is_ancestor_of($slug){ global $post; $page = get_page_by_path($slug); // 親か判別したい固定ページスラッグからページ情報を取得 $result = false; if(isset($page)){ foreach ((array)$post->ancestors as $ancestor) { if($ancestor == $page->ID){ $result = true; } } } return $result; }
↑のコード内の、下記の部分が 136行目です。
foreach ((array)$post->ancestors as $ancestor) {
archive.phpのエラーを吐いている部分
<?php if(is_page('about') || page_is_ancestor_of('about')): ?> 固定ページのaboutか、aboutの子階層で表示するコンテンツ <?php endif; ?>
エラーの発生条件
該当記事が1つもないカテゴリーの、アーカイブページを開く。
(カテゴリーに該当する記事を1つ作成すればエラーは消える)
エラーの原因?
表示する記事がないので、function.phpに書いたページ情報の取得が、うまく働いていないのだと思いますが…。
記事がない場合は何もしなくてよいのですが、phpをどのように書けばよいのでしょうか?
3/29追記:補足情報
「archive.phpのエラーを吐いている部分」について、補足です。
当初はarchive.phpでのみエラーが発生していたので、簡略化して書いてしまいました。エラーが発生しているのは、正確にはarchive.phpで読み込んでいるサイドバー用のsidebar.phpです。そして、このsidebar.phpは全ての固定ページと、投稿アーカイブページで共用しています。
なので、実現したいsidebar.phpの動きは以下になります。
・固定ページで読み込まれているときは親子階層により条件分岐をする
・投稿アーカイブページで読み込まれているときは親子階層の判別は不要
現状、固定ページは問題なく動いており、また投稿アーカイブページで読み込まれているときも、投稿記事が1つでもあればエラーは出ていません。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/03/29 01:57
2020/03/29 02:14
退会済みユーザー
2020/03/30 01:33