我正在尝试删除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 ) );
但仍然没有成功。
答案 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 ) );