WordPress.org でプラグインをホストしている場合、すべてのアップデートを WordPress が代行します。その為、この文書内の手順はディレクトリに提出されたすべてのプラグインで 禁止 されています。ここでホストされているプラグインで、この手順が含まれていることが判明すると、プラグインはクローズされ、開発者は自分のプラグインを復活させる為に、この手順を削除する必要があります。
私たちは、開発者の教育のため、また世界の WordPress コミュニティがより安全であることを保証するために、ここにドキュメント化することにしました。
常に適切なフォルダー名を使用する
コードに入る前に、WordPress.org からのアップデートによってプラグインが上書きされないようにする、絶対的な最善の方法は、良い名前を使うことだと断言しなければなりません。あなたの会社の為のプラグインを作るなら、companyname-function-plugin
のようなフォルダー名をつけてください — たとえば、あなたが FaceRange に勤務していて、ステータスのプラグインを作っているのであれば、facerange-status-plugin
という名前にできます。
使用禁止の単語「プラグイン」を使用しているため、私たちはそれを受け入れないだけでなく、プラグイン・チームは、プラグイン所有者が 法的に FaceRange を代表していることを検証します。
Update URI
WordPress 5.8から、WordPress.org の API がアップデートをチェックする方法に機能を追加し、新しいヘッダー「Update URI」を使用することでブロックできるようにしました。
たとえば、自分のサイト用に作ったプラグインがあり、my-plugin
というフォルダー名をつけたとしましょう。これは一般的なフォルダー名で、他の人が使う可能性が高い名前です。また、一般的な名前であるため、私たちのシステムでブロックできません。
Update URI ヘッダーはプラグインヘッダーに追加できます。メインのプラグインファイルで、このセクションを探してください:
/**
* Plugin Name: My Cool Plugin
* Plugin URI: https://example.com/my-plugin/
* Description: My Plugin does cool things.
* Version: 1.0
* Author: the team
* Author URI: https://example.com/
* Text Domain: my-plugin
* License: GPLv2
* License URI: https://opensource.org/licenses/gpl-2.0.php
*/
これを適用するには、Update URI という新しいヘッダーを追加し、非 WordPress.org の URI を値に入れます:
* Update URI: https://example.com/my-updater/
また、必要なら Update URI: false
に設定できます。worpress.org/plugins
または w.org/plugins
を含まない限り、保護されます。
アップデートのフィルタリング
WordPress の古いバージョンでサポートされているもう一つの方法は、外部 API リクエストをフィルタリングし、あなたのプラグインへのリクエストをすべて破棄することです。
このコードは Mark Jaquith によって書かれたもので、あなた自身のプラグインに追加できます:
function example_hidden_plugin_12345( $r, $url ) {
if ( 0 !== strpos( $url, 'https://api.wordpress.org/plugins/update-check' ) )
return $r; // Not a plugin update request. Bail immediately.
$plugins = unserialize( $r['body']['plugins'] );
unset( $plugins->plugins[ plugin_basename( __FILE__ ) ] );
unset( $plugins->active[ array_search( plugin_basename( __FILE__ ), $plugins->active ) ] );
$r['body']['plugins'] = serialize( $plugins );
return $r;
}
add_filter( 'http_request_args', 'example_hidden_plugin_12345', 5, 2 );
これは、WordPress.org api からのアップデートリクエストが、このプラグイン のプラグインフォルダーとファイル名に一致するか否かをチェックするものです。一致すれば、そのプラグインは、アップデートをチェックするプラグインのリストから削除されます。