remove_action Из класса PHP

Я пытаюсь удалить действие и добавить его с другим приоритетом. Ниже приведены все фрагменты кода, которые помогают генерировать сообщение:

Включить необходимые файлы интерфейса

private function frontend_includes() { require_once( $this->get_plugin_path() . '/includes/wc-memberships-template-functions.php' ); require_once( $this->get_plugin_path() . '/includes/class-wc-memberships-shortcodes.php' ); WC_Memberships_Shortcodes::initialize(); $this->frontend = $this->load_class( '/includes/frontend/class-wc-memberships-frontend.php', 'WC_Memberships_Frontend' ); $this->checkout = $this->load_class( '/includes/frontend/class-wc-memberships-checkout.php', 'WC_Memberships_Checkout' ); $this->restrictions = $this->load_class( '/includes/frontend/class-wc-memberships-restrictions.php', 'WC_Memberships_Restrictions' ); } 

Получить сообщение об ограничении покупки продукта

  /** * @param int $post_id Optional. Defaults to current post. * @return string */ public function get_product_purchasing_restricted_message( $post_id = null ) { if ( ! $post_id ) { global $post; $post_id = $post->ID; } $products = $this->get_products_that_grant_access( $post_id ); $message = $this->get_restriction_message( 'product_purchasing_restricted', $post_id, $products ); /** * Filter the product purchasing restricted message * * @since 1.0.0 * @param string $message The restriction message * @param int $product_id ID of the product being restricted * @param array $products Array of product IDs that grant access to this product */ return apply_filters( 'wc_memberships_product_purchasing_restricted_message', $message, $post_id, $products ); } 

Класс ограничений, ограничивает ограничение содержимого на интерфейсе

 class WC_Memberships_Restrictions { /** @var array associative array of content conditions for current user **/ private $user_content_access_conditions; /** @var array of post IDs that content restriction has been applied to **/ private $content_restriction_applied = array(); /** @var string Product content restriction password helper **/ private $product_restriction_password = null; /** @var bool Product thumbnail removed helper **/ private $product_thumbnail_restricted = false; public function __construct() { // Desired action to remove and re-prioritize add_action( 'woocommerce_single_product_summary', array( $this, 'single_product_purchasing_restricted_message' ), 30 ); } } 

Мне просто нужно изменить приоритет до 15 из 30 в действии класса WC_Memberships_Restrictions. Проблема в том, что нет четкого способа вызвать удаление. Какие-либо предложения?

Related of "remove_action Из класса PHP"

Ну, код, который вы WC_Memberships_Restrictions показывает, что экземпляр класса WC_Memberships_Restrictions хранится в свойстве restrictions класса.

 $this->restrictions = $this->load_class( '/includes/frontend/class-wc-memberships-restrictions.php', 'WC_Memberships_Restrictions' ); 

Оттуда мне просто нужно было посмотреть, как получить доступ к экземпляру основного класса Membership, от нижней части основного файла плагина, который вы видите:

 /** * Returns the One True Instance of Memberships * * @since 1.0.0 * @return WC_Memberships */ function wc_memberships() { return WC_Memberships::instance(); } 

Это означает, что теперь для доступа к экземпляру класса ограничений нам нужно получить доступ к свойству ограничения основного класса. Хотя это звучит ясно как грязь, в основном это означает:

 wc_memberships()->restrictions 

Зная это, мы можем знать, как удалить и добавить действия из этого класса:

 function so_41431558_change_hook_priority(){ if( function_exists( 'wc_memberships' ) ){ remove_action( 'woocommerce_single_product_summary', array( wc_memberships()->restrictions, 'single_product_purchasing_restricted_message' ), 30 ); add_action( 'woocommerce_single_product_summary', array( wc_memberships()->restrictions, 'single_product_purchasing_restricted_message' ), 15 ); } } add_action( 'woocommerce_single_product_summary', 'so_41431558_change_hook_priority', 1 );