<?php use Automattic\Jetpack\Constants; if (!defined('ABSPATH')) { exit; } abstract class WC_Deprecated_Hooks { protected $deprecated_hooks = array(); protected $deprecated_version = array(); public function __construct() { $new_hooks = array_keys($this->deprecated_hooks); array_walk($new_hooks, array($this, 'hook_in')); } public abstract function hook_in($hook_name); public function get_old_hooks($new_hook) { $old_hooks = isset($this->deprecated_hooks[$new_hook]) ? $this->deprecated_hooks[$new_hook] : array(); $old_hooks = is_array($old_hooks) ? $old_hooks : array($old_hooks); return $old_hooks; } public function maybe_handle_deprecated_hook() { $new_hook = current_filter(); $old_hooks = $this->get_old_hooks($new_hook); $new_callback_args = func_get_args(); $return_value = $new_callback_args[0]; foreach ($old_hooks as $old_hook) { $return_value = $this->handle_deprecated_hook($new_hook, $old_hook, $new_callback_args, $return_value); } return $return_value; } public abstract function handle_deprecated_hook($new_hook, $old_hook, $new_callback_args, $return_value); protected function get_deprecated_version($old_hook) { return !empty($this->deprecated_version[$old_hook]) ? $this->deprecated_version[$old_hook] : Constants::get_constant('WC_VERSION'); } protected function display_notice($old_hook, $new_hook) { wc_deprecated_hook(esc_html($old_hook), esc_html($this->get_deprecated_version($old_hook)), esc_html($new_hook)); } protected abstract function trigger_hook($old_hook, $new_callback_args); }