web-dev-qa-db-ja.com

プラグイン開発のための客観的なベストプラクティス

コミュニティウィキを集めて集める目的プラグイン開発のためのベストプラクティス。この質問は、 @ EAMannのwp-hackersに対するコメント にヒントを得たものです。

その目的は、どのような客観的なベストプラクティスであるかについて共同作業を行い、コミュニティの共同作業のレビュープロセスで最終的にそれらを使用できるようにすることです。

更新: 最初の数回の回答を見た後、回答ごとにアイデア/提案/ベストプラクティスを1つだけ持つ必要があることが明らかになりました。

131
MikeSchinkel

アクションとフィルタを使用する

あなたが人々が何らかのデータを追加または変更したいと思うなら: /を適用する apply_filters() を返す前に

P.Sちょっとがっかりしていて、あなたの質問が対処しているのは、エンドユーザー専用に設計されたプラグインの割合です。つまり、独自のフックがありません。 WordPressがほとんどのプラグインのように設計されていると想像してみてください。それは柔軟性がなく、非常にニッチな解決策になるでしょう。

WordPressが他のプラグインに依存しているプラ​​グインを自動インストールする機能を持っているとしたら、おそらく状況は異なるでしょうか。クライアントはある方法で利用可能なプラグインを望んでいますが、90%はありますが、残りの10%を柔軟に更新できないため、通常は最初から必要な機能を多く作成する必要があります。

StackExchangeサイトで良い答えが得られるのと同じように、WordPressコミュニティをリードする人たちがプラグインがベストプラクティス(他の開発者のためのフックを追加することなど)に従うことで得られることを保証する方法を見つけることを本当に願っています。

別の質問 から例を見てみましょう。

例:誰かが記事をリツイートしたときに私のプラグインで何かをしたいのです。人気のあるリツイートプラグインが私に接続して起動することができるものなら何でもカスタムフックがあれば、それは素晴らしいことです。そうではないので、それを含めるようにプラグインを変更することはできますが、それは私のコピーにしか機能しないので、それを再配布することはしたくありません。

関連する

69
Arlen Beiler

wp_enqueue_scriptwp_enqueue_styleでスクリプト/ CSSをロードする

プラグインは、重複したバージョンのJS/CSSファイル、特にjQueryおよびWP Coreに含まれるその他のJSファイルをロードまたはロードしようとしないでください。

JSファイルとCSSファイルをリンクするときは、プラグインは常にwp_enqueue_scriptwp_enqueue_styleを使用し、<script>タグを介して直接使用することは絶対にしないでください。

関連する

53
Rick Curran

国際化のサポート

開発者が独自のプラグインの翻訳に関心がない場合でも、すべての出力文字列を適切なテキストドメインにリンクして、関係者による国際化を可能にする必要があります。

ユーザーがアクションにフックできるように、initアクション中に言語ファイルをロードすることが非常に重要であることに注意してください。

コーデックスを参照してください: WordPress DevelopersのI18n

また、この記事: WP言語ファイルを正しく読み込んでいます

WordPress 4.6以降

WP 4.6では、ロード順序とチェックされる場所が変更され、開発者とユーザーにとって非常に簡単になりました。

テキストドメイン「my-plugin」を持つプラグインを考えると、WordPressは最初に翻訳ファイルを探します:
/ wp-content/languages/plugins/my-plugin-en_US.mo

見つからない場合は、プラグインが表示するように指示する場所を探します(通常、コーデックスに従う場合は、pluignsの 'language'フォルダーにあります)。
/ wp-content/plugins/my-plugin/languages/my-plugin-en_US.mo

最後に、言語ファイルが見つからない場合、次のデフォルトの場所を確認します。
/ wp-content/languages/my-plugin-en_US.mo

4.6で最初のチェックが追加され、開発者が言語ファイルを追加した場所を知る必要があったため、ユーザーは言語ファイルを追加するための定義された場所を提供しました。ユーザーはプラグインのtextdomainを知るだけです:/ wp-content/languages/plugins/TEXTDOMAIN-LOCAL.mo


以下は古い方法です(WP 4.6+以降は関係ありません)

[...]
最後に、プラグインに同梱されている言語ファイルをロードする前に、WP_LANG_DIRからカスタムユーザー言語ファイルをロードすることが重要であることを指摘したい。同じドメインに複数のmoファイルが読み込まれると、最初に見つかった翻訳が使用されます。このように、プラグインによって提供される言語ファイルは、ユーザーが翻訳していない文字列のフォールバックとして機能します。

