Wordpress-プラグインのコーディング標準

WordPress Logotype
Wordpress'aのプラグインを書くことによって持ち去られ、良い形のルールを作成しました...


命名規則



プラグインはどこから始まるのか-:)という名前であるため、プラグインの命名規則を考えてみましょう。


プラグインが1つのファイルで構成されている場合でも、常に機能を拡張したい場合があります。1つのファイルだけではうまくいかず、ディレクトリを作成できます。

readme.txt


各プラグインにはreadme.txtファイルが必要です。構文の説明http://daringfireball.net/projects/markdown/syntaxを参照してください。 バリデーターを使用して作成を確認できます。

何らかの理由でプラグインをワードプレスリポジトリにアップロードしない場合、いずれにせよこのファイルを作成してください-多くの人が感謝の意を表します。

見出し


これはプラグインの必須要素です。あまり歪めないでください。
<?php
/ *
プラグイン名:プラグインの名前
プラグインURI:http:// URI_Of_Page_Describing_Plugin_and_Updates
説明:プラグインの簡単な説明。
バージョン:プラグインのバージョン番号、例:1.0
作成者:プラグイン作成者の名前
著者URI:http:// URI_Of_The_Plugin_Author
* /
?>


コーディング標準


開発者からの本格的な標準を見たことはありません。このため、私はZend Framework'a標準を使用しています。 (例では、PHP Documentator'aのコメントを使用しません-並べ替えのリストを減らすためです)。

そしてまだ-プラグインはエラー( 通知レベルでも)を引き起こさないはずなので、開発中にエラー表示をオンにします。
error_reporting(E_ALL);

動的なファイルのアップロード


プラグイン全体を一度にダウンロードしてから、すべてのフックをハングさせて何もしません-プラグインのこの動作は一般的です、よりスマートにしましょう、クラスとファイルごとにすべての機能を削除し、関数に必要なファイルをロードすることをお勧めします:

//コンテンツフィルタを追加します
add_filter 'the_content' array '%PluginName%' 'the_content' 1000 ;

クラス PluginName {

var $ some_variable ;

/ **
* the_contentのフィルター
*
* @return void
* /
関数 the_content $ content
{
include_once 'class / Content.php' ;
$ Content = new PluginName _Content ;
return $ Content- > parseContent $ content ;
}
}


状態ごとにフックを別々に掛けることもお勧めです- リストを参照してください
if is_admin {
//管理パネルのフック
} else {
//フロントエンドのフック
}
//など...


これを行うこともできます:
if is_admin {
include_once '%PluginName%_admin.php' ;
} else {
include_once '%PluginName%_front.php' ;
}
//など...


変数と名前空間


PHPの名前空間はまだ実装されていないため(安定したバージョンを意味します)、フックのすべての機能を組み合わせた静的クラスは、このタスクに対処するのに役立ちます。
add_action '%hook_name%' array '%PluginName%' '%hook_name%' ;

クラス PluginName {

var $ some_variable ;

/ **
*いくつかの機能の説明
*
* @return void
* /
関数 hook_name
{
// ...
}
}


または通常のクラス:
//クラスの本質を作成します
$ PluginName = new PluginName ;

add_action '%hook_name%' array $ PluginName '%hook_name%' ;

クラス PluginName {

var $ some_variable ;

/ **
*いくつかの機能の説明
*
* @return void
* /
関数 hook_name
{
// ...
}
}
//不要な変数を削除します
unset $ PluginName ;


オプションテーブル(関数add_optionupdate_optiondelete_option )を使用する場合は、プラグイン名のプレフィックスも使用する必要があります。そのため、オプションの名前空間をエミュレートします(そのため、開発者は考えていませんでした)...

これらのヒントに従って、他のプラグインとの競合を回避します...

プラグインのインストール


システムを初期化するために、 register_activation_hookフックがあります。これを使用して、データベースに必要な変更を加えることができます(テーブルの作成、オプションの変更など)。 私を信じて、ユーザーはデフォルト値がデータベースに保存されるように初期化後にプラグイン設定を保存する必要があると書かれているreadme.txtを常に読むわけではありません...

プラグイン設定


美しいWordpress管理者を壊さないようにしましょう-プラグイン設定は対応するメニュー-Settings » %Plugin Name%にあるはずです。

また設定ページをわかりやすい名前の別のファイルに移動することをお勧めします(たとえば、 %PluginName%_options.phpまたは%PluginName%_settings.php )。

if is_admin {
add_action 'admin_menu' array '%PluginName%' 'adminMenu' ;
}

クラス PluginName {
関数 adminMenu
{
if function_exists 'add_options_page' {
add_options_page '%PluginName%' '%PluginName%' 'manage_options' '%PluginName%/%PluginName%_options.php' ;
}
}
}


すべてを美しくするために-wp-admin / wp-admin.cssで規定されているスタイルを使用します-このアプローチには感謝されます...

プラグインの無効化


プラグインのインストール中にデータベースまたはファイルシステムに変更を加えた場合、プラグインが無効になった後にこれらをクリーンアップすることをお勧めします。register_deactivation_hookフックはこれに役立ちます。

