remove_action()在WordPress主题中不起作用

时间:2014-05-15 13:18:00

标签: wordpress

我的一个插件有这个编码,

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

但无法删除此操作。请建议我。

2 个答案:

答案 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');