WordPress SEO by Yoast: Ocultar meta cuadros en publicaciones para no administradores

9

Tengo un sitio web de varios autores y no me siento muy cómodo para permitir que todos los miembros ingresen detalles de SEO en las publicaciones que están publicando. Me gustaría que esto fuera visible solo para el Administrador del sitio web. ¿Algunas ideas?

Audrius
fuente

Respuestas:

19

No decía en los documentos de API en el sitio del complemento Yoast SEO qué IDera y no tengo una copia de Yoast instalada a disposición, pero de acuerdo con la yoas-plugin-dir/admin/class-metabox.phplínea 144, el meta_box registrado es;

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

Que se engancha al add_meta_boxesgancho en la línea 32 del mismo archivo,

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

Por supuesto, podría obtener la ID del cuadro de meta en la pantalla de edición de publicación ... De todos modos.

Puedes hacer lo siguiente,

add_action('add_meta_boxes', 'yoast_is_toast', 99);
function yoast_is_toast(){
    //capability of 'manage_plugins' equals admin, therefore if NOT administrator
    //hide the meta box from all other roles on the following 'post_type' 
    //such as post, page, custom_post_type, etc
    if (!current_user_can('activate_plugins')) {
        remove_meta_box('wpseo_meta', 'post_type', 'normal');
    }
}

... donde el tipo de publicación es el tipo de publicación que desea aplicar también a esta restricción, como por ejemplo, posto un tipo de publicación personalizado, uno o más.

Debería hacer el truco.

actualización: manage_pluginsdebería haber sido activate_plugins- enmendado.

Adán
fuente
16
+1 para yoast_is_toast().
kaiser
@Ahmad M agradece la edición sugerida, pero $post_typeen este caso no se requiere el parámetro var y argumento de acción y no arroja aviso / error. Además, si incluye $post_typevar, debe definir el tipo de publicación dentro de la función en otro lugar que no hizo, por lo que el usuario habría ejecutado esto para que funcione incorrectamente. En este caso, es perfectamente aceptable pasar el nombre del tipo de publicación, es decir, como 'post'directamente en la remove_meta_boxfunción. Gracias por la sugerencia de todos modos.
Adam
@userabuser: Gracias por la aclaración, pero $post_typeya está definido y listo para ser utilizado por las add_meta_boxesfunciones del gancho de acción, vea la vista de Adam Brown de este gancho de acción. La utilización $post_typeen este caso hará que el código sea independiente de la post_typepantalla de edición, lo que significa que eliminará el wpseo_metacuadro meta de todos los tipos de publicación en los que se encuentre y no devolverá nada en caso de wpseo_metaque no se encuentre.
Ahmad M
@ AhmadM Gracias amigo. Soy consciente de que la var ya está definida, sin embargo, eso no hace que sea un requisito pasar al gancho / función. En este caso, el OP quiere eliminar el cuadro meta del postpost_type, razón por la cual la solución inicial permitirá un control granular. Sin embargo, en el caso de que desee eliminarlo para todos los tipos de publicaciones, el uso de la var ya definida $post_typees satisfactoria. Lo que haré es editar mi respuesta para incluir su ejemplo adicional usando la $post_typevariable para situaciones en las que alguien quiera aplicar esto a todos los post_types registrados.
Adam
5

Intente pegar esto en un complemento o functions.phparchivo de tema , según el complemento SEO de WordPress ( API Docs ), de Yoast .

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

Para evitar cualquier error ... Esto verifica que la función exista, antes de intentar ocultar cosas, lo que le permite desactivar el complemento y no arrojar errores.

Es posible que deba conectarse initpara que esto funcione correctamente, lo que podría hacerse 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');
Michael Ecklund
fuente
4

Puede eliminarlo utilizando 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' );
}

Observe el 100000 en add_action, esto se asegura de que esto se haga después de que se haya conectado el metabox WP SEO.

Kid Slimmer
fuente
2

Puede usar el complemento Administrar para ocultar elementos de los usuarios en función de sus roles. Lo he usado yo mismo para ocultar algunas cosas de Yoast SEO de los clientes y simplificar el back-end.

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

Es bastante fácil de usar agregando los selectores CSS para los elementos que desea ocultar. Lo he usado para ocultar las pestañas de Análisis de página SEO (#linkdex)

noelmcg
fuente
0

Bueno, hay una opción de configuración en el SEO de WordPress de Yoast para deshabilitar la parte avanzada de la configuración de SEO de WordPress para los no administradores. Si desea deshabilitar completamente el cuadro, puede usar otros complementos para eliminar elementos de la página del editor de publicaciones para no administradores, por ejemplo, eliminar el cuadro SEO de WordPress del editor de publicaciones para no administradores.

usuario36226
fuente