<?php
declare(strict_types=1);
namespace ConfManager\Traits;

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}


/**
 * WordPressフック登録を提供するトレイト
 *
 * @since 1.0.0
 */
trait HasHooks {

	/**
	 * フック登録メソッド（サブクラスで実装する）
	 */
	abstract protected function register_hooks(): void;

	/**
	 * アクションフックを登録する
	 *
	 * @param string   $hook     フック名
	 * @param callable $callback コールバック
	 * @param int      $priority 優先度
	 * @param int      $args     引数の数
	 */
	protected function add_action( string $hook, callable $callback, int $priority = 10, int $args = 1 ): void {
		add_action( $hook, $callback, $priority, $args );
	}

	/**
	 * フィルターフックを登録する
	 *
	 * @param string   $hook     フック名
	 * @param callable $callback コールバック
	 * @param int      $priority 優先度
	 * @param int      $args     引数の数
	 */
	protected function add_filter( string $hook, callable $callback, int $priority = 10, int $args = 1 ): void {
		add_filter( $hook, $callback, $priority, $args );
	}
}
