最近、より技術的な読者から、WordPressサイトに新しいコードを統合する前にPHP関数の存在を確認する方法を尋ねられました。これは、サイトをスムーズに動かし、エラーを避けるために重要なことです。
WPBeginnerチームは定期的にカスタム関数を追加し、サイトの機能性を向上させています。私たちは、カスタムPHPコードが、もはや存在しない、またはまだ定義されていない関数を呼び出すと失敗する可能性があることを理解しています。
この記事では、WordPressテーマに関数を追加する前に、関数が存在するかどうかを簡単にチェックする方法を紹介します。
なぜカスタムコードに「If Function Exists」を追加するのか?
WordPressは主にPHPプログラミング言語で書かれています。PHPはサーバーサイドのプログラミング言語で、WordPressホスティングサービスのサーバー上で動作します。
PHPコードは、訪問者のブラウザーにページが読み込まれる前に実行を終了しなければならないため、PHPには一定の制限があります。その制限の一つは、何か問題が発生した場合、ページ全体が読み込まれなくなる可能性があるということです。
WordPressでは、関数の欠落によって残りのコードが実行できなくなると、コードが停止し、クリティカルエラーまたは致命的なエラーメッセージが表示されます。
何が突然機能を停止させたり、欠落させたりするのか?
WordPressのエラーは意外と多いものです。
例えば、WordPressプラグインの1つに、テーマのヘッダーやフッターエリアに追加した機能が付属しているとします。プラグインを無効化すると、その機能が消え、WordPressサイトで重大なエラーが発生します。
ということで、WordPressテーマファイルで関数を実行する前に、関数が存在するかどうかを簡単にチェックする方法を見てみましょう。
WordPressに関数が存在するかチェックする
幸運なことに、PHPプログラミング言語には、関数を実行する前にその関数の存在を簡単にチェックするビルトインメソッドが用意されています。
例えば、タイムゾーン情報を含む現在時刻を表示するWordPress関数があるとします。以下はそのサンプルコードです。
テーマのfunctions.phpファイルに直接追加することもできますが、このチュートリアルでは、WordPressでカスタマイザーコードを追加する最も安全で簡単な方法であるWPCodeコードスニペットプラグインを使用します。
まず、WPCode無料プラグインをインストールし、有効化する必要があります。WordPressプラグインのインストール方法については、ステップバイステップのビギナーズガイドをご覧ください。
有効化したら、WordPressダッシュボードのCode Snippets ” + Add Snippetにアクセスする必要があります。そこで、「カスタムコードを追加(新規スニペット)」オプションにマウスオーバーし、表示される「スニペットを使用」ボタンをクリックします。
カスタムスニペットを追加できる新しいページが開きます。Display Current Time With Timezone(タイムゾーンを含む現在時刻を表示する)」などのタイトルを入力し、以下のコード・スニペットをコード・プレビュー・ペインに貼り付けます。
//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 Snippet」を選択する必要があります。
最後に、有効化トグルをオンに切り替え、「スニペットを保存」ボタンをクリックして新しいコード・スニペットを保存します。
この関数を呼び出すには、WordPressテーマの現在時刻を表示したい場所に以下のコードを追加する必要があります。
<?php wpb_show_timezone(); ?>
テストサイトではこのように表示された。
さて、この関数を実行するレスポンシブが消えてしまったらどうなるだろうか?
関数を呼び出すと、あなたのサイトはこのように壊れてしまう。
関数が存在するときだけこのコードが実行されるようにチェックを加えてみよう。
この場合も、テーマのfunctions.phpファイルに直接コードを追加するか、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 用のコードエディタもご覧ください。
If you liked this article, then please subscribe to our YouTube Channel for WordPress video tutorials. You can also find us on Twitter and Facebook.
Rakib
really helpful
Joana Pereira
Good call Kovshenin. I know exactly what you mean because I was using a custom function with contact form 7 (to retrieve the ip address on each form) and every time the plugin was updated, the theme broke.
Thanks for the tip
Joana Pereira
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