我在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”来调用修改后的元文件文件。当我试图这样做的时候,我得到了一个白色的死亡屏幕,因为我猜这个功能被重新宣布。
我怀疑因为父主题中的操作是作为一个类的一部分调用的,所以在子主题中覆盖它的过程可能不同?
希望对此有所帮助。
答案 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);
}