重要なお知らせ
ソフトウェアライセンスAPIアップデーターを使用している場合、このドキュメントは不要です。このドキュメントを参照するのは、アップデーターを使用していない場合、または参考のためだけです:
WordPressプラグインの自動アップグレードを統合する方法に関するドキュメントをご覧ください。
WordPressテーマの自動アップグレードを統合する方法に関するドキュメントをご覧ください。
アクティブ化
ソフトウェアライセンスでは、ライセンスキーが完全に利用されるためには、アクティブ化されている必要があります。これは次のいずれかの方法で行われます:
- サイト管理者が、ダウンロード → ライセンス ページからライセンスの「アクティブ化」リンクを手動でクリックする
- 購入者が、APIを使用してアクティブ化をトリガーするプラグイン/テーマ/ソフトウェア内のシステムを介して、ライセンスをリモートでアクティブ化する
注意:サンプルプラグインおよびこのドキュメントに示されている実装は、あくまでサンプルです。ソフトウェアライセンスの最良の実装では、これらのサンプルを取り込み、既存のプラグインの設定ページにシームレスに統合します。
このドキュメントでは、WordPressプラグインに追加されたシステムを介してライセンスをリモートでアクティブ化する方法を説明します。この例で示しているサンプルコードは、拡張機能の購入後にダウンロード可能なサンプルプラグインおよびテーマに含まれているものと全く同じコードです。
ライセンスをリモートでアクティブ化するには、主に2つのコンポーネントがあります:
- ライセンスキーをデータ(テーマまたはプラグインのオプション)に保存する
- 保存されたライセンスキーをAPI経由でストアウェブサイトに送信し、検証およびアクティブ化する
ライセンスがリモートでアクティブ化されると、サイトのダッシュボードにあるライセンスのステータスが「非アクティブ」(デフォルトの状態)から「アクティブ」に更新されます。
まず、ライセンスを保存するための簡単なオプションページを作成してみましょう。
このコードは、プラグインメニューに「プラグインライセンス」というサブメニュー項目を設定します。この例ではプラグインページを使用していますが、コードはテーマでも同様です。
コードの先頭には2行あります:
最初の行はライセンス自体、2番目の行はライセンスのステータスです。ライセンスをアクティブ化した後、ステータスを(ローカルサイトで)「アクティブ」に変更します。これにより、ライセンスがまだアクティブ化されていない場合は「ライセンスのアクティブ化」ボタンを表示し、アクティブ化されている場合は非表示にします。下のスクリーンショットを参照してください:

ここでの考え方は、まずライセンスキーを入力して「変更を保存」をクリックすると、ライセンスキーがプラグイン/テーマのオプションに保存されるということです。オプションが保存されたら、「ライセンスのアクティブ化」ボタンをクリックしてAPI呼び出しをトリガーします。
アクティブ化ボタンは、タイプが「submit」で、保存ボタンとは異なるname属性を持つ単純な入力フィールドです。name属性が異なる必要があるのは、アクティブ化ライセンスボタンがクリックされたことを認識できるようにするためです。
ライセンスを有効化するために、「アクティベート」ボタンがクリックされたタイミングを「監視」するだけで済みます。これを実現するには、「admin_init」フックにフックされた関数を設定します。方法は以下の通りです。
「ライセンスを有効化」ボタンをクリックした後、すべてが正常に実行されると、アクティベートボタンは「active」という単語に置き換えられ、ライセンスステータスはEasy Digital Downloadsストアのダッシュボードで新しく有効化された状態を反映します。ライセンスキーの有効化中にエラーが発生した場合、ページはリロードされ、URLにエラーとメッセージのパラメータが追加されます。その後、admin_noticesフック(またはその他の適切な方法)を使用して、顧客にエラーを表示できます。
たとえば、顧客が無効なライセンスキーを入力した場合、エラーメッセージが表示されます。

確認
Software Licensingを使用すると、いつでもライセンスキーが有効かどうかを簡単に確認できます。これは、テーマまたはプラグインの一部の機能を有効なライセンスキーを持つユーザーのみに制限するために行う場合があります。
ライセンスキーの有効性を確認するのは非常に簡単です。必要なのは、いくつかの特定のパラメータを指定してストアのウェブサイトにリモートリクエストを実行することだけです。以下の関数を参照してください。
function edd_sample_theme_check_license() {
$store_url = 'https://yoursite.com';
$item_name = 'Your Item Name';
$license = '834bbb2d27c02eb1ac11f4ce6ffa20bb';
$api_params = array(
'edd_action' => 'check_license',
'license' => $license,
'item_name' => urlencode( $item_name ),
'url' => home_url(),
'environment' => function_exists( 'wp_get_environment_type' ) ? wp_get_environment_type() : 'production',
);
$response = wp_remote_post( $store_url, array( 'body' => $api_params, 'timeout' => 15, 'sslverify' => true ) );
if ( is_wp_error( $response ) ) {
return false;
}
$license_data = json_decode( wp_remote_retrieve_body( $response ) );
if( $license_data->license == 'valid' ) {
echo 'valid';
exit;
// this license is still valid
} else {
echo 'invalid';
exit;
// this license is no longer valid
}
}
注意: ライセンスキーの有効性を継続的に確認する場合(たとえば、ライセンスが期限切れになったときにプラグインまたはテーマの使用をブロックするため)、ページ読み込みごとにリクエストが実行されないように、チェックの結果をキャッシュする必要があります。Transients APIはAPIレスポンスをキャッシュするための優れた方法です。
非アクティブ化
Software Licensingを使用すると、ライセンスが有効化された後、リモートで無効化することもできます(v1.3以降)。通常、ライセンスを無効化する理由は、アクティベーション制限に達したときに、ライセンスを別のサイトでアクティベートできるようにするためです。
無効化プロセスは、アクティベーションプロセスとほぼ同じです。リモートリクエストを実行し、無効化するライセンスキーの詳細を送信します。リモートリクエストは次のように行われます。
// data to send in our API request
$api_params = array(
'edd_action' => 'deactivate_license',
'license' => '2ec66bae356be570236531ccba06a45b',
'item_name' => 'Sample Plugin', // the name of our product in EDD
'url' => home_url(),
'environment' => function_exists( 'wp_get_environment_type' ) ? wp_get_environment_type() : 'production',
);
// Send the remote request
$response = wp_remote_post( 'https://yoursite.com', array( 'body' => $api_params, 'timeout' => 15, 'sslverify' => true ) );
$response 変数は、無効化リクエストが成功したかどうかを示すJSONオブジェクトになります。成功した場合、レスポンスは次のようになります。
注意:他のJSONレスポンスが日付時刻であるのに対し、この日付/時刻はタイムスタンプです。
{
"success": true,
"license": "deactivated",
"item_name": "Sample Plugin",
"expires": 1556150399,
"payment_id": 2444,
"customer_name": "John Doe",
"customer_email": "[email protected]"
}
ライセンスが無効化に失敗した場合、レスポンスは次のようになります。
{
"success": false,
"license": "failed",
"item_name": "Sample Plugin",
"expires": 1556150399,
"payment_id": 2444,
"customer_name": "John Doe",
"customer_email": "[email protected]"
}
ライセンスが正常に無効化されると、Downloads → LicensesのSite Count 列がデクリメントされ、ログにエントリが記録されるため、管理者はライセンスがどこから無効化されたかを確認できます。
