申請前に気をつけるポイント
レビューで指摘されないように注意するポイントとしては、以下になります。- パスはハードコードせず、
__FILE__
などを使って取得する - Sanitize, Escape, Validateはしておく
- 関数名やクラス名は固有のものを使う
パスはハードコードせず、__FILE__
などを使って取得する
WordPressのディレクトリ構造はユーザーが好きなように調整できるため、プラグインを使うユーザーも構造をデフォルトのものとは違う設定にしている可能性があります。その場合にパスをハードコードしていると、プラグインが予期しない動作をしたり、動かないといったことになりかねません。そういった事態を防ぐため、パスは plugin_dir_path(__FILE__)
のように__FILE__
+ プラグインのパスを取得するWP関数を使用するなどして、プラグインまでのパスをハードコードせずに取得するようにしましょう。プラグインや特定のディレクトリまでのパスの取得方法の詳細はこちらに詳細が記載されています。Sanitize, Escape, Validateはしておく
$_GET
や $_POST
などユーザーからの入力値には、悪質なデータや想定していないデータが入ってくる可能性があり、システムに思わぬ影響を与える可能性があります。そのためこういったユーザーからの入力値を取得して使う場合には、サニタイズ、エスケープ、バリデートを行っておきましょう。こちらのページに、WordPressが用意しているエスケープ関数や、その他データを安全に扱う方法が記載してあるので、目を通しておくことをおすすめします。
関数名やクラス名は固有のものを使う
関数名やクラス名に被りやすいもの(「wp_」から始まるもの、固有の接頭辞がついていないものなど)を使っていると、他のプラグインと名前が被りやすくなってしまい、万が一被った時にはプラグインが想定通りに動作しなくなってしまう可能性があります。これを防ぐためには、関数名なら自分のプラグイン名を各英単語の最初のアルファベットを使って省略したものを接頭辞につけ、クラス名なら接頭辞をつけるか、そのままプラグイン名をクラス名にしてしまうことがおすすめです。例:プラグイン名が「Easy Custom Post Types」の場合関数名:ecpt_save_post など
クラス名:class Easy_Custom_Post_Types {}, class ECPT_Admin {} などただし接頭辞は2文字以下だと再度指摘される可能性があるので、3文字以上にするようにしましょう。
メール本文 & 日本語訳
以上でレビューで指摘されないための注意点の紹介は終了ですが、ここからはレビューで指摘される実際の英文の内容・日本語訳を紹介していきます。Calling file locations poorly
ファイルの呼び出し方が適切でないので直してくださいという指摘です。以下は指摘内容を一部抜粋したものになります。メールの内容
When you hardcode in paths like wp-content or your plugin folder name, or assume that everyone has WordPress in the root of their domain, you cause anyone using 'Giving WordPress it's own directory' (a VERY common setup) to break.
In addition, WordPress allows users to change the name of wp-content, so you would break anyone who chooses to do so.
https://developer.wordpress.org/plugins/plugin-basics/determining-plugin-and-content-directories/
Remember to make use of the FILE variable, in order than your plugin function properly in the real world.
日本語訳
wp-contentやあなたのプラグインフォルダ名のようなパスをハードコードしたり、誰もが自分のドメインのルートにWordPressを置いていると仮定したりすると、設定に「Giving WordPress it's own directory」(非常に一般的な設定)を使っている人のWordPressサイトを壊してしまう原因となります。さらに、WordPressはユーザーがwp-contentの名前を変更することを許可しているので、そうすることにした人のWordPressサイトを壊してしまうことになるでしょう。https://developer.wordpress.org/plugins/plugin-basics/determining-plugin-and-content-directories/(日本語Codexページ:プラグイン・コンテンツディレクトリを特定する)プラグインが現実世界で適切に機能するためには、FILE変数を使用することを忘れないでください。
Data Must be Sanitized, Escaped, and Validated
データがサニタイズ、エスケープ、バリデートされていないのでするように修正してくださいという内容です。$_POST
や $_GET
の内容を画面に表示するときにエスケープされていない時などに、指摘されるようです。以下が指摘内容の一部抜粋です。When you include POST/GET/REQUEST/FILE calls in your plugin, it's important to sanitize, validate, and escape them.
To help you with this, WordPress comes with a number of sanitization and escaping functions. You can read about those here:
https://developer.wordpress.org/plugins/security/securing-input/
https://developer.wordpress.org/plugins/security/securing-output/
An easy mantra here is this:
Sanitize early
Escape Late
Always Validate
Remember you need to use realpath() with PHP to ensure protection from directory traversal - https://www.php.net/manual/en/function.realpath.php
日本語訳
プラグインにPOST・GET・REQUEST・FILE呼び出しを含む場合、その呼び出すデータをサニタイズし、バリデートし、エスケープすることが重要です。これを助けるために、WordPressには多くのサニタイズとエスケープ関数が用意されています。それらの関数について知るには、こちらを参照してください。https://developer.wordpress.org/plugins/security/securing-input/https://developer.wordpress.org/plugins/security/securing-output/ここでの簡単なマントラは以下の通りです。早めにサニタイズする
最後の方でエスケープする
常にバリデート(検証)するディレクトリトラバーサルからの保護を確実にするには、PHPでrealpath()を使用する必要があることを覚えておいてください。
https://www.php.net/manual/en/function.realpath.php
Generic function (and/or define) names
関数に一般的な名前をつけており、他のプラグインと関数名がかぶる可能性がある際に指摘される内容です。以下が指摘内容の一部抜粋になります。All plugins must have unique function names, namespaces, defines, and class names.
This prevents your plugin from conflicting with other plugins or themes. We need you to update your plugin to use more unique and distinct names.
A good way to do this is with a prefix. For example, if your plugin is called "Easy Custom Post Types" then you could use names like these:
function ecpt_save_post()
define( ‘ECPT_LICENSE’, true );
class ECPT_Admin{}
namespace EasyCustomPostTypes;
You also need to avoid the use of __ (double underscores), wp_ , or _ (single underscore) as a prefix.
Those are reserved for WordPress itself. You can use them inside your classes, but not as stand-alone function.
日本語訳
全てのプラグインは一意な関数名、名前空間、定義、クラス名を持たなければなりません。これにより、あなたのプラグインが他のプラグインやテーマと競合するのを防ぐことができます。より一意で他とはっきり異なった名前を使うように、プラグインを更新してください。これを行う良い方法は、プレフィックス(接頭辞)をつけることです。
たとえば、あなたのプラグインが「Easy Custom Post Types」という名前なら、以下のような名前を使うことができます。function ecpt_save_post()
define( ‘ECPT_LICENSE’, true );
class ECPT_Admin{}
namespace EasyCustomPostTypes;またプレフィックスとして、 「 __ 」(ダブルアンダースコア)、「 wp_ 」、「 _ 」(シングルアンダースコア)の使用も避ける避ける必要があります。これらはWordPress自体のために予約されたものです。クラスの中で使用することはできますが、単体の関数としては使用できません。