最近、より技術的な読者から、WordPressサイトに新しいコードを統合する前にPHP関数の存在を確認する方法について質問がありました。これは、サイトがスムーズに実行され、エラーを回避するために重要です。
WordPressの強みの一つはその柔軟性であり、WPBeginnerチームはサイトの機能を向上させるためにカスタム関数を定期的に追加しています。カスタムPHPコードは、存在しない関数を呼び出したり、まだ定義されていない関数を呼び出したりすると失敗する可能性があることを理解しています。
この記事では、WordPress テーマに追加する前に、関数が存在するかどうかを簡単に確認する方法を紹介します。これにより、コードのエラーを防ぐことができます。

カスタムコードに「関数が存在するかどうか」を追加する理由
WordPressは主にPHPプログラミング言語で書かれています。PHPは、WordPressホスティングプロバイダーのサーバーで実行されるサーバーサイドプログラミング言語です。
PHPコードは訪問者のブラウザでページが読み込まれる前に実行を完了する必要があるため、いくつかの制限があります。その制限の1つは、何か問題が発生した場合、ページ全体が読み込まれなくなる可能性があることです。
WordPressでは、関数が見つからないためにコードの残りが実行できない場合、処理が停止し、致命的なエラーまたはファタールエラーメッセージが表示されます。

関数が突然機能しなくなったり、消えたりする原因は何ですか?
あなたが思うよりも一般的なWordPressのエラーです。
例えば、WordPressプラグインの1つに、テーマのヘッダーまたはフッター領域に追加した関数が含まれているとしましょう。プラグインを無効にすると、関数が消え、WordPressウェブサイトに致命的なエラーが発生します。
とはいえ、WordPressテーマファイルで関数を実行する前に、その関数が存在するかどうかを簡単に確認する方法を見てみましょう。
WordPress で関数が存在するかどうかを確認する
幸いなことに、PHPプログラミング言語には、実行前に関数の存在を簡単に確認するための組み込みメソッドがあります。
現在時刻をタイムゾーン情報とともに表示するWordPress関数があるとしましょう。試すことができるサンプルコードスニペットを次に示します。
テーマの functions.php ファイルに直接追加することもできますが、このチュートリアルでは、WPCode コードスニペットプラグインを使用します。これは、WordPress にカスタムコードを追加するための最も安全で簡単な方法です。
まず、WPCode 無料プラグインをインストールして有効化する必要があります。これを行う方法がわからない場合は、WordPressプラグインのインストール方法に関するステップバイステップの初心者向けガイドをご覧ください。
有効化したら、WordPressダッシュボードのコードスニペット » + スニペットを追加に移動する必要があります。そこに移動したら、「カスタムコードを追加(新規スニペット)」オプションにマウスカーソルを合わせ、表示される「スニペットを使用」ボタンをクリックします。

これにより、カスタムスニペットを追加できる新しいページが開きます。「タイムゾーン付き現在時刻の表示」のようなタイトルを入力し、以下のコードスニペットをコードプレビューペインに貼り付けます。
//display current time with timezone
function wpb_show_timezone() {
$better_time = current_time('F j, Y g:i a e');
echo "<p>The current time is " . $better_time ."</p>";
}

その後、コードが正しく実行されるように、コードタイプのドロップダウンから「PHP スニペット」を選択する必要があります。
最後に、アクティベートトグルをオンの位置に切り替え、「スニペットを保存」ボタンをクリックして新しいコードスニペットを保存します。

この関数を呼び出すには、現在の時間を表示したいWordPressテーマ内のどこかに次のコードを追加する必要があります。
<?php wpb_show_timezone(); ?>
これは、当社のテスト用ウェブサイトでの表示です。

では、この関数を実行するコードが消えてしまったらどうなるでしょうか?
関数への呼び出しは、ウェブサイトをこのように壊します。

このコードが関数が存在する場合にのみ実行されるように、チェックを追加しましょう。
再度、コードをテーマの functions.php ファイルに直接追加するか、WPCode のようなコードスニペットプラグインを使用する必要があります(推奨):WPCode
<?php
if( function_exists('wpb_show_timezone')) {
wpb_show_timezone();
} else {
// do nothing
}
?>
このコードでは、function_exists()関数を使用しています。この関数は、関数が存在するかどうかをチェックし、TrueまたはFalseを返します。
次に、関数の有無に応じて適切なアクションを実行するために、if-else条件を追加しました。
関数が利用できなくなった場合、コードはそれを単純にスキップし、WordPress はウェブサイトの残りの部分を通常どおり読み込むことができます。

この記事がWordPressで関数が存在するかどうかを確認する方法を学ぶのに役立ったことを願っています。また、WordPressサイトにコードを簡単に表示する方法や、WordPressファイルを編集するためのMacおよびWindows向けの最高のコードエディターに関するガイドも参照してください。
この記事が気に入ったら、WordPressのビデオチュートリアルについては、YouTubeチャンネルを購読してください。 TwitterやFacebookでもフォローできます。


kzain
頭痛の種がなくなりました!関数が存在しないためにテーマがクラッシュするという理由でコードを追加したことが何度あったか分かりません。実装が非常に簡単で、コードをきれいに保てます。
明確なご説明ありがとうございます
イジー・ヴァネック
PHPで存在しないPHP関数に関するエラーが発生した場合、そのような関数を有効にすることはできますか、それともサーバー管理者が行う必要がありますか?また、関数がPHPのバージョンに依存する可能性はありますか?つまり、あるPHPバージョンでは利用できるが、別のバージョンでは利用できない関数があるということですか?
WPBeginnerサポート
その場合、関数が存在しないため、エラーの原因となっている特定の関数を調べて見つける必要があります。その後、エラーの原因についてサポートに確認するか、エラーの原因となっているものを削除することができます。
管理者
Rakib
本当に役立ちました
ジョアナ・ペレイラ
良い考えですね、コフシェニンさん。おっしゃっている意味がよくわかります。私もContact Form 7でカスタム関数(各フォームでIPアドレスを取得するため)を使用しており、プラグインが更新されるたびにテーマが壊れていました。
ヒントをありがとう
ジョアナ・ペレイラ
kzain
プラグインのアップデートでテーマが壊れたこともありました! function_exists() を使用することは、これらの頭痛の種を防ぐためのゲームチェンジャーであることは間違いありません。
kovshenin
Right, only please stop checking for dynamic_sidebar with function_exists in WordPress themes, unless you need to support WordPress 2.2 and below, which I *highly* doubt. Also with the user photo plugin, the whole approach seems to be wrong and redundant to me, it looks like many developers are missing the whole point of pluggable functions…. Oh well