使用主题从定制器中删除NAV_MENUS

时间:2016-06-04 作者:J. Doe

有没有办法删除“菜单”或使用dev语言nav_menus 来自自定义程序?

我试过了$wp_customize->remove_section(\'nav_menus\'); 但这并不奏效。

$wp_customize->remove_section(\'nav_menu\'); (删除的s)也不起作用。

$wp_customize->remove_section(\'menus\'); 也不起作用。

$wp_customize->remove_section(\'wp_nav_menus\'); 也没用。

请帮帮我!

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

这是面板,不是截面remove_section() 在这种情况下不起作用。但是,您可以使用函数remove_panel() 但这会引发一个通知

注意:调用了WP\\U Customize\\u Manager::remove\\u面板incorrectly 手动删除nav\\u菜单将导致PHP警告。使用customize_loaded_components 改为过滤。有关详细信息,请参阅WordPress中的调试。(此消息是在版本4.5中添加的。)在\\wp中包含\\个函数。php在线3897

现在customize_loaded_components 过滤器显示

这允许通过将核心组件从阵列中筛选出来,将其从实例化中排除。请注意,此筛选器通常在“plugins\\u loaded”操作期间运行,因此无法将其添加到主题中。

所以,从customizer中删除菜单部分并使用主题并没有直接的方法,但如果您愿意,我找到了一个解决方案(可能不太好),它可以在没有任何警告和错误的情况下工作。

课堂上WP_Customize_Nav_Menus 构造函数检查

if ( ! current_user_can( \'edit_theme_options\' ) ) {
    return;
}
然后为nave菜单部分注册所有操作/过滤器,这样删除所有这些过滤器/操作就可以实现这一目的。但要删除这些过滤器/操作,我们需要用于注册它们的相同对象。是的,我们有customize_register 操作回调。

您可以将此代码添加到主题中functions.php

add_action(\'customize_register\', function ( $WP_Customize_Manager ){
    //check if WP_Customize_Nav_Menus object exist
    if (isset($WP_Customize_Manager->nav_menus) && is_object($WP_Customize_Manager->nav_menus)) {

        //Remove all the filters/actions resiterd in WP_Customize_Nav_Menus __construct
        remove_filter( \'customize_refresh_nonces\', array( $WP_Customize_Manager->nav_menus, \'filter_nonces\' ) );
        remove_action( \'wp_ajax_load-available-menu-items-customizer\', array( $WP_Customize_Manager->nav_menus, \'ajax_load_available_items\' ) );
        remove_action( \'wp_ajax_search-available-menu-items-customizer\', array( $WP_Customize_Manager->nav_menus, \'ajax_search_available_items\' ) );
        remove_action( \'customize_controls_enqueue_scripts\', array( $WP_Customize_Manager->nav_menus, \'enqueue_scripts\' ) );
        remove_action( \'customize_register\', array( $WP_Customize_Manager->nav_menus, \'customize_register\' ), 11 );
        remove_filter( \'customize_dynamic_setting_args\', array( $WP_Customize_Manager->nav_menus, \'filter_dynamic_setting_args\' ), 10, 2 );
        remove_filter( \'customize_dynamic_setting_class\', array( $WP_Customize_Manager->nav_menus, \'filter_dynamic_setting_class\' ), 10, 3 );
        remove_action( \'customize_controls_print_footer_scripts\', array( $WP_Customize_Manager->nav_menus, \'print_templates\' ) );
        remove_action( \'customize_controls_print_footer_scripts\', array( $WP_Customize_Manager->nav_menus, \'available_items_template\' ) );
        remove_action( \'customize_preview_init\', array( $WP_Customize_Manager->nav_menus, \'customize_preview_init\' ) );
        remove_filter( \'customize_dynamic_partial_args\', array( $WP_Customize_Manager->nav_menus, \'customize_dynamic_partial_args\' ), 10, 2 );

    }
}, -1); //Give it a lowest priority so we can remove it on right time

相关推荐

用标准的干净文件替换NAV-menus.php文件?

我是一个自学成才的wordpress网站设计师,请原谅我的无知。我为一个客户开发的几个网站最近被一个印尼黑客组织破坏了(很有趣!)。客户端没有更新wordpress安装和其他一些危及安全的事情。遗憾的是,没有网站的清理备份。网络主机给了我一个包含恶意软件扫描结果的文本文件。看起来很多受影响的文件都是导航菜单。网站的php文件。文本文件中显示的扫描结果示例如下:“[主目录]/[网站文件夹名称]/wp includes/nav-menu.php:SL-php-INJECTOR-1-ejw.UNOFFICIAL