東日本橋の制作・開発会社 プレスマンのスタッフブログ

PRESSMAN*Tech

Tech & Tips WordPress

【WordPress】公式プラグイン申請時に指摘された内容まとめPart1

WordPressを公式プラグインとして公開するためには、WordPress公式に申請をして承認される必要があります。 プラグイン申請をすると、WordPress側のレビュワーがコードレビューを行い、問題があればメールで指摘内容を送ってきてくれます。その指摘にそって修正していき、承認されれば晴れて公式プラグインとして公開となります。 しかし、場合によっては次々に修正点が見つかり、レビューと修正が一度では終わらず、なかなか承認してもらえない時があります。 そこで今回は、弊社でプラグイン申請をした際によく指摘された内容の対策を紹介し、実際のメール内容を日本語訳とともに紹介していこうと思います。 この記事の続きの第2弾は以下から↓

申請前に気をつけるポイント

レビューで指摘されないように注意するポイントとしては、以下になります。
  • パスはハードコードせず、__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自体のために予約されたものです。クラスの中で使用することはできますが、単体の関数としては使用できません。

おわりに

これまでのレビュー指摘で特に多かったものについて今回取り上げてみました。 レビュー指摘の英語の翻訳などは若干面倒だと思うので、この記事でその手間が少しでも減らせれば幸いです。 そのほかにも申請時には様々な指摘が返ってくるのですが、今回は長くなってしまったため、次回そのほかの指摘についても解説していきたいと思います。
この記事をシェアする:

-Tech & Tips, WordPress

Copyright© PRESSMAN*Tech , 2020 All Rights Reserved Powered by STINGER.