public function load_plugin_textdomain()
{
    $domain = 'my-plugin';
    // The "plugin_locale" filter is also used in load_plugin_textdomain()
    $locale = apply_filters( 'plugin_locale', get_locale(), $domain );

    load_textdomain( 
            $domain, 
            WP_LANG_DIR . '/my-plugin/' . $domain . '-' . $locale . '.mo' 
    );
    load_plugin_textdomain( 
            $domain, 
            FALSE, 
            dirname( plugin_basename(__FILE__) ) . '/languages/' 
    );
}
49
EAMann

WP_DEBUGでプラグインがエラーを生成しないようにする

常に WP_DEBUG をオンにしてプラグインをテストし、理想的には開発プロセスを通してそれをオンにします。プラグインはWP_DEBUGをonにしてエラーを投げてはいけません。これには、廃止予定の通知や未チェックのインデックスが含まれます。

デバッグを有効にするには、wp-config.phpファイルを編集して、WP_DEBUG定数をtrueに設定します。詳細については DebugのCodex を参照してください。

47
John P Bloch

WordPress Coreで最初に既存の関数を使う

あなたができるなら: WordPressコアに含まれている既存の関数を使う あなた自身のものを書く代わりに。 WordPressコアに適切な既存の関数がない場合にのみ、カスタムPHP関数を開発してください。

1つの利点は、置き換えが必要な関数を簡単に監視するために"log deprecated notices"を使用できることです。もう1つの利点は、経験豊富なPHP開発者でなくても、ユーザーはCodexで関数のドキュメントを表示し、プラグインが何をするのかをよりよく理解できることです。

関連する

41
kaiser

アンインストールすると、プラグインのデータがすべて削除されます。

WordPressのインストールから削除されると、プラグインはそれが作成したすべてのファイル、フォルダ、データベースエントリ、およびtables、それが作成したoption valuesを削除するはずです。

プラグインは設定をエクスポート/インポートするオプションを提供するかもしれません、それで設定は削除の前にWordPressの外に保存されることができます。

関連する

33

入力データによるSQLインジェクションの防止

プラグインshould MySQLデータベースへの問い合わせに入力値を使用する前に、直接的または間接的に(たとえば$_POSTまたは$_GETを介して)取得されたすべてのユーザー入力をサニタイズします。

SQL文のフォーマット を参照してください。

33
MikeSchinkel

クラスとオブジェクト指向のPHP5コードを使う

きれいな、オブジェクト指向のPHP 5コードを書かない理由はありません。 PHP 4のサポートは次のリリース(WP 3.1)の後に段階的に廃止される予定です。もちろん、すべての関数名の前にendlessly_long_function_names_with_lots_of_underscoresを付けることもできますが、単純なクラスを書いてその中にすべてをまとめる方がはるかに簡単です。また、クラスを別々のファイルに入れてそれに応じて名前を付けると、クラスを簡単に拡張および保守できます。

// in functions.php
require 'inc/class-my-cool-plugin.php';
new MyCoolPlugin();

// in inc/class-my-cool-plugin.php
class MyCoolPlugin {
    function __construct() {
        // add filter hooks, wp_enqueue_script, etc.

        // To assign a method from your class to a WP 
        // function do something like this
        add_action('admin_menu', array($this, "admin"));
    }

    public function admin() {
        // public methods, for use outside of the class
        // Note that methods used in other WP functions 
        // (such as add_action) should be public
    }

    private function somethingelse() {
        // methods you only use inside this class
    }
}
30
Husky

すべてのグローバル名前空間項目のプレフィックス

プラグインはすべてのグローバル名前空間項目(定数、関数、クラス、変数、さらにはカスタム分類法、投稿タイプ、ウィジェットなど)にも適切に接頭辞を付ける必要があります。たとえば、init()という名前の関数を作成しないでください。代わりに、jpb_init()のような名前を付けてください。

一般的には、名前の前に3文字または4文字のプレフィックスを使用するか、 PHP名前空間機能 を使用する必要があります。比較: PHPクラス定数の1文字のプレフィックス?

関連する

29
John P Bloch

無効化によってデータ損失が引き起こされるべきではありません。

プラグインしてはいけません非アクティブ化にあるデータを削除します。

関連する

25
MikeSchinkel

必要なファイルだけを含めてください...

フロントエンドにいる場合は、管理領域に関連するコードを含めないでください。

23

プラグインのアンインストール時のデータ消失を発表

