最近、あるユーザーから、WordPressサイトにPHP関数に依存する新しいコードを追加する前に、PHP関数が存在するかどうかを確認する方法を尋ねられました。
WordPressの最大の魅力は、サイトに独自のカスタム関数を追加できるなど、柔軟性が高いことです。しかし、カスタマイザーが参照する関数がすでに存在しないために、カスタマイザーコードが機能しないこともあります。
この投稿では、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ページビルダーのエキスパートセレクションもご覧ください。
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