class-wc-deprecated-action-hooks.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. <?php
  2. /**
  3. * Deprecated action hooks
  4. *
  5. * @package WooCommerce\Abstracts
  6. * @since 3.0.0
  7. * @version 3.3.0
  8. */
  9. defined( 'ABSPATH' ) || exit;
  10. /**
  11. * Handles deprecation notices and triggering of legacy action hooks.
  12. */
  13. class WC_Deprecated_Action_Hooks extends WC_Deprecated_Hooks {
  14. /**
  15. * Array of deprecated hooks we need to handle. Format of 'new' => 'old'.
  16. *
  17. * @var array
  18. */
  19. protected $deprecated_hooks = array(
  20. 'woocommerce_new_order_item' => array(
  21. 'woocommerce_order_add_shipping',
  22. 'woocommerce_order_add_coupon',
  23. 'woocommerce_order_add_tax',
  24. 'woocommerce_order_add_fee',
  25. 'woocommerce_add_shipping_order_item',
  26. 'woocommerce_add_order_item_meta',
  27. 'woocommerce_add_order_fee_meta',
  28. ),
  29. 'woocommerce_update_order_item' => array(
  30. 'woocommerce_order_edit_product',
  31. 'woocommerce_order_update_coupon',
  32. 'woocommerce_order_update_shipping',
  33. 'woocommerce_order_update_fee',
  34. 'woocommerce_order_update_tax',
  35. ),
  36. 'woocommerce_new_payment_token' => 'woocommerce_payment_token_created',
  37. 'woocommerce_new_product_variation' => 'woocommerce_create_product_variation',
  38. 'woocommerce_order_details_after_order_table_items' => 'woocommerce_order_items_table',
  39. 'woocommerce_settings_advanced_page_options' => array(
  40. 'woocommerce_settings_checkout_page_options',
  41. 'woocommerce_settings_account_page_options',
  42. ),
  43. 'woocommerce_settings_advanced_page_options_end' => array(
  44. 'woocommerce_settings_checkout_page_options_end',
  45. 'woocommerce_settings_account_page_options_end',
  46. ),
  47. 'woocommerce_settings_advanced_page_options_after' => array(
  48. 'woocommerce_settings_checkout_page_options_after',
  49. 'woocommerce_settings_account_page_options_after',
  50. ),
  51. );
  52. /**
  53. * Array of versions on each hook has been deprecated.
  54. *
  55. * @var array
  56. */
  57. protected $deprecated_version = array(
  58. 'woocommerce_order_add_shipping' => '3.0.0',
  59. 'woocommerce_order_add_coupon' => '3.0.0',
  60. 'woocommerce_order_add_tax' => '3.0.0',
  61. 'woocommerce_order_add_fee' => '3.0.0',
  62. 'woocommerce_add_shipping_order_item' => '3.0.0',
  63. 'woocommerce_add_order_item_meta' => '3.0.0',
  64. 'woocommerce_add_order_fee_meta' => '3.0.0',
  65. 'woocommerce_order_edit_product' => '3.0.0',
  66. 'woocommerce_order_update_coupon' => '3.0.0',
  67. 'woocommerce_order_update_shipping' => '3.0.0',
  68. 'woocommerce_order_update_fee' => '3.0.0',
  69. 'woocommerce_order_update_tax' => '3.0.0',
  70. 'woocommerce_payment_token_created' => '3.0.0',
  71. 'woocommerce_create_product_variation' => '3.0.0',
  72. 'woocommerce_order_items_table' => '3.0.0',
  73. 'woocommerce_settings_checkout_page_options' => '3.4.0',
  74. 'woocommerce_settings_account_page_options' => '3.4.0',
  75. 'woocommerce_settings_checkout_page_options_end' => '3.4.0',
  76. 'woocommerce_settings_account_page_options_end' => '3.4.0',
  77. 'woocommerce_settings_checkout_page_options_after' => '3.4.0',
  78. 'woocommerce_settings_account_page_options_after' => '3.4.0',
  79. );
  80. /**
  81. * Hook into the new hook so we can handle deprecated hooks once fired.
  82. *
  83. * @param string $hook_name Hook name.
  84. */
  85. public function hook_in( $hook_name ) {
  86. add_action( $hook_name, array( $this, 'maybe_handle_deprecated_hook' ), -1000, 8 );
  87. }
  88. /**
  89. * If the old hook is in-use, trigger it.
  90. *
  91. * @param string $new_hook New hook name.
  92. * @param string $old_hook Old hook name.
  93. * @param array $new_callback_args New callback args.
  94. * @param mixed $return_value Returned value.
  95. * @return mixed
  96. */
  97. public function handle_deprecated_hook( $new_hook, $old_hook, $new_callback_args, $return_value ) {
  98. if ( has_action( $old_hook ) ) {
  99. $this->display_notice( $old_hook, $new_hook );
  100. $return_value = $this->trigger_hook( $old_hook, $new_callback_args );
  101. }
  102. return $return_value;
  103. }
  104. /**
  105. * Fire off a legacy hook with it's args.
  106. *
  107. * @param string $old_hook Old hook name.
  108. * @param array $new_callback_args New callback args.
  109. * @return mixed
  110. */
  111. protected function trigger_hook( $old_hook, $new_callback_args ) {
  112. switch ( $old_hook ) {
  113. case 'woocommerce_order_add_shipping':
  114. case 'woocommerce_order_add_fee':
  115. $item_id = $new_callback_args[0];
  116. $item = $new_callback_args[1];
  117. $order_id = $new_callback_args[2];
  118. if ( is_a( $item, 'WC_Order_Item_Shipping' ) || is_a( $item, 'WC_Order_Item_Fee' ) ) {
  119. do_action( $old_hook, $order_id, $item_id, $item );
  120. }
  121. break;
  122. case 'woocommerce_order_add_coupon':
  123. $item_id = $new_callback_args[0];
  124. $item = $new_callback_args[1];
  125. $order_id = $new_callback_args[2];
  126. if ( is_a( $item, 'WC_Order_Item_Coupon' ) ) {
  127. do_action( $old_hook, $order_id, $item_id, $item->get_code(), $item->get_discount(), $item->get_discount_tax() );
  128. }
  129. break;
  130. case 'woocommerce_order_add_tax':
  131. $item_id = $new_callback_args[0];
  132. $item = $new_callback_args[1];
  133. $order_id = $new_callback_args[2];
  134. if ( is_a( $item, 'WC_Order_Item_Tax' ) ) {
  135. do_action( $old_hook, $order_id, $item_id, $item->get_rate_id(), $item->get_tax_total(), $item->get_shipping_tax_total() );
  136. }
  137. break;
  138. case 'woocommerce_add_shipping_order_item':
  139. $item_id = $new_callback_args[0];
  140. $item = $new_callback_args[1];
  141. $order_id = $new_callback_args[2];
  142. if ( is_a( $item, 'WC_Order_Item_Shipping' ) ) {
  143. do_action( $old_hook, $order_id, $item_id, $item->legacy_package_key );
  144. }
  145. break;
  146. case 'woocommerce_add_order_item_meta':
  147. $item_id = $new_callback_args[0];
  148. $item = $new_callback_args[1];
  149. $order_id = $new_callback_args[2];
  150. if ( is_a( $item, 'WC_Order_Item_Product' ) ) {
  151. do_action( $old_hook, $item_id, $item->legacy_values, $item->legacy_cart_item_key );
  152. }
  153. break;
  154. case 'woocommerce_add_order_fee_meta':
  155. $item_id = $new_callback_args[0];
  156. $item = $new_callback_args[1];
  157. $order_id = $new_callback_args[2];
  158. if ( is_a( $item, 'WC_Order_Item_Fee' ) ) {
  159. do_action( $old_hook, $order_id, $item_id, $item->legacy_fee, $item->legacy_fee_key );
  160. }
  161. break;
  162. case 'woocommerce_order_edit_product':
  163. $item_id = $new_callback_args[0];
  164. $item = $new_callback_args[1];
  165. $order_id = $new_callback_args[2];
  166. if ( is_a( $item, 'WC_Order_Item_Product' ) ) {
  167. do_action( $old_hook, $order_id, $item_id, $item, $item->get_product() );
  168. }
  169. break;
  170. case 'woocommerce_order_update_coupon':
  171. case 'woocommerce_order_update_shipping':
  172. case 'woocommerce_order_update_fee':
  173. case 'woocommerce_order_update_tax':
  174. if ( ! is_a( $item, 'WC_Order_Item_Product' ) ) {
  175. do_action( $old_hook, $order_id, $item_id, $item );
  176. }
  177. break;
  178. default:
  179. do_action_ref_array( $old_hook, $new_callback_args );
  180. break;
  181. }
  182. }
  183. }