カスタマイズ


次の構成を使用してCSSとJavaScriptを追加します。
// CSSファイルを登録します
wp_register_style '%PluginName%' get_option 'siteurl' '/wp-content/plugins/%PluginName%/%PluginName%.css' ;
//どちらか
wp_enqueue_style '%PluginName%' get_option 'siteurl' '/wp-content/plugins/%PluginName%/%PluginName%.css' ;

// JSファイルを登録します(依存関係あり)
wp_register_script '%PluginName%' get_option 'siteurl' '/wp-content/plugins/ %PluginName%/%PluginName% .js' array 'jquery' ;
//どちらか
wp_enqueue_script '%PluginName%' get_option 'siteurl' '/wp-content/plugins/ %PluginName%/%PluginName% .js' array 'jquery' ;

これらのメソッドがwp_headまたはadmin_headのフックにある場合、このメソッドは正常に動作します。そうでない場合は、 wp_print_stylesまたはwp_print_scriptsメソッドを自分で呼び出して、出力用のスクリプト名を渡す必要があります...

また、競合、それらを回避する方法、WordPressプラグインでJavaScriptをロードする方法の記事を読んでください。

プラグインに特定のグラフィックデザインがあり、通常は特定のトピックに対して変更されている場合、現在のトピックのディレクトリにプラグインのCSSファイルがあるかどうかを確認することをお勧めします。
if file_exists TEMPLATEPATH '/%PluginName%.css' )) {
wp_register_style '%PluginName%' get_bloginfo 'template_directory' '/%PluginName%.css' ;
} else {
wp_register_style '%PluginName%' get_option 'siteurl' '/wp-content/plugins/%PluginName%/%PluginName%.css' ;
}


CSSを作成するときは、CSSファイルが現在のデザインを壊さないように注意してください。繰り返しますが、プレフィックスまたはハードバインディングを使用します。
。%PluginName%-sidebar { /*...*/ }
#%PluginName% { /*...*/ }
#%PluginName% > div { /*...*/ }

また、現在のテーマのCSSファイルがプラグインの外観に影響を与える可能性があることに注意してください-マージン、パディング、ボーダーをきれいにすることをお勧めします...

これらの簡単なトリックを使用して、私たち自身とデザイナーの生活を楽にします...

多言語


多言語を使用する予定はありませんが、他の人があなたを助ける機会を与え、プラグインを翻訳のために準備します。このため、言語のみを含むローカライズファイルを作成し、次の機能を使用してテキストを表示します

__ 'String' '%PluginName%' ;
_e 'String' '%PluginName%' ;
_c 'String' '%PluginName%' ;
__ngettext 'String' 'Strings' $ c '%PluginName%'


プラグインのルートディレクトリを詰まらせないように、翻訳ファイルを別の言語ディレクトリに配置することをお勧めします...

詳細については、WordPress開発者向け国際化ページご覧ください。

ドキュメント


ユーザーが現在のトピックに変更を加える必要がある場合-このプロセスを非常に詳細に記述することをお勧めします-通常ではなく、「このコードはあなたが望むものを表示します。」

ところで、プラグインが無効になっている場合、「このコード」はエラーを引き起こさないはずです。したがって、次の構成で関数呼び出しをフレーム化することを忘れないでください。
<?php
if function_exists '%FunctionName%' )) {
FunctionName ;
}
?>


覚えておいてください-エンドユーザーはしばしばプログラマーではありません、そして彼はすべてをかみ砕いて口に入れる必要があります...

適合性


残念ながら、WordpressはPHP4をサポートするシステムとして位置付けられているため、PHP5を使用する場合は、プラグインを含める段階で事前にユーザーに通知するか、互換性のためにファイルを作成することをお勧めします(特定の機能のみを使用する場合):
//プラグインファイルに含める
if version_compare phpversion '5.1.0' '<' )) {
requery_once '%PluginName%_compatibility.php'
}

//ファイルの内容
if function_exists 'array_diff_key' )) {
関数 array_diff_key
{
$ args = func_get_args ;
return array_flip call_user_func_array 'array_diff'
array_map 'array_flip' $ args ;
}
}


車輪の再発明をしないために-PEAR PHP_Compatパッケージをご覧になることをお勧めします。

古いバージョンのWordpressのサポートも必要になる可能性があります。
//プラグインファイルに含める
if version_compare get_bloginfo 'version' '2.6.0' '<' {
requery_once '%PluginName%_compatibility.php'
}


結論


まとめます。

プラグインディレクトリは次のようになります。

\plugin-name
|--\languages
|--\library
|--\javascript
|--\css
|-- plugin-name.php
|-- plugin-name_admin.php
|-- plugin-name_front.php
|-- plugin-name_settings.php
|-- plugin-name_compatibility.php
|-- readme.txt


PS追加するものがある場合、またはトピックに関する有用なリソースへのリンクがある場合-あなたはコメントで歓迎されています...

材料の準備では、次のリソースが使用されました。

コードの構文を強調するには、 highlight.hohli.comリソースを使用します。

Source: https://habr.com/ru/post/J48998/


All Articles