Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用add\u meta\u hook在类内执行操作_Php_Wordpress_Class - Fatal编程技术网

Php 使用add\u meta\u hook在类内执行操作

Php 使用add\u meta\u hook在类内执行操作,php,wordpress,class,Php,Wordpress,Class,好的,这有点具体。我可能错过了一些东西,但因为它让我失去了足够的时间,即使我找到了解决的办法,我还是需要知道是否有办法做到这一点 基本上我想在类中使用add_meta_box() 我在做什么: //an array variable I am trying to pass in the class to a callback function as a parameter $the_array = array( 'something', 'my meta box' ); //a

好的,这有点具体。我可能错过了一些东西,但因为它让我失去了足够的时间,即使我找到了解决的办法,我还是需要知道是否有办法做到这一点

基本上我想在类中使用add_meta_box()

我在做什么:

//an array variable I am trying to pass in the class to a callback function as a parameter
$the_array = array(
    'something',
    'my meta box'
);
//a class where everything happens
class some_class {
//public function that has the array and initiates the add_meta_boxes hook
    public function add_box($class_array) {
        //add meta boxes hook to add the meta box properly
        add_action('add_meta_boxes', array($this, 'adding_custom_meta_boxes'), 10, 2);
        //passing the array variable to the callback function
        do_action('add_meta_boxes',$class_array);
    }
//the callback function of the add_meta_boxes hook
    public function adding_custom_meta_boxes($class_array) {
        add_meta_box('my-meta-box', __($class_array[1]), 'render_my_meta_box', 'page', 'normal', 'default');
    }
    public function render_my_meta_box(){
        //the code to generate the html of the meta box goes here
    }

}

$class_var = new some_class();
$class_var->add_box($the_array);
我得到这个错误: 致命错误:调用C:\xampp\ht…..中未定义的函数add\u meta\u box()

但前提是我使用dou操作将变量传递给hook回调函数

我找到了一种全局变量的方法,但是,有人知道一种正确的方法吗


我试图从一个类内部创建元框,这就发生了。它在课外很有效。有人有什么想法吗?

你的想法不太远。要更正对此的上述更改,请执行以下操作:

public function adding_custom_meta_boxes($class_array) {
    add_meta_box('my-meta-box', __($class_array[1]), array($this, 'render_my_meta_box'), 'page', 'normal', 'default');
}
  • 删除“do_action”

do_action告诉脚本立即执行附加的操作,而函数add_meta_box尚未加载(用谷歌搜索wp函数的加载过程)。这就是添加操作/过滤器的全部要点

好的,删除do_操作可以解决问题(不再出现错误),当然,但是如何在没有do_操作的情况下将数组参数传递给do_操作钩子呢?实际的问题是将变量传递给类内的钩子。使用do_动作可以解决这个问题,但它只在类外有效。因此,问题依然存在。有没有人有更多的想法?嗯,不确定你是否掌握了这个,你正在用add_action添加操作,这将运行附加到这个函数的函数,add_meta_box函数,以及创建这个框的回调。数组变量[1]只是一个名称,放在bob中也会起作用..您没有看到删除do action时创建的框吗?a对,我明白您的意思,数组不可用于类中的脚本。这是OOP的一个特性。您可以将其定义为属于脚本的变量,也可以使用全局变量。但是为什么不在类中定义数组呢?我创建这个类是为了从外部数组生成元框。我使用上面示例中的第一个函数(add_box)将数组发送到类,然后通过类全局管理它。这是我的解决办法。正在寻找另一种方式。。。