web-dev-qa-db-ja.com

私のプラグインコードを適切に死なせる方法

私は自分の関数のためのクラスを設定しました、そして私は何らかの形のエラー処理を実装したいです。しかし、私はこのエラー処理のヒバリに初めてです。

特定のメッセージのみを表示するようにset_error_handlerを設定することはできますか(また、adminセクションでこれらをwordpressのアラートとして表示することもできます)。

そして私のプラグインに致命的なエラーがある場合(私の開発環境には何もありませんが、ライブサーバーで起きる可能性があるものは何でも捕らえようとしています)それとも死の白い画面?

私はそれが自動的にプラグインを無効にするために、致命的なエラー(またはサイトを台無しにするかもしれない何か他のもの)で可能でなければならないと思いますか?そして、wpアラートメッセージを送ります。

私は正しい軌道に乗っていますか?誰かが私に見せることができる例がありますか?

1
josh

致命的なエラーは、不適切な構文、または不適切な命名規則を示します。 WordPressは、致命的なエラーを投げるプラグインを有効にしないという点で優れています。ただし、プラグインがアクティブになると、すべてのベットは無効になります。関数やクラスを作成した場合は、適切な命名規則と名前空間を正しく守ることが最善です。

たとえば、post_extras()という名前の関数は、別のプラグインから別の名前の付けられた別の関数と競合する可能性が最も高いため、適切な名前にはなりません。 foob​​ar123_post_extras()のように、各プラグインに固有の名前空間プレフィックスを選択します。

あなたのプラグインのテンプレートタグを埋め込むように人々に頼むとき、あなたはそれらの機能を分離するべきです。

if(function_exists('foobar123_post_extras'){
      echo foobar123_post_extras();
}

クラスや関数を宣言するときは、このようにしてそれらを分離します。

if(!function_exists('foobar123_post_extras'){
     function foobar123_post_extras(){
             //do something
     }
}

if(!class_exists('FooBar123Class'){
      class FooBar123Class{
             //methods
      }
}

これは関数とクラス名の衝突による致命的なエラーを防ぐためのベストプラクティスです。

プラグイン内に他のファイルを含める場合は、require関数ではなくinclude関数を使用することで、致命的なエラーを確実に排除できます。詳細は この記事 をご覧ください。このようにインクルードが失敗した場合は、プラグインを無効にすることができます。

if(!include('includes/foobarinclude.php')){
     $plugins = get_option('active_plugins');
     $index = array_search(plugin_basename(__FILE__), $plugins);
     if($index){
          unset($plugins[$index]);
          update_option('active_plugins', $plugins);
     }
}

WordPressには、コーディングスタイルに関する優れた文書があります here 構文スタイリングに関する。

ショートタグが有効になっていないサーバーではエラーが発生するため、phpショートタグを使用していないことを確認してください。

<?= - short tag
<?php echo - proper

データベースに関しては、データベースを照会するときは常に$ wpdbクラスを使用してください。あなたが使用するのと同じdbプレフィックスを持つことをユーザーに頼ることはできません。

global $wpdb;
$results = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_type = 'page' AND post_status = 'publish' LIMIT 5");

最後に、プラグインをリリースする前に、ローカル環境でWP_DEBUGスイッチをスローして、廃止予定のWordPress関数を使用しているかどうか、または他の競合を引き起こしているかどうかを確認します。将来のリリースで機能が消えた場合、それは確かにあなたのプラグインで致命的な問題を引き起こすでしょう。 WP_DEBUGを使うには、これを単にあなたのwp-config.phpファイルに追加してください:

define('WP_DEBUG', true);

これが手がかりになることを願っています。

3
Brian Fegter