[ Index ]

PHP Cross Reference of WordPress Trunk (Updated Daily)

Search

title

Body

[close]

/wp-includes/ai-client/adapters/ -> class-wp-ai-client-event-dispatcher.php (source)

   1  <?php
   2  /**
   3   * WP AI Client: WP_AI_Client_Event_Dispatcher class
   4   *
   5   * @package WordPress
   6   * @subpackage AI
   7   * @since 7.0.0
   8   */
   9  
  10  use WordPress\AiClientDependencies\Psr\EventDispatcher\EventDispatcherInterface;
  11  
  12  /**
  13   * WordPress-specific PSR-14 event dispatcher for the AI Client.
  14   *
  15   * Bridges PSR-14 events to WordPress action hooks, enabling plugins to hook
  16   * into AI client lifecycle events.
  17   *
  18   * @since 7.0.0
  19   * @internal Intended only to wire up the PHP AI Client SDK to WordPress's hook system.
  20   * @access private
  21   */
  22  class WP_AI_Client_Event_Dispatcher implements EventDispatcherInterface {
  23  
  24      /**
  25       * Dispatches an event to WordPress action hooks.
  26       *
  27       * Converts the event class name to a WordPress action hook name and fires it.
  28       * For example, BeforeGenerateResultEvent becomes wp_ai_client_before_generate_result.
  29       *
  30       * @since 7.0.0
  31       *
  32       * @param object $event The event object to dispatch.
  33       * @return object The same event object, potentially modified by listeners.
  34       */
  35  	public function dispatch( object $event ): object {
  36          $event_name = $this->get_hook_name_portion_for_event( $event );
  37  
  38          /**
  39           * Fires when an AI client event is dispatched.
  40           *
  41           * The dynamic portion of the hook name, `$event_name`, refers to the
  42           * snake_case version of the event class name, without the `_event` suffix.
  43           *
  44           * For example, an event class named `BeforeGenerateResultEvent` will fire the
  45           * `wp_ai_client_before_generate_result` action hook.
  46           *
  47           * In practice, the available action hook names are:
  48           *
  49           * - wp_ai_client_before_generate_result
  50           * - wp_ai_client_after_generate_result
  51           * - wp_ai_client_before_generate_embedding
  52           * - wp_ai_client_after_generate_embedding
  53           *
  54           * @since 7.0.0
  55           * @since 7.2.0 Added the `wp_ai_client_before_generate_embedding` and
  56           *              `wp_ai_client_after_generate_embedding` action hooks.
  57           *
  58           * @param object $event The event object.
  59           */
  60          do_action( "wp_ai_client_{$event_name}", $event );
  61  
  62          return $event;
  63      }
  64  
  65      /**
  66       * Converts an event object class name to a WordPress action hook name portion.
  67       *
  68       * @since 7.0.0
  69       *
  70       * @param object $event The event object.
  71       * @return string The hook name portion derived from the event class name.
  72       */
  73  	private function get_hook_name_portion_for_event( object $event ): string {
  74          $class_name = get_class( $event );
  75          $pos        = strrpos( $class_name, '\\' );
  76          $short_name = false !== $pos ? substr( $class_name, $pos + 1 ) : $class_name;
  77  
  78          // Convert PascalCase to snake_case.
  79          $snake_case = strtolower( (string) preg_replace( '/([a-z])([A-Z])/', '$1_$2', $short_name ) );
  80  
  81          // Strip '_event' suffix if present.
  82          if ( str_ends_with( $snake_case, '_event' ) ) {
  83              $snake_case = (string) substr( $snake_case, 0, -6 );
  84          }
  85  
  86          return $snake_case;
  87      }
  88  }


Generated : Fri Oct 16 08:20:34 2026 Cross-referenced by PHPXref