我的一个插件有这个编码,
Class Afke{
public function __construct() {
add_action( 'init', array( $this, 'setup' ), -1 );
}
function setup() {
add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ) );
}
}
我尝试通过添加以下代码删除主题functions.php中的'add_meta_boxes',
function remove_thematic_actions(){
$bcatcf = new Afke();
remove_action( 'add_meta_boxes', array( $bcatcf, 'add_meta_boxes' ));
//remove_action( 'add_meta_boxes', 'add_meta_boxes' );
}
add_action('init','remove_thematic_actions');
但无法删除此操作。请建议我。
答案 0 :(得分:0)
你用过;
add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ) );
Afke
类中的,但没有这样的函数add_meta_boxes
。使用这样的功能;
Class Afke{
public function __construct() {
add_action( 'init', array( $this, 'setup' ), -1 );
}
function setup() {
add_action( 'add_meta_boxes', array( $this, 'my_meta_box_function' ) );
}
function my_meta_box_function() {
// do your things here
}
}
并且,为了删除您需要使用的操作;
function remove_thematic_actions(){
$bcatcf = new Afke();
remove_action( 'add_meta_boxes', array( $bcatcf, 'my_meta_box_function' ));
}
add_action('init','remove_thematic_actions');
答案 1 :(得分:0)
不是创建新实例,而是将原始文件分配给变量可以定位它:
Class Afke2{
public function __construct() {
add_action( 'init', array( $this, 'setup' ), -1 );
}
function setup() {
add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ) );
}
function add_meta_boxes()
{
add_meta_box(
'test_metabox',
__( 'Test meta box' ),
function() { echo 'Hello world!'; },
'post'
);
}
}
$myAfke = new Afke2;
然后,在其他地方,在另一个插件或主题的functions.php
:
function remove_thematic_actions(){
global $myAfke;
remove_action( 'add_meta_boxes', array( $myAfke, 'add_meta_boxes' ));
}
add_action('init','remove_thematic_actions');