2018年9月4日にサイト制作しているとWp-Queryでエラーが表示されました。そのサイトはXサーバーでこの時点で最新のPHP72が使用されています。PHP56で数年かけて作ったコードがPHP70でエラー表示された悪夢の再現?
ページ内リンク
PHP72のサーバー会社
調べてみるとこの時点でPHP72を使用しているレンタルサーバー会社はXサーバー、バリュードメイン、サクラサーバー等すでに多数ありました。
Xサーバーだけというわけではないようです。
つまりHaradaWebが利用しているコアサーバーもPHP72になっています。
外部参考サイト:FastCGI版PHP 各バージョンのPHP設定法 | 基本的な質問 | よくある質問 | レンタルサーバー CORESERVER(コアサーバー) – 30日間無料お試し
しかし最近の忙しさにかまけてPHP72の存在さえ分かっていませんでしたし、当然バージョンアップもしていません。
問題のWp-Queryのエラー
問題が発生したのはサイトに「関連情報」を設置していた時です。
WordPressのプラグインを利用すればいいのだろうが、関連情報のプラグインはどうにも扱いにくく感じます。
プラグインによっては関連情報のタイトルに「h3」が設定されているし、CSSも色んなところに「!important」が設定されていて、カスタマイズさせない感が強いと感じます。
そんな理由で自家製の関連情報をWp-Queryで作っています。
サイト内リンク:WordPressでプラグインなしの「関連記事」を作る | HaradaWeb(ハラダウェブ)
<?php $PostId = get_the_ID(); $GetCat=get_the_category(); $PostCat=$GetCat[0]; ?> <?php $qqposts = new WP_Query( array( 'cat'=>$PostCat->cat_ID, 'post__not_in' => array($PostId), 'orderby'=>date, 'order'=>DESC, 'posts_per_page' => 5 )); if ( $qqposts->have_posts() ) : while ( $qqposts->have_posts() ) : $qqposts->the_post(); ?> <div class="kanren"> <div class="kanren-title"> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> </div> <div class="kanren-content"> <?php the_content(''); ?> </div> <div class="kanren-sub"> <span class="kanren-date"> <?php echo get_the_date(); ?> </span> <span class="kanren-cat"> <?php the_category(' '); ?> </span> </div> </div> <?php endwhile; wp_reset_postdata(); else :?> 現在関連情報はありません。 <?php endif; ?>
ここに注意
2018年9月4日まで上記の様に
<?php $qqposts = new WP_Query( array( 'cat'=>$PostCat->cat_ID, 'post__not_in' => array($PostId), 'orderby'=>date, 'order'=>DESC, 'posts_per_page' => 5 ));
と記載していました。
しかしこれがサーバーのPHP72でエラー予告表示されます。
エラーの内容は
Warning: Use of undefined constant date – assumed ‘date’ (this will throw an Error in a future version of PHP) in /home/haradaweb/haradaweb.com/public_html/ccwp/wp-haradaweb/themes/wordpress17-child/template-parts/post/content.php on line
Warning: Use of undefined constant DESC – assumed ‘DESC’ (this will throw an Error in a future version of PHP) in /home/haradaweb/haradaweb.com/public_html/ccwp/wp-haradaweb/themes/wordpress17-child/template-parts/post/content.php on line
「‘orderby’=>date,’order’=>DESC,」がエラーになります。
必要な部分を翻訳すると
警告:定義されていない定数の使用date – ‘date'(これはPHPの将来のバージョンではエラーを投げます)
警告:定義されていない定数の使用DESC – ‘DESC'(これはPHPの将来のバージョンではエラーを投げます)
となります。
つまり
「今は警告だが、将来はエラーだ」という事です。
何がエラーか推測すると「’orderby’=>date,’order’=>DESC,」は設定しなくてもデフォルトで設定されている内容です。
何も設定しなくても「’orderby’=>date,’order’=>DESC,」となるわけです。
それを設定していると、考え方によっては二重で設定していることになる?
だからエラーなのではないかと推測しています。
まとめ
「‘orderby’=>date,’order’=>DESC,」この二つを削除するとエラー警告は消えました。
削除してもデフォルトで設定されているため影響はなく、投稿日の新しい順に表示されます。
「’orderby’=>date,’order’=>DESC,」だけでなく、こういう必要のないパラメータを「念の為」の様に付けているコードが大量にあります。
やはりコードは忠実に描いていかなければ、相手は「念の為」等通用しないコンピーターなのだから。