アンインストール時 aプラグインshould データを削除することをユーザーに確認する そして削除する前にユーザーがデータを削除しても問題ないことを確認するアンインストール時には、プラグインshould _もデータを保持するオプションをユーザーに許可します _。 (このアイデアは@EAMannから)

関連する

21
MikeSchinkel

WordPressを使用する(組み込み)エラー処理

ユーザー入力が間違っていたとしてもreturn;だけではいけません。間違って行われたことに関する情報をそれらに提供します。

function some_example_fn( $args = array() ) 
{
    // If value was not set, build an error message
    if ( ! isset( $args['some_value'] ) )
        $error = new WP_Error( 'some_value', sprintf( __( 'You have forgotten to specify the %1$s for your function. %2$s Error triggered inside %3$s on line %4$s.', TEXTDOMAIN ), '$args[\'some_value\']', "\n", __FILE__, __LINE__ ) );

    // die & print error message & code - for admins only!
    if ( isset( $error ) && is_wp_error( $error ) && current_user_can( 'manage_options' ) ) 
        wp_die( $error->get_error_code(), 'Theme Error: Missing Argument' );

    // Elseif no error was triggered continue...
}

すべて1つのエラー(オブジェクト)

ブートストラップの間にあなたのテーマやプラグインのためにグローバルエラーオブジェクトを設定することができます:

function bootstrap_the_theme()
{
    global $prefix_error, $prefix_theme_name;
    // Take the theme name as error ID:
    $theme_data = wp_get_theme();
    $prefix_theme_name = $theme_data->Name;
    $prefix_error = new WP_Error( $theme_data->Name );

    include // whatever, etc...
}
add_action( 'after_setup_theme', 'bootstrap_the_theme' );

後で、必要に応じて無制限のエラーを追加できます。

function some_theme_fn( $args )
{
    global $prefix_error, $prefix_theme_name;
    $theme_data = wp_get_theme();
    if ( ! $args['whatever'] && current_user_can( 'manage_options' ) ) // some required value not set
        $prefix_error->add( $prefix_theme_name, sprintf( 'The function %1$s needs the argument %2$s set.', __FUNCTION__, '$args[\'whatever\']' ) );

    // continue function...
}

それからあなたはあなたのテーマの終わりにそれらすべてを取得することができます。こうすることで、ページのレンダリングを中断することなく、開発中のすべてのエラーを出力することができます。

function dump_theme_errors()
{
    global $prefix_error, $prefix_theme_name;

    // Not an admin? OR: No error(s)?
    if ( ! current_user_can( 'manage_options' ) ! is_wp_error( $prefix_error ) )
        return;

    $theme_errors = $prefix_error->get_error_messages( $prefix_theme_name );
    echo '<h3>Theme Errors</h3>';
    foreach ( $theme_errors as $error )
        echo "{$error}\n";
}
add_action( 'shutdown', 'dump_theme_errors' );

あなたはさらなる情報を this Q で見つけることができます。 WP_Errorwp_die()の「一緒に機能する」ことを修正するための関連チケットはそこからリンクされており、別のチケットが続きます。コメント、評論家などは大歓迎です。

19
kaiser

プラグインのフォルダ名を変えましょう

/ plugins/pluginname/{various}

フォルダに使用される "pluginname"は常に変更可能であるべきです。

これは通常、定数を定義し、プラグインを通して一貫してそれらを使用することによって処理されます。

言うまでもなく、多くの人気のあるプラグインは罪人です。

関連する

  • plugins_url() プラグインに含まれているリソースへのリンクを簡単にするため。
19
AndyBeard

グローバルネームスペースに追加された名前を最小限に抑える

プラグインshould 影響を減らす できるだけ多くの グローバル名前空間に追加する名前の数を最小限に抑える

これは、プラグインの機能をクラスにカプセル化するか、 PHP名前空間機能 を使用することによって実行できます。すべてのプレフィックスを付けることも同様に役に立ちますが、それほど柔軟ではありません。

関数やクラスの横に、プラグインしてはいけませんがグローバル変数を導入しています。クラスを使うことは通常それらを廃止し、プラグインのメンテナンスを単純化します。

関連する

18
hakre

PhpDocを使ってコメントする

ベストプラクティスはPhpDocスタイルに近いです。 "Eclipse"のようにIDEを使わないのであれば、 PhpDocマニュアルを参照 を見てください。

これがどのように機能するのか正確に知る必要はありません。プロの開発者はとにかくコードを読むことができ、要約としてこれを必要とするだけです。趣味コーダーとユーザーは、あなたが同じ知識レベルでそれを説明する方法を評価するかもしれません。

