从WordPress中的子主题中的父主题覆盖元框

时间:2015-07-07 11:48:59

标签: php wordpress class

我在WordPress中有一个父主题,它在WordPress中添加了许多功能和特性,包括几个元变量。

在我的子主题中,我在WordPress中添加了一些新的自定义帖子类型,因此我尝试修改元框以将它们包含在新的自定义帖子类型中。

这是父主题functions.php文件:http://pastebin.com/G1CVM6U2

我的想法是,我只需要在我的子主题中添加代码,该代码将从元素框中添加的父主题中删除操作,然后将元文件文件复制到我的子主题中,根据需要修改它们,以及然后使用add_action引入一个调用那些元文件文件的新函数。

然而,即使能够从父主题中删除动作,我也有一段时间。

我在我的孩子主题functions.php中尝试了以下几种变体:

remove_action('init', 'add_metaboxes');
remove_action('add_meta_box', 'add_metaboxes');

虽然它不会删除元文件,因为当我检查页面/帖子编辑器时,它们仍然可见。

如果不运行remove_action,我就不能再使用新的“add_action”来调用修改后的元文件文件。当我试图这样做的时候,我得到了一个白色的死亡屏幕,因为我猜这个功能被重新宣布。

我怀疑因为父主题中的操作是作为一个类的一部分调用的,所以在子主题中覆盖它的过程可能不同?

希望对此有所帮助。

1 个答案:

答案 0 :(得分:1)

示例1:删除正常命名的添加操作

add_action('after_setup_theme', 'remove_meta_boxes');

function remove_meta_boxes(){
     remove_action('add_meta_box', 'add_metaboxes'), 10;
}

示例2:删除通过引用传递的函数

add_action如下所示:

class ab{

    function __construct(){
        add_action('init', array( &$this, 'add_metaboxes' ));
    }


 }

 $x=new ab;

这里的问题是wordpress会将随机标识字符串添加到函数名称中,例如(a3898orj34930add_metaboxes),这是随机的,所以我们需要做的是使用strpos在密钥中查找名称。我为此创建了一个自定义函数。

function remove_anon_filters( $name, $functionname, $priority){
    global $wp_filter;

    foreach ( $wp_filter[$name][$priority] as $key => $data) {

        if( stripos($key, $functionname )  ){
            remove_action( $name, $key, $priority  );
        }

     } 

 }

我们不会在主题设置之后挂钩以删除父主题操作。

 add_action('after_setup_theme', 'remove_parent_meta_boxes');

 function remove_parent_meta_boxes(){
    remove_anon_filters ( 'init', 'add_metaboxes', 10);
 }