All In One SEO Pack からの Undefined variable: post_type

いつかfixされるだろうと思いつつ…無視できない量のログになりソース対応したときのメモ。

■プラグインAll In One SEO Pack バージョン 2.7.2(今日現在)
※おそらく2.6あたりからPHP Notice発生

このプラグインを利用して、会員制サイト等でアクセス制御しているポストタイプに nofollow 設定していたり、検索エンジンに画像を follow されないように設定しているサイトは、ログを確認してみるとよいかもしれません。

現象

AIOSEOP「一般設定」の「NOINDEX設定」(以下はデフォルト設定)で、

「B」でチェックしている一覧ページがあり、

  • カテゴリーページ
  • 日付アーカイブページ
  • 投稿者ページ
  • タグページ
  • 検索ページ
  • 404ページ
  • タクソノミーページ(タクソノミがあるときに表示される)

「A」でnofollow 設定しているポストタイプがあると、PHP Noticeがでます。

Debug LogPHP Notice:  Undefined variable: post_type in /..../plugins/all-in-one-seo-pack/aioseop_class.php on line 4159

ただし、
・「C」の「ページ付けされたページ/投稿にnofollowを使用」にチェックしていて、2ページ目以降の場合は、Noticeはでません。
・一覧ページによっては、1件目の投稿/ページに個別でnofollowを設定している場合も、Noticeはでません。
(先に評価されるので)

対応

下記の変数$post_type が未定義であることが原因。

【変更前】aioseop_class.php : line 4157~4162// #322: duplicating this code so that we don't step on some other entities' toes.
if ( ( 'on' === $aiosp_nofollow ) || ( ( ! empty( $aioseop_options['aiosp_paginated_nofollow'] ) ) && $page > 1 ) ||
( ( '' === $aiosp_nofollow ) && ( ! empty( $aioseop_options['aiosp_cpostnofollow'] ) ) && in_array( $post_type, $aioseop_options['aiosp_cpostnofollow'] ) )
) {
$nofollow = 'nofollow';
}
// #322: duplicating this code so that we don't step on some other entities' toes.

このコードが含まれているif文のelseに同じコードがあるのですが、そのコードをこちらにも応急処置的に追加した際に、$post_typeの宣言と値代入のコードを追加し忘れたのでしょう。
で、同じように$post_typeの宣言を入れます。

【変更後】aioseop_class.php$post_type = get_post_type(); // @@@ 追加
// #322: duplicating this code so that we don't step on some other entities' toes.
if ( ( 'on' === $aiosp_nofollow ) || ( ( ! empty( $aioseop_options['aiosp_paginated_nofollow'] ) ) && $page > 1 ) ||
( ( '' === $aiosp_nofollow ) && ( ! empty( $aioseop_options['aiosp_cpostnofollow'] ) ) && in_array( $post_type, $aioseop_options['aiosp_cpostnofollow'] ) )
) {
$nofollow = 'nofollow';
}
// #322: duplicating this code so that we don't step on some other entities' toes.

これで、PHP Noticeはなくなります。

本来の目的は、noindexを設定したこれらの一覧ページに、nofollow を設定してあれば、nofollowにすることなので、$aiosp_nofollow が on か "" かは条件に入れなくてもいんじゃない?という気も。

どちらにしても、$post_typeの定義は必要。
$post_type = get_post_type();

AIOSEOPバージョン履歴

ALL IN ONE SEO PACK RELEASE HISTORY
https://semperfiwebdesign.com/all-in-one-seo-pack-release-history/

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です