17
kaiser

Add_optionの前に設定APIを使用する

Add_option関数を使ってDBにオプションを追加する代わりに、すべての面倒を見る Settings API を使ってそれらを配列として保存するべきです。

Add_optionの前にテーマ変更APIを使用する

Modifications API は、非常に単純な構成であり、オプションを追加および取得できる安全な方法です。すべてがデータベースにシリアル化された値として保存されます。簡単、安全、そして簡単。

17
kaiser

プラグインユーザーの保護

(以前:匿名APIコミュニケーション)

プラグインが外部のシステムまたはAPI(たとえばWebサービス)と通信する場合は、匿名で通信するか、プラグインのユーザーに関連するデータが不正に第三者に漏れることのないよう匿名オプションをユーザーに提供する必要があります。

16
EAMann

アクセス許可を使用してアクセス制御を提供する

多くの場合、ユーザーは自分のプラグインによって作成された領域に誰もがアクセスできないようにしたくないかもしれません。

少なくとも、あなたのプラグインが使用されることができるすべての異なる種類の手順のために適切な能力チェックをしてください。

15
eddiemoya

WordPress.orgのホストプラグイン

プラグインをホストするには SVN リポジトリ WordPress.orgで提供 を使用します。ユーザーエクスペリエンスをより簡単に更新できるようになります。SVNをこれまで使用したことがない場合は、それを正当化する文脈で使用することで実際に理解することができます。

14
pixeline

コードを整理する

実行された順序で書かれていないコードを読むのは難しいです。最初に/ require、define、wp_enqueue_style&_scriptなどを、次にプラグイン/テーマに必要な関数を、そして最後にビルダー(例:管理画面、テーマに統合されたものなど)を含めます。

Cssとjsのようなものをそれら自身のフォルダーに分けてみてください。また、配列フラットナーなどのようなヘルパーだけの関数でこれを行うようにしてください。 「メイン」ファイルをできるだけクリーンで読みやすいようにしておくことは、ユーザー、開発者、そしてあなたが、1年以内に更新しようとしたときにコードを長期間見たことがない場合に役立ちます。

あなたが頻繁に繰り返す構造を持っていることも良いことです、それであなたはあなたの道を常に通り抜けます。異なるプロジェクトで既知の構造で開発することで、それを改善するための時間が与えられ、クライアントが別の開発者に切り替えたとしても、「彼は混乱した」と聞くことは決してありません。これはあなたの評判を築き、長期的な目標になるはずです。

12
kaiser

インポート/エクスポートプラグイン設定

プラグインではそれほど一般的ではありませんが、プラグインに(いくつかの)設定がある場合、should 設定やユーザー入力のようなデータのインポート/エクスポートを提供します

インポート/エクスポートはプラグインの使いやすさを向上させます。

このようなインポートおよびエクスポート機能(および元に戻すメカニズム)を持つサンプルプラグインは、 Breadcrumb NavXT(Wordpress Plugin) (完全な開示:その中の私による小さなコード、ほとんどはmtekkによって行われました) 。

関連する

12
hakre

スタイルで死ぬ

まともな方法で死ぬ すべてのプラグイン(そしてテーマさえも)関数は、起こったことに関するちょっとした情報をユーザに提供するために重要な場所でwp_die()を使うべきです。 Phpエラーは厄介であり、wp_dieはプラグイン(あるいは彼ら)が何を間違っていたのかについてNiceスタイルのメッセージをユーザに与えることができます。さらに、もしユーザがデバッグを無効にしているなら、プラグインはただ壊れるでしょう。

wp_die()を使うことはまたあなたのプラグイン/テーマが wordpress testsuite と互換性があることを助けます。

11
kaiser

ユーザーにヘルプ画面を提供する

何度も質問に答える必要があるよりも、回答としてRTFM(ヘルプをクリックする)と言う方が良いです。

/**
  * Add contextual help for this screen
  * 
  * @param $rtfm
  * @uses get_current_screen
  */ 
  function ContextualHelp( /*string*/ $rtfm) 
  { 
     $current_screen = get_current_screen();
     if ($current_screen->id == $this->_pageid) 
     {
        $rtfm .= '<h3>The WordPress Plugin - Screen A</h3>';
        $rtfm .= '<p>Here are some tips: donate to me ' .
     }
     return $rtfm; 
  }
add_action('contextual_help', array($this,'ContextualHelp'),1,1);

