父主题菜单函数中的挂钩

时间:2016-03-08 作者:Nacionarte

试图修改子主题上的父菜单功能,原始功能为:

function original_theme_menus() {
    $menus = array(
        \'top\'       => __( \'Top Menu\', \'theme-domain\' ),
        \'primary\'   => __( \'Primary Menu\', \'theme-domain\' ),
        \'secondary\' => __( \'Secondary Menu\', \'theme-domain\' ),    
    );
    return apply_filters( \'original_theme_menus\', $menus );
}
我正在做:

function remove_original_theme_menus() {
    remove_action(\'original_theme_menus\');
}
add_action(\'init\', \'remove_original_theme_menus\');

    function original_theme_menus() {
        $menus = array(
            \'top\'       => __( \'Top Menu\', \'theme-domain\' ),
            \'primary\'   => __( \'Primary Menu\', \'theme-domain\' ),
            \'secondary\' => __( \'Secondary Menu\', \'theme-domain\' ),
            \'footer\'    => __( \'Footer Menu\', \'theme-domain\' )

        );
        return apply_filters( \'original_theme_menus\', $menus );
    }

How should I unregister the original function?

我得到一个致命错误,因为原始函数仍然存在,无法重新声明它。

我尝试创建一个新的函数名,但问题是原来的函数名;如果我只是删除了原来的父函数,那么一切都会正常工作。

我读过thisthis 自行解决但无法找出取消注册的正确方法~覆盖原始菜单函数,并从子主题函数调用它。

我认为它也与“init”部分有关,因为我应该在apply过滤器上执行此操作。

1 个回复
最合适的回答,由SO网友:Jevuska 整理而成

你只需要启动原来的一个,而不是删除。

add_filter( \'original_theme_menus\', \'your_theme_menus\', 1, 1 );
function your_theme_menus( $menus )
{
    $new_menu = array(
        \'footer\' => __( \'Footer Menu\', \'theme-domain\' )
    );
    $menus = $menus + $new_menu;

    return $menus;
}

相关推荐

Apply_Filters()对所需的参数进行切片

我正在尝试向WooCommerce订单中的每个退款行添加一个按钮(其功能超出了这个问题的范围,足以说明它需要退款id作为参数)。我发现这些行是在woocommerce\\includes\\admin\\meta Box\\views\\html订单退款中创建的。无法重写的php。然而,有一项行动:do_action( \'woocommerce_admin_order_item_values\', null, $refund, $refund->get_id() ); 这似乎非常适合我的