Me voy a contestar antes de empezar: «Si, vale, también puedes hacer que los usuarios no tengan perfiles que les permitan cambiar de tema o modificarlo«. Y es que hay plugins muy capaces, como Role Manager o Members, para crear perfiles personalizados.
Pero ¿y si tu «cliente» no quiere restricciones?, si quiere acceso completo salvo el acuerdo que ha llegado contigo, como diseñador del sitio, de NO TOCAR TU TEMA, NI DESACTIVARLO NI CAMBIAR DE TEMA.
Entonces parece tener sentido desactivar toda opción para que nadie, quizás salvo tu mismo, tenga acceso a las opciones del tema, incluso al menú mismo.
Si es tu caso puedes conseguirlo fácilmente, solo necesitas hacer 2 cosas:
- Conocer tu ID de usuario (o el del usuario que va a tener acceso a la ventana de Temas para hacer modificaciones). Es sencillo, en la ventana de usuarios de WordPress pones el cursor del ratón sobre el usuario a autorizar y en la barra de estado del navegador (si, esa que tienes desactivada y no deberías) verás una URL del tipo:
http://misitio.com/wp-admin/user-edit.php?user_id=XX&wp_http_referer_etcétera_y_etcétra
, donde las XX son el número de ID del usuario. Lo dicho, facilito. - Añade este código al fichero
functions.php
del tema activo:add_action( 'admin_init', 'slt_lock_theme' ); function slt_lock_theme() { global $submenu, $userdata; get_currentuserinfo(); if ( $userdata->ID != XX ) { unset( $submenu['themes.php'][5] ); unset( $submenu['themes.php'][15] ); } }
Y, de nuevo, sustituyes «XX» por el número de ID de usuario que SI tendrá acceso a la ventana de administración de temas y, en consecuencia, hacer todas las perrerías posibles.
Y ya lo tienes.
Estupendo truco de Sarah Gooding
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!
Muy útil porque aveces el usuario puede activar temas desfasados que no fusionan bien y puede hasta borrar tu plantilla para luego echarte la culpa.
genial !!!
Esta opción esta genial, pero solo oculta la opción de Theme y no la de Editar.
Como podemos añadir mas restricciones?
He probado a poner
<code>
add_action( 'admin_init', 'slt_lock_theme' );
function slt_lock_theme() {
global $submenu, $userdata;
get_currentuserinfo();
if ( $userdata->ID != 2 ) {
unset( $submenu['themes.php'][5] );
unset( $submenu['themes.php'][15] );
unset( $submenu['theme-editor.php'][5] );
unset( $submenu['theme-editor.php'][15] );
}
}
</code>
Pero no sirve.
La verdad es que no entiendo dónde está la ventaja de simplemente elimintar las opciones del menú… Eso no impedirá que "el cliente" si quiere acceda al menú para cambiar los temas o editarlos. Le bastará con poner la URL a mano (no hay que subestimar nunca al usuario! -ni a sus primos-) y si tiene perfil de usuario con capacidades suficientes podría igualmente hacer los cambios.
No obstante, puestos a simplemente quitar las opciones del menú, sería mucho más adecuado esto:
add_action( 'admin_init', 'sa_no_menu_themes' );
function sa_no_menu_themes() {
global $current_user;
if ($current_user->ID != 'XX') {
remove_submenu_page( 'themes.php', 'themes.php' );
remove_submenu_page( 'themes.php', 'theme-editor.php' );
}
}
Samuel como se podría hacer lo que comentas?
Para que no accedan tipeando la url.
Estaría genial que lo compartieras, o alguien que sepa como hacerlo.
Gracias.
A mi me gustaria permitir algo distinto a mi cliente: darle acceso al Option Theme, sin embargo el usuario Editor (que es como tengo al cliente, con algunas modificaciones con Memebers) no tiene acceso a dicha seccion. es posbile crear un Role Capabilitie personalizado? y si es asi como se el nombre de dicha capacidad para que funcione?