現在、釈迦堂ネットショップの運営で使用しておりますソフトは、WordPressと呼ばれるCMS(コンテンツ・マネージ・システムの略)に、Welcartと言うプラグインを組み合わせております。
そのWordPressは、PHPと呼ばれるプログラム言語で作られていて、コアサーバーV1ではPHP7.4を使っていましたが、コアサーバーV2に引越移転を機に、PHP8.0以上にバージョンをUPさせました。
しかし、PHP7.4で動作していたものがPHP8.0以上では動作しなくなり、原因を調べると、コードの書き方が変更されて、以前のものが通用しないことがわかりました。
ただ、どこのヵ所を、どのように書き換えれば良いのかまでは、素人ではお手上げ状態でした。しかし、ダメもとで、巷で噂のAIくんに尋ねてみました。
以下のPHP7.4で動作していたコードをPHP8.0以上に対応させてと
<div class=”field”>
<?php _e(‘stock status’, ‘usces’); ?> : <?php usces_the_itemZaiko(); ?>
<?php if( ” != usces_the_itemZaikoNum(‘return’) ): ?>
(在庫数:<?php usces_the_itemZaikoNum(); ?>)
<?php endif; ?>
</div>
すると、答えが一瞬で画面上に現れ、早速WEB上で試して見ると、エラーなく動作してくれました。本来なら有料でお願いしなければならない案件でも、無料で書き換えていただけました。
以下回答
PHP 8.0以降では、usces_the_itemZaikoNum('return') が空文字 '' ではなく null を返す可能性があること、およびPHP 8.xの厳格な型比較や関数引数の仕様変更によりエラーや警告が発生しやすくなっています。
PHP 8.x(2026年現在の標準仕様)に適合した安全な書き方は以下の通りです。
修正後のコード
php
<div class="field">
<?php _e('stock status', 'usces'); ?> : <?php usces_the_itemZaiko(); ?>
<?php
$zaiko_num = usces_the_itemZaikoNum('return');
// 値が空でなく、かつ 0 以上の数値(または数値文字列)であるかを確認
if ( !empty($zaiko_num) || '0' === $zaiko_num ) :
?>
(在庫数:<?php echo esc_html($zaiko_num); ?>)
<?php endif; ?>
</div>
- 関数の戻り値を変数に代入:
usces_the_itemZaikoNum('return')を複数回呼び出すのを避け、一度変数$zaiko_numに格納することで処理を効率化し、予期せぬ動作を防ぎます。 empty()と厳密比較の併用:
PHP 8.0以降、数値と文字列の比較仕様が変更されました。'' != $valueという書き方は、$valueが0の場合に意図しない判定(false)になることがあります。!empty()またはstrlen()を使用し、「在庫数が 0」の場合も正しく表示されるよう'0' === $zaiko_numを考慮するのが安全です。- エスケープ処理の追加:
セキュリティ(XSS対策)のため、値を表示する際はesc_html()でラップすることを推奨します。
もし Welcart のバージョンが極端に古い場合、PHP 8.x 自体に対応していない箇所があるため、Welcart 公式サイトから最新版へのアップデートも検討してください。
