Cuando estaba ejecutando WP 3.9.2, pude usar el siguiente código para eliminar el elemento del menú Personalizar de Apariencia en el menú de administración.
function remove_customize() {
remove_submenu_page('themes.php', 'customize.php');
}
add_action('admin_init', 'remove_customize', 999);
Una vez que actualicé a 4.0, esto ya no funciona.
ov3rfly
Esto funciona con WordPress 4.1 y 4.0 y 3.x aquí:
Editar: Ajustado para compatibilidad con WordPress 4.1:
function remove_customize() {
$customize_url_arr = array();
$customize_url_arr[] = 'customize.php'; // 3.x
$customize_url = add_query_arg( 'return', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), 'customize.php' );
$customize_url_arr[] = $customize_url; // 4.0 & 4.1
if ( current_theme_supports( 'custom-header' ) && current_user_can( 'customize') ) {
$customize_url_arr[] = add_query_arg( 'autofocus[control]', 'header_image', $customize_url ); // 4.1
$customize_url_arr[] = 'custom-header'; // 4.0
}
if ( current_theme_supports( 'custom-background' ) && current_user_can( 'customize') ) {
$customize_url_arr[] = add_query_arg( 'autofocus[control]', 'background_image', $customize_url ); // 4.1
$customize_url_arr[] = 'custom-background'; // 4.0
}
foreach ( $customize_url_arr as $customize_url ) {
remove_submenu_page( 'themes.php', $customize_url );
}
}
add_action( 'admin_menu', 'remove_customize', 999 );
-
Parece que la respuesta de @chrisphilton es mucho más sucinta.
– Phil Healey
16 de enero de 2017 a las 13:10
-
¡Mayormente funciona! Pero no elimina el fondo personalizado en 4.9. Lo intentaré en 4.8 más tarde.
– Chris rosa
16 de noviembre de 2017 a las 11:43
-
Esta es la única solución en esta página que funcionó para mí. Debería ser la respuesta aceptada.
– Tyler Kemme
14 de junio de 2018 a las 18:58
La respuesta debe ser:
add_action( 'admin_menu', function () {
global $submenu;
if ( isset( $submenu[ 'themes.php' ] ) ) {
foreach ( $submenu[ 'themes.php' ] as $index => $menu_item ) {
foreach ($menu_item as $value) {
if (strpos($value,'customize') !== false) {
unset( $submenu[ 'themes.php' ][ $index ] );
}
}
}
}
});
La forma en que rjb usó una matriz como aguja en in_array() en la respuesta aceptada no funciona. Mira por qué en los documentos. Reemplacé in_array con otro foreach que recorre las matrices de $menu_item y busca ‘personalizar’ como parte del valor.
Me funciona con WordPress 4.9.6
-
+1000. Esta debería ser la respuesta aceptada, corrigiendo un error de PHP obvio que nadie más detectó durante seis meses…
– Theo d’Or
25/06/2018 a las 18:00
-
✓ Funciona en 5.0.3
– Kontur
14 de enero de 2019 a las 14:27
-
✓ Funciona en 5.1.1
– jake
22 de marzo de 2019 a las 2:25
Puede modificar directamente la $submenus
global así:
global $submenu;
unset($submenu['themes.php'][6]); // Customize link
Estoy usando esto en la misma función, conectado a admin_menu
ya que uso para desarmar otros elementos de administración y parece estar funcionando bien
function as_remove_menus () {
remove_menu_page('upload.php'); //hide Media
remove_menu_page('link-manager.php'); //hide links
remove_submenu_page( 'edit.php', 'edit-tags.php' ); //hide tags
global $submenu;
// Appearance Menu
unset($submenu['themes.php'][6]); // Customize
}
add_action('admin_menu', 'as_remove_menus');
-
¿Hay alguna preocupación acerca de que el índice del menú Apariencia en esa matriz cambie en versiones futuras?
– Isabela
17 de septiembre de 2014 a las 12:12
-
@isabisa Inicialmente pensé que tenías frío solo usa
array_search
pero dado que es una matriz multidimensional, podría usar un enfoque como el descrito en este hilo.– Andrew Cafourek
17/09/2014 a las 17:46
rjb
Editar: Actualizado para WordPress 4.9+ y mayor compatibilidad con PHP
El núcleo de WordPress no ofrece un gancho de forma nativa deshabilitar el personalizador de temaspero hay es una forma inteligente y elegante para eliminar el enlace “Personalizar” del menú Apariencia alterando el global $submenu
variable:
/**
* Remove Admin Menu Link to Theme Customizer
*/
add_action( 'admin_menu', function () {
global $submenu;
if ( isset( $submenu[ 'themes.php' ] ) ) {
foreach ( $submenu[ 'themes.php' ] as $index => $menu_item ) {
if ( in_array( array( 'Customize', 'Customizer', 'customize' ), $menu_item ) ) {
unset( $submenu[ 'themes.php' ][ $index ] );
}
}
}
});
Mientras que otras muestras de código aquí y en otros lugares se basan irresponsablemente en índices numéricos específicos de la $submenú variable (por ejemplo $submenu['themes.php'][6][0]
…), este método atraviesa de forma inteligente la jerarquía, por lo que debería ser compatible con versiones anteriores (3.x) y nuevas de WordPress (4.x) por igual.
De hecho, puedes usar remove_submenu_page
para eliminar la opción del submenú del tema de la pantalla de administración. El truco es que la URL debe coincidir exactamente con lo que se vincula en el administrador para que funcione esa función.
function remove_admin_menus() {
remove_submenu_page(
'themes.php',
'customize.php?return=' .
urlencode( str_replace( get_bloginfo('url'), "", get_admin_url() ) ) .
'themes.php' );
}
add_action( 'admin_init', 'remove_admin_menus' );
He determinado mediante programación la URL del administrador en el caso de que no esté simplemente usando ‘/wp-admin’. @isabisa Esto también evitará interrupciones en el futuro si el índice del elemento del menú cambia alguna vez.
¡Estoy usando esto en WP 4.0 y funciona muy bien!
-
¡Una buena respuesta sucinta, que no necesita llamar global! Esto es especialmente útil cuando tiene una función que se utiliza para eliminar otros elementos de menú/submenú.
– Phil Healey
16 de enero de 2017 a las 13:12
Eliminar el menú es solo una solución a medias, ya que no deshabilita por completo el personalizador. Para deshabilitar de forma completa y segura el personalizador (y también eliminar el menú), debe eliminar el permiso del personalizador de todos los usuarios. Algo como esto lo haría:
add_filter('map_meta_cap', function($caps, $cap, $user_id, $args) {
if ('customize' == $cap) return ['do_not_allow'];
return $caps;
}, 10, 4);
-
¡Una buena respuesta sucinta, que no necesita llamar global! Esto es especialmente útil cuando tiene una función que se utiliza para eliminar otros elementos de menú/submenú.
– Phil Healey
16 de enero de 2017 a las 13:12
Kuba Paczyński
WordPress >= 4.9.8
add_action('admin_menu', function () {
$request = urlencode($_SERVER['REQUEST_URI']);
remove_submenu_page('themes.php', 'customize.php?return='. $request);
}, 999);