update/note: (kaiserのコメントを参照):上記の例はクラスで使用されます

11
edelwater

拡張可能なフォームを提供する

プラグインがデータを入力する可能性を提供するとき、それは常に終わりだけでなく「送信」または「リセット」ボタンの直前にフックを持っているべきです。

参照してください: 設定API

関連する

10
kaiser

直接ではなく、常にフックを介して機能を組み込みます。

例:

  • フックなしでnewを介してプラグインのクラスをインクルードするために使用しないでください

  • フックを使用する

    // add the class to WP                                   
    function my_plugin_start() {                                                               
        new my_plugin();   
    }                                                        
    add_action( 'plugins_loaded', 'my_plugin_start' );
    

更新: 小さな実例: Plugin-svn-trunk-page と疑似例

//avoid direct calls to this file where wp core files not present
if (!function_exists ('add_action')) {
        header('Status: 403 Forbidden');
        header('HTTP/1.1 403 Forbidden');
        exit();
}

if ( !class_exists( 'plugin_class' ) ) {
    class plugin_class {

        function __construct() {
        }

    } // end class

    function plugin_start() {

        new plugin_class();
    }

    add_action( 'plugins_loaded', 'plugin_start' );
} // end class_exists

マルチサイトインストールでmu_plugins_loadedを使ってロードすることもできます。アクションリファレンスについてはコーデックスを参照してください。 http://codex.wordpress.org/Plugin_API/Action_Reference また、このフックを使ってwPを組み込む方法もあります。 http://adambrown.info/p/wp_hooks/hook/plugins_loaded?version=2.1&file=wp-settings.php 私はこれを頻繁に使用していますが、それほど難しくも早くも使用していません。クラス();

9
bueltge

あなたのプラグインの説明はあなたのプラグインの機能を正確に詳述するべきです。 10の注目の投稿プラグインがあります。それらのすべてが注目の投稿を表示しますが、それでも多くは異なる機能を持っています。説明を読むことであなたのプラグインを類似のプラグインと比較するのは簡単なはずです。

本当に基本的なものでない限り、プラグインがどれほど単純であるかについて自慢しないでください。設定へのリンクのように、説明に便利なリンクを含める必要があります。

8
Greg

GPL互換ライセンス下のライセンスプラグイン

プラグインとテーマ するべきです WordPress互換のライセンスの下でライセンスされています。これにより、「プログラム」としてWordPressに再配布することができます。推奨されるライセンスは GPL です。 プラグインに含まれるすべてのコードライブラリが同じライセンスと互換性があることに注意してください。

(これは 問題だった そして深刻な 議論のポイント 過去と 現在の両方

8
EAMann

リモートデータソースとWebサービスの副作用を最小限に抑える

プラグイン should Cache/Shield Webサービスおよび/またはキャッシング/データプロバイダ層を介したXMLRPC/SOAP要求 _ (遅い)Webサービスの応答を待つリクエスト.

それはRSSフィードと他のページのダウンロードを含みます。バックグラウンドでデータを要求するようにプラグインを設計してください。

考えられる1つのステップは、(例としてping.fmに投稿する):バッファテーブルを作成します。ping_fm_buffer_post(日付、時刻、メッセージ、submit_time、status)

  1. Ping.fmに更新を送信するたびに、このテーブルに追加してください。
  2. それでは、このデータを処理するためのプラグインを作成する必要があります。このプラグインはcrontab経由で実行され、まだ送信されていないすべての更新を確認します。
  3. このテーブルがあるので、ping.fmに送信されたすべてのメッセージをリストして各投稿のステータスを確認することもできます。念のためping.fm側で問題が発生した場合は、再送信することができます。
7
hakre

プラグインをテストする

私たちのプラグイン開発環境には確かにいくつかのテストツールがあるはずです。

この答えに基づいて by Ethan Seifert テストの質問に対して、これらは従うべき良い習慣です:

  • 単体テストでは、クラスが実行できる最小の動作をテストする必要があります。
  • 機能テストのレベルに到達したら、ここでWordpressの依存関係を使用してコードをテストできます。
  • プラグインの動作に応じて、IDを使用してDOM内のデータの存在をテストするSeleniumベースのテストを使用することを検討してください。
7
Fernando Briano

適切な名前を使用する

フックとフィルタに名前を付けます (クラス、関数、変数) - 年になっても識別できるようになります これ以上覚えていない場合、/そのケーキやコードはどこから来たのでしょう。フック/フィルタ名が長くなっても問題ありません。例youruniquename_hook/filter_whatitdoes.

  • ファイルに "dbdbInit"という名前のクラスが含まれている場合、そのクラスを含むファイルの名前は "dbdbInit.class.php"になります。
  • dbdbInit-クラスの中にexを登録する関数を入れた場合。 custom_post_types、そしてそれをregister_custom_post_types()と呼びます。
  • Custom_post_typesの名前を含む配列を取得した場合は、その配列が割り当てられている変数$custom_post_type_namesを呼び出します。
  • もしあなたが配列を扱う関数を手に入れたらfunction array_handler( $array ) { // handle the array} ..と書いてください。
  • サインが何をするのか、それが属する場所をその名前でわかるように物事に名前を付けるようにしてください。

他のこと:あなたが何かをデバッグしなければならないなら、すべてのケースの99%で、あなたはあなたのコードだけでなく、wordpressにもあなたのすべてのあなたのメッセージを得る。だから、同じ接頭辞exを使うようにしてください。あなたのクラス、パブリック関数、そして変数/オブジェクトのための "dbdb"。これにより、何百ものファイルの中から簡単に見つけることができます。 (Wordpressはあなたのテーマの前に64個のファイルをロードし、約1,550個の機能を持っていますが、フックやフィルタについては説明していません。)

6
kaiser

将来のWordPressとテーマのバージョンを気にする

注意:このアドバイスを読み終えた後は、すべての機能の存在を確認することでサイトの動作が遅くなる可能性があるため、ここではこの手順から戻ります。

関数が推奨されなくなったかどうかを確認してください あなたのテーマの中で直接。

これは「そのようになる可能性があります」の例です。

if ( ! function_exists( 'wp_some_fn' ) ) 
{
    $theme_data = wp_get_theme();
    $error = new WP_Error( 'wp_some_fn', sprintf( __( 'The function %1$s is deprecated. Please inform the author', TEXTDOMAIN ), "Theme: {$theme_data->Name}: Version {$theme_data->Version}" );

    // abort
    if ( is_wp_error( $error ) )
        return print $error->get_error_message();
} 
// else if no error - the function works and exists
wp_some_fn();

適切な/ベストプラクティスのエラー処理については、次の回答を参照してください。 link

$の原因でさえ関数に落とすことができます。これはあなたとあなたのユーザーがあなたのテーマの中で変化するかもしれない機能やクラスを追跡するのを助けるでしょう。

6
kaiser

WordPressのコーディング規約を使用する

http://codex.wordpress.org/WordPress_Coding_Standards

他の誰かがまとめたコードと比べて、自分が取り組んだコードを更新するのがどれほど簡単なのか知っていますか?コーディング標準を使用すると、プロジェクトに取り組んでいる開発者は誰でも参加して何が起こっているのかを確認しやすくなります。

私たちはあなたのプラグインやテーマがあなた自身のものであることを知っています。すべてのインデントは慎重に考え抜かれたステートメントです。しかし、あなたのカスタムコードで、あなたのコードがコアアプリケーションにないとしても、あなたはWordPressに貢献しています。コーディング標準は、開発者があなたのコードを素早く理解するのに役立ちます。

6
gabrielk

WordPressのコアコードから分離

プラグインshouldはWordPressのコードからプラグインのコードを分離するために必要最小限に WordPressのAPIの影響を減らします。これにより、WordPressコードベース内の変更がプラグインに与える影響が軽減されます。さらにこれはあなたのプラグインコードのクロスバージョン互換性を改善します。

これはWordPressの機能を使わないことを意味するのではなく( 既存の機能を再利用する を示唆するように)あなたのコードをWordPressの機能にあてはめるのではなくWordPressの機能から。

6
hakre

プラグイン出力文字列にwpオプションを使用する

プラグインを簡単に使用しカスタマイズできるようにするために、すべての出力文字列は変更可能であるべきです。そのための最善の方法は、出力文字列を格納し、デフォルト値を変更するためのバックエンドを提供するためにwp-optionsを使用することです。プラグインは、プラグインバックエンドを使って簡単に変更できない表示された文字列を使うべきではありません。

例:社交的 - アイコン部分の「共有して楽しむ」の前に表示される文を変更することができます。

5
hannit cohen

アンインストールを使用し、フックを有効化および無効化する

これには3つの異なるフックがあります。

  • register_uninstall_hook();をアンインストールします。
  • 無効化register_deactivation_hook();
  • アクティベーションregister_activation_hook();

実用的な例を含む詳細な説明はここにあります。

3
kaiser