类内的Wordpress remove_action

时间:2018-10-17 21:51:28

标签: wordpress woocommerce hook-woocommerce

我正在尝试删除Woocommerce Memberships插件添加的操作。追溯动作包含最初添加到钩子下的功能

class WC_Memberships_Frontend {
    public function __construct() {
        add_action( 'woocommerce_thankyou', array( $this, 'maybe_render_thank_you_content' ), 9 );

但是该类由私有函数调用,并且受其父类声明(据我所知)的变量保护

class WC_Memberships extends Framework\SV_WC_Plugin  {

    protected $frontend;

    private function frontend_includes() {
        // init shortcodes
        require_once( $this->get_plugin_path() . '/includes/class-wc-memberships-shortcodes.php' );

        \WC_Memberships_Shortcodes::initialize();

        // load front end
        $this->frontend = $this->load_class( '/includes/frontend/class-wc-memberships-frontend.php', 'WC_Memberships_Frontend' );
    }

我已经搜索并尝试了多种方法来删除此

remove_action( 'woocommerce_thankyou', array( 'WC_Memberships', 'maybe_render_thank_you_content' ), 9 );
remove_action( 'woocommerce_thankyou', array( 'WC_Memberships_Frontend', 'maybe_render_thank_you_content' ), 9 );
global $WC_Memberships;
remove_action( 'woocommerce_thankyou', array( $WC_Memberships, 'maybe_render_thank_you_content' ), 9 );
global $WC_Memberships_Frontend;
remove_action( 'woocommerce_thankyou', array( $WC_Memberships_Frontend, 'maybe_render_thank_you_content' ), 9 );

以上任何一项工作,以及尝试调用WC_Memberships()->frontend;的其他方式均引发错误,例如“无法访问受保护的属性WC_Memberships :: $ frontend”

我不确定私有函数或受保护的变量是否会妨碍您的工作,或者不确定我只是不了解有关删除类或嵌套类中的操作的信息,但会非常感谢

编辑: 根据我尝试过的code found here

remove_action( 'woocommerce_thankyou', array( wc_memberships()->get_frontend_instance(), 'maybe_render_thank_you_content', 9 ) );

但仍然没有成功。

2 个答案:

答案 0 :(得分:0)

您可能知道,修改内核或插件文件通常不是一个好习惯。使用对答案here的修改,您可以尝试将其添加到主题functions.php文件

function remove_aggravating_wcactions()
{
    remove_action( 'woocommerce_thankyou', 'maybe_render_thank_you_content', 19 );
    remove_action( 'woocommerce_thankyou', 'maybe_some_other_content', 20);
    ...
}
add_action('template_redirect','remove_aggravating_wcactions');

答案 1 :(得分:0)

我的问题是试图找出如何匹配原始add_action $this中的add_action( 'woocommerce_thankyou', array( $this, 'maybe_render_thank_you_content' ), 9 );来删除它。

我最终偶然发现this chunk of code,向我展示了如何引用该类的正确实例。

最终工作代码:

remove_action( 'woocommerce_thankyou', array( wc_memberships()->get_frontend_instance(), 'maybe_render_thank_you_content', 9 ) );