来自PHP类的remove_action [英] remove_action From PHP Class

查看:63
本文介绍了来自PHP类的remove_action的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试删除一项操作,并以其他优先级将其添加. 以下是有助于生成消息的所有代码段:

I'm attempting to remove an action and add it with a different priority. Below are all the code snippets that assist in generating a Message:

包括必需的前端文件

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 );
}
}

实际上,我只需要在WC_Memberships_Restrictions类的操作中将优先级从30更改为15.问题在于,没有明确的方法来调用移除.有什么建议吗?

I literally just need to alter the priority to 15 from 30 in the action of the WC_Memberships_Restrictions class. The issue is that there's no clear way to call the removal. Any suggestions?

推荐答案

您提供的代码表明WC_Memberships_Restrictions类的实例存储在主类的restrictions属性中.

Well the code you provided shows that the instance of the WC_Memberships_Restrictions class is stored in the main class' restrictions property.

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

从那里,我只需要从主插件文件的底部查找如何访问主要Membership类的实例:

From there I just had to look up how to access the instance of the main Membership class, from the bottom of the main plugin file you see:

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

这意味着现在要访问限制类的实例,我们需要访问主类的限制属性.虽然听起来像泥泞,但基本上意味着:

This means that now to access the instance of the restrictions class we need to access the main class's restriction property. While that sounds clear as mud, basically it means this:

wc_memberships()->restrictions

知道了这一点,我们就可以知道从该类中删除和添加操作:

Knowing this, we can known remove and add actions from that class:

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 );

这篇关于来自PHP类的remove_action的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