Overwriting Core WordPress Functions with Plugins

Existe uma maneira de replace uma function central é o núcleo do WordPress usando um plugin? Eu não preciso injetar código, preciso replace a function inteiramente por uma versão reescrita.

A function específica é wp_nav_menu_item_post_type_meta_box () em /wp-admin/includes/nav-menu.php

Basicamente, há uma falta de funcionalidade que não atenda a necessidade de um cliente, então preciso replace esta function por uma que criei. Eu fiz modificações pesadas na function, e eu quero ter a capacidade de replace a function pela minha própria através de um plugin em vez de editar o arquivo diretamente.

Eu sei que isso provavelmente não é muito melhor do que cortar o núcleo, no entanto, é uma solução imediata temporária.

Solutions Collecting From Web of "Overwriting Core WordPress Functions with Plugins"

Não, realmente não. Você pode replace funções PHP integradas, mas não funções definidas pelo usuário.

No entanto, toda essa function é definir uma meta checkbox. Por que não definir o seu?

Uma vez que você tenha sua própria remove_meta_box definida e adicionada, você pode chamar remove_meta_box para remover o padrão:

 remove_meta_box( 'add-POSTTYPENAME', 'nav-menus', 'side'); 

A checkbox de meta é originalmente adicionada para cada tipo de postagem personalizado usando um loop. O ID da checkbox meta é definido como add-{$id} onde $id é o nome do post-tipo. Então, você pode remover esta checkbox meta para todos os tipos de publicação fazendo um loop similar ou apenas para um tipo de publicação específico. Você decide.

Então, apenas adicione sua metabox personalizada para os tipos de postagem que você precisa. Aqui está a function que adiciona o original para referência:

 function wp_nav_menu_post_type_meta_boxes() { $post_types = get_post_types( array( 'show_in_nav_menus' => true ), 'object' ); if ( ! $post_types ) return; foreach ( $post_types as $post_type ) { $post_type = apply_filters( 'nav_menu_meta_box_object', $post_type ); if ( $post_type ) { $id = $post_type->name; add_meta_box( "add-{$id}", $post_type->labels->name, 'wp_nav_menu_item_post_type_meta_box', 'nav-menus', 'side', 'default', $post_type ); } } } 

Aqui está uma function que permitirá que você remova wp metaboxes definidas (mesmo padrão) dentro da página nav-menus.php . Ao remover a checkbox meta, você também remove a opção checkbox de seleção na guia “Opções da canvas”.

Uma chamada de function remove_meta_box() não funcionará porque, como disse a EAMann, as checkboxs são definidas pelo usuário. Você precisa verificar o status de administrador do usuário antes de remover.

Você pode colocar esta function dentro do seu tema functions.php sem alteração nos arquivos wp-admin .

 function hide_meta_in_custom_menu_admin() { global $pagenow; global $current_user; get_currentuserinfo(); $user_login=$current_user->user_login; if($user_login=="scholar") { //nothing } else { if (is_admin() && $pagenow=='nav-menus.php') { remove_meta_box('add-custom-links', 'nav-menus', 'side'); remove_meta_box('nav-menu-theme-locations', 'nav-menus', 'side'); remove_meta_box('add-category', 'nav-menus', 'side'); } } } add_action( 'admin_head', 'hide_meta_in_custom_menu_admin' ); 

Código mais simples, para remover para qualquer usuário.

 function hide_meta_in_nav_menu() { global $pagenow; if (is_admin() && $pagenow=='nav-menus.php') { remove_meta_box('add-custom-links', 'nav-menus', 'side'); remove_meta_box('nav-menu-theme-locations', 'nav-menus', 'side'); remove_meta_box('add-category', 'nav-menus', 'side'); } } add_action( 'admin_head', 'hide_meta_in_nav_menu' );