カスタムアクティビティログエントリーを出力する

このガイドでは、プラグインまたはサイトのコードからJetpack Activityログに独自のカスタムエントリーを追加する方法を説明します。

Jetpack Activityで作成されたログエントリは、このAPIを使用して、投稿の公開やプラグインの更新など、他のイベントと併せて表示されます。独自のアクティビティログや監査ログのUIを構築せずに、サイト管理者にとって意味のあるイベントを表示したい場合に便利です。これは、カスタムコードの記述を伴う開発者向けのガイドです。

要件

  • Jetpackプラグインのバージョン15.9以上、または
  • Jetpack Syncパッケージのバージョン4.38以上(プラグインでSyncを直接必要とする場合)。
  • Syncの読み込み時に、jp_act_log_eventカスタム投稿タイプは自動的に登録されます。自分で登録する必要はありません。
  • 呼び出し元にはmanage_optionsの権限が必要です(通常はサイト管理者です)。

アクティビティログエントリーを追加する方法

カスタムアクティビティログエントリーは、主に次の3つの方法で作成できます。

  • ヘルパークラスを使用してPHPから作成する(推奨)。
  • RESTクライアントから作成する。
  • 直接wp_insert_post()を使用する。

PHPからエントリーを追加する(推奨)

Activity_Log_Eventヘルパークラスを使用して、エントリーを検証・作成します。

use Automattic\Jetpack\Sync\Activity_Log_Event;

  $post_id = Activity_Log_Event::create( array(
      'title'    => 'Membership sync failed',
      'content'  => 'Remote API returned 401. Retry queued.',
      'source'   => 'my-plugin',
      'severity' => 'error',
  ) );

  if ( false === $post_id ) {

      // Validation failed (missing/invalid title or content, bad severity).

  }

成功すると、create()はjp_act_log_eventを返します。
検証に失敗した場合は、falseを返します。

ヘルパーの使用を推奨します。検証を処理し、アクティビティログエントリーのデータ形式を統一できるためです。

RESTクライアントからエントリーを追加する

WordPress REST APIを使用してエントリーを作成することもできます。

エンドポイント

POST /wp-json/wp/v2/activity-log-events
Content-Type: application/json
Authorization: OAuth token with admin scope

リクエスト本文

{
  "title": "Membership sync failed",
  "content": "Remote API returned 401. Retry queued.",
  "source": "my-plugin",
  "severity": "error"
}

認証済みユーザーにはmanage_options権限が必要です。作成されたアクティビティログエントリーは、そのユーザーが実行者として記録されます。

以下を使用してエントリを追加しますwp_insert_post()

イベントをjp_act_log_event投稿として直接作成することもできます。post_contentフィールドには、他の場所で使用されるものと同じプロパティを持つJSONエンコード済みのペイロードを指定します。

wp_insert_post(
    array(
        'post_type'   => 'jp_act_log_event',
        'post_status' => 'publish',
        'post_title'  => 'Cache flushed',
        'post_content'=> wp_json_encode(
            array(
                'title'    => 'Cache flushed',
                'content'  => 'Manual cache flush during incident response.',
                'source'   => 'my-snippet',
                'severity' => 'info',
            )
        ),
    )
);

これらの値については、wp_insert_post()を使用する際に、ご自身で検証する責任があります。無効なエントリーを避けるため、可能な限りActivity_Log_Eventヘルパーを使用してください。

フィールド定義

各アクティビティログイベントでは、次のプロパティを使用できます。

  • タイトル
    • 型:文字列
    • 最大長:200文字
    • プレーンテキストのみ
    • 必須
  • 内容
    • 型:文字列
    • 最大長:5,000文字
    • プレーンテキストのみ
    • 必須
  • ソース
    • 型:文字列
    • 最大長:100文字
    • 元のツールを識別する文字列(例:my-plugin)。
    • デフォルト:Custom entry
    • 任意
  • 重要度
    • 型:列挙型
    • 使用できる値:info、 success、 warning、 error
    • デフォルト:info
    • 任意

サイト所有者に表示される内容

カスタムエントリーは、サイトのアクティビティログに通常のイベントとして表示され、カスタムイベントとしてラベル付けされます。アクティビティログでは、次のように表示されます。

  • 「タイトル」はイベントの見出しとして使用されます。
  • 「実行者」は、WordPressユーザーのうち、API呼び出しを行ったユーザーです(例:PHPまたはREST経由)。

制限事項と動作

このAPIで作成されたカスタムアクティビティログエントリーには、次の動作上の特徴があります。

  • 編集不可
    エントリーは一度だけ書き込めます。jp_act_log_eventカスタム投稿タイプでは、すべてのedit_*権限およびdelete_*権限が拒否されます。
  • 自動的にパブリサイズされない
    エントリーは、サードパーティ製プラグインがカスタム投稿タイプにパブリサイズ機能を追加した場合でも、Jetpack Social経由で共有されません。
  • サイトマップに含まれない
    このjp_act_log_event投稿タイプは、Jetpackサイトマップから明示的に除外されています。
  • フロントエンドでは非公開
    この投稿タイプでは次を使用します:
    • public => false
    • publicly_queryable => false
    • exclude_from_search => true
    これにより、アクティビティログによるアクセスと表示を可能にしながら、エントリーをフロントエンドのクエリや検索結果から除外します。

Was this article helpful?