WordPress SEO by Yoast: Ocultar Meta Boxes en Entradas para No-administradores

29 oct 2012, 22:21:35
Vistas: 14.1K
Votos: 10

Tengo un sitio web con múltiples autores y no me siento cómodo permitiendo que todos los miembros ingresen detalles SEO en las entradas que publican. Me gustaría que esto solo fuera visible para el Administrador del sitio. ¿Alguna idea?

0
Todas las respuestas a la pregunta 5
4
19

No decía en la documentación de la API del sitio del plugin Yoast SEO cuál era el ID y no tengo una copia de Yoast instalada a mano, pero según yoas-plugin-dir/admin/class-metabox.php línea 144, el meta_box registrado es;

add_meta_box( 'wpseo_meta', ...etc ); ...

Que está enganchado al hook add_meta_boxes en la línea 32 del mismo archivo,

add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );

Por supuesto podrías obtener el ID del meta box directamente en la pantalla de edición de entradas... En fin.

Puedes hacer lo siguiente,

add_action('add_meta_boxes', 'yoast_is_toast', 99);
function yoast_is_toast(){
    //la capacidad 'manage_plugins' equivale a administrador, por lo tanto si NO es administrador
    //oculta el meta box para todos los demás roles en el siguiente 'post_type'
    //como post, page, custom_post_type, etc
    if (!current_user_can('activate_plugins')) {
        remove_meta_box('wpseo_meta', 'post_type', 'normal');
    }
}

...donde post type es el tipo de contenido al que deseas aplicar esta restricción, como post o uno o más tipos de contenido personalizados.

Debería funcionar.

actualización: manage_plugins debería haber sido activate_plugins - corregido.

29 oct 2012 23:29:58
Comentarios

+1 para yoast_is_toast().

kaiser kaiser
30 oct 2012 15:23:13

@Ahmad M gracias por la edición sugerida pero la variable $post_type y el parámetro de acción no son necesarios en este caso y no generan aviso/error. Además si incluyes la variable $post_type necesitas definir el tipo de post dentro de la función en otro lugar, lo cual no hiciste, ¡así que el usuario tendría que ejecutar esto para que funcione incorrectamente! En este caso es perfectamente aceptable pasar directamente el nombre del tipo de post, es decir, como 'post' dentro de la función remove_meta_box. De todos modos gracias por la sugerencia.

Adam Adam
30 oct 2012 18:39:59

@userabuser: Gracias por la aclaración, pero $post_type ya está definida y lista para ser usada por las funciones del hook de acción add_meta_boxes, por favor revisa la vista fuente de Adam Brown de este hook de acción. Utilizar $post_type en este caso hará que el código sea independiente de la pantalla de edición del post_type, lo que significa que eliminará la caja meta wpseo_meta de todos los tipos de post donde se encuentre, y no devolverá nada en caso de que wpseo_meta no se encuentre.

Ahmad M Ahmad M
1 nov 2012 20:11:13

@AhmadM Gracias compañero. Soy consciente de que la variable ya está definida, sin embargo eso no la convierte en un requisito para pasarla al hook/función. En este caso, el OP quiere eliminar el meta box del post_type post, por lo que la solución inicial permitirá un control granular. Sin embargo, en el caso de que quieras eliminarlo para todos los post types, entonces usar la variable ya definida $post_type es satisfactorio. Lo que haré es editar mi respuesta para incluir tu ejemplo adicional usando la variable $post_type para situaciones donde alguien pueda querer aplicar esto a todos los post_types registrados.

Adam Adam
2 nov 2012 06:23:07
0

Prueba pegar esto en un plugin o en el archivo functions.php del tema, según el plugin WordPress SEO (Documentación de la API), por Yoast.

if(function_exists('wpseo_use_page_analysis') && !current_user_can('administrator')){
    add_filter('wpseo_use_page_analysis', '__return_false');
}

Para evitar errores... Esto verifica que la función exista antes de intentar ocultar elementos, permitiéndote desactivar el plugin sin generar errores.

Puede que necesites engancharte al hook init para que esto funcione correctamente, lo cual se puede hacer así:

function wpse_init(){
    if(function_exists('wpseo_use_page_analysis') && !current_user_can('administrator')){
        add_filter('wpseo_use_page_analysis', '__return_false');
    }   
}
add_action('init', 'wpse_init');
30 oct 2012 03:06:10
0

Puedes eliminarlo usando la función remove_meta_box.

if ( ! current_user_can( 'edit_pages' ) ) {
    add_action( 'add_meta_boxes', 'my_remove_wp_seo_meta_box', 100000 );
}

function my_remove_wp_seo_meta_box() {
    remove_meta_box( 'wpseo_meta', 'post', 'normal' );
}

Observa el 100000 en el add_action, esto asegura que se ejecute después de que el metabox de WP SEO haya sido enganchado.

16 mar 2013 23:25:32
0

Puedes usar el plugin Adminimize para ocultar elementos a los usuarios dependiendo de sus roles. Yo mismo lo he usado para ocultar algunas cosas de Yoast SEO a los clientes y simplificar el backend.

http://wordpress.org/extend/plugins/adminimize/

Es bastante sencillo de usar añadiendo los selectores CSS de los elementos que quieres ocultar. Lo he utilizado para ocultar las pestañas de Análisis SEO de página (#linkdex)

6 nov 2012 13:18:30
0

Existe una opción de configuración en WordPress SEO by Yoast para desactivar la parte avanzada de los ajustes de WordPress SEO para usuarios que no son administradores. Si deseas desactivar completamente el cuadro, puedes utilizar otros plugins para eliminar elementos de la página del editor de entradas para no administradores, por ejemplo, eliminar el cuadro de WordPress SEO del editor de entradas para no administradores.

5 ago 2013 12:58:53