運用・保守マニュアル (Operations Guide)
本ドキュメントは、システム管理者向けの運用、トラブルシューティング、および手動対応手順をまとめたものです。
1. トラブルシューティング
Q. Storeでサブスク更新したのにMainに反映されない
原因1: 通信エラー
StoreからMainへのAPIリクエストが失敗している可能性があります。
* 確認方法: Storeサイトの wp-content/debug.log (有効化されている場合) を確認してください。「SLM Sync Error」という文字列で検索します。
* 対応: Mainサイトがダウンしていないか、FWで遮断されていないか確認してください。
原因2: シークレットキーの不一致
* 確認方法: 両サイトの wp-config.php を開き、定義されているKEYが完全に一致しているか確認してください。スペースなどが混入していないか注意が必要です。
原因3: ユーザー名の不一致 * 確認方法: Storeサイトの購入ユーザーの「ユーザー名 (User Login)」と、Mainサイトのユーザー名が一致しているか確認してください。メールアドレスではなく ユーザー名 で紐付けを行っています。
2. 管理・モニタリング機能
Active Sites (稼働サイト一覧・分析)
Storeサイトの管理画面サイドメニューにある [Active Sites] から、現在ライセンスが有効化されているドメインの一覧と、稼働状況の分析ダッシュボードを確認できます。
1. Analytics Dashboard
ページ上部に表示されるダッシュボードです。 * Total Sites: 有効な全サイト数。 * New Today: 本日新しく有効化(再有効化含む)されたサイト数。 * Filter: 期間(7日〜365日)および製品名での絞り込みが可能です。 * Chart: 期間内の「日次アクティベーション数(右軸)」と「累計アクティブ数(左軸)」の推移を表示します。
2. サイト一覧リスト
- これは
slm_siteというカスタム投稿タイプで管理されています。 - 製品名:
cross-poster-proのようなスラッグは、表示上Cross Poster Proのように整形されます(内部データは変更されません)。 - Installed: 初回有効化日。
- Last Checked: 最後のライセンスチェック(日次Ping)日時。
- 操作: 必要に応じて手動で削除(Trash)することで、強制的にライセンスを無効化できます。
3. 仕様解説: 埋め込みライセンスキー
本システムでは、ユーザー体験向上のため 「埋め込みライセンスキー (Embedded License Key)」 機能を実装しています。
- 動的Zip生成: ユーザーがダウンロードボタンを押すと、サーバー上でオリジナルのZipファイルをコピーします。
- キー注入: コピーしたZip内に
license-key.phpというファイルを追加し、そこにユーザー固有のライセンスキーを書き込みます。 - 自動認証: クライアントプラグインは、有効化直後にこのファイルを探し、存在すれば自動的にライセンス認証APIを叩きます。
注意点:
* この処理のため、Storeサーバーでは ZipArchive クラス(PHP拡張)が必須です。
* /slm/v1/download エンドポイントを経由しない直接ダウンロード(メディアライブラリからのDLなど)では、キーは埋め込まれません。
4. 手動リカバリー手順 (Manual Fix)
自動連携が失敗した場合、Mainサイトのデータベースを直接編集することでステータスを修正できます。
データベース/ユーザーメタの編集
Mainサイトの管理画面、またはphpMyAdmin等が使えない場合でも、管理画面の「ユーザー編集」ページからは見えない隠しフィールドを更新する必要があります。
(※ Store Sync Receiver プラグインには現時点で管理画面UIはありません)
方法A: データベース直接編集
wp_usermeta テーブルを編集します。
- 対象ユーザーの
IDを特定します。 - 以下のクエリを実行/確認します。
-- ステータスをActiveにする
UPDATE wp_usermeta SET meta_value = 'active'
WHERE user_id = {USER_ID} AND meta_key = 'storesync_license_cross-poster-pro';
-- 有効期限を更新する (例: 2026年12月31日)
UPDATE wp_usermeta SET meta_value = '2026-12-31 23:59:59'
WHERE user_id = {USER_ID} AND meta_key = 'storesync_license_cross-poster-pro_expires_at';
/* 注意: プラグインのバージョンによって meta_key は storesync_license_{slug} (配列) か個別キーか異なります。
現在の v1.1.0 実装では serialized array で保存されています! */
【重要】現在の実装 (v1.1.0) での正しい修正方法
storesync_license_cross-poster-pro というキーに、以下の配列がシリアライズされて保存されています。
array(
'status' => 'active',
'expires_at' => '2025-12-31 00:00:00',
'updated_at' => '...'
)
functions.php 等に一時的に貼って実行することを推奨します。
方法B: 緊急用ヘルパースニペット
// 指定ユーザーのライセンスを強制的に有効化する
$user = get_user_by( 'login', 'ターゲットユーザー名' );
if ( $user ) {
update_user_meta( $user->ID, 'storesync_license_cross-poster-pro', array(
'status' => 'active',
'expires_at' => '2026-12-31 23:59:59',
'updated_at' => current_time( 'mysql' )
));
echo "Fixed user license.";
}
5. 全件再同期 (Future Work)
現在、Storeサイト全ユーザーのステータスを一括でMainサイトに送信する機能はありません。
将来的にデータの不整合が大きくなった場合は、Software License Manager に「全件同期バッチ処理」を追加開発することを検討してください。