首页 文章

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

提问于
浏览
0

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

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

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

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

但是,即使能够从父主题中删除动作,我也有一段时间 .

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

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

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

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

我怀疑因为父主题中的动作被称为一个类的一部分,在子主题中覆盖它的过程可能是不同的?

希望对此有所帮助 .

1 回答

  • 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);
     }
    

相关问题