WordPress SEO de Yoast: ocultar caixas de meta em posts para não administradores

9

Eu tenho um site com vários autores e não me sinto muito à vontade para permitir que todos os membros insiram detalhes de SEO nas postagens que estão publicando. Gostaria que isso fosse visível apenas para o administrador do site. Alguma ideia?

Audrius
fonte

Respostas:

19

Ele não disse nos documentos da API no site de plug-in do Yoast SEO o que IDera e não tenho uma cópia do Yoast instalada à disposição, mas, de acordo com a yoas-plugin-dir/admin/class-metabox.phplinha 144, a meta_box registrada é;

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

Que está ligado ao add_meta_boxesgancho na linha 32 do mesmo arquivo,

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

Claro que você pode obter o ID da própria caixa meta na tela de pós-edição ... Enfim.

Você pode fazer o seguinte,

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

... em que tipo de postagem é o tipo de postagem que você deseja aplicar também esta restrição, como postou um tipo de postagem personalizado um ou mais!

Deve fazer o truque.

atualização: manage_pluginsdeveria ter sido activate_plugins- corrigida.

Adão
fonte
16
+1 para yoast_is_toast().
Kaiser #
@ Ahmad M obrigado pela edição sugerida, mas o $post_typeparâmetro var e action argument não é necessário neste caso e não gera aviso / erro. Além disso, se você incluir $post_typevar, precisará definir o tipo de postagem dentro da função em outro lugar que você não executou, para que o usuário o execute para que funcione incorretamente! Nesse caso, é perfeitamente aceitável passar o nome do tipo de postagem, ou seja, 'post'diretamente para a remove_meta_boxfunção. Obrigado pela sugestão de qualquer maneira.
Adam
@userabuser: Obrigado pelo esclarecimento, mas $post_typejá está definido e pronto para ser usado pelas add_meta_boxesfunções do gancho de ação, consulte Adam Brown na visualização deste gancho de ação. A utilização $post_typenesse caso tornará o código independente da post_typetela de edição, o que significa que removerá a wpseo_metameta box de todos os tipos de post em que for encontrado e não retornará nada caso wpseo_metanão seja encontrado.
Ahmad M
@AhmadM Thanks mate. Estou ciente do var já sendo definido, no entanto, isso não faz com que seja necessário passar para o gancho / função. Nesse caso, o OP deseja remover a meta box do postpost_type, motivo pelo qual a solução inicial permitirá um controle granular. No entanto, no caso em que você deseja removê-lo para todos os tipos de postagem, usar o var já definido $post_typeé satisfatório. O que farei é editar minha resposta para incluir seu exemplo adicional usando a $post_typevariável para situações em que alguém pode aplicar isso a todos os post_types registrados.
Adam
5

Tente colar isso em um plugin ou functions.phparquivo de tema , de acordo com o plugin SEO SEO ( API Docs ), da Yoast .

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

Para evitar erros ... Isso verifica se a função existe antes de tentar ocultar coisas, permitindo desativar o plug-in e não gerar erros.

Você pode precisar se conectar initpara que isso funcione corretamente, o que pode ser feito da seguinte maneira:

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
fonte
4

Você pode removê-lo usando a função 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 o 100000 no add_action, isso garante que isso seja feito após a conexão do metabox WP SEO.

Kid Slimmer
fonte
2

Você pode usar o plug-in Adminimize para ocultar itens dos usuários, dependendo de suas funções. Eu mesmo usei isso para ocultar algumas coisas do Yoast SEO dos clientes e simplificar o back-end.

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

Simples de usar adicionando os seletores de css para os itens que você deseja ocultar. Use-o para ocultar as guias Análise de página de SEO (#linkdex)

noelmcg
fonte
0

Bem, existe uma opção de configuração no WordPress SEO da Yoast para desativar a parte avançada das configurações de SEO do WordPress para não administradores. Se você quiser desativar completamente a caixa, poderá usar outros plugins para remover os elementos da página do editor de postagem para não administradores, por exemplo, remover a caixa SEO do WordPress do editor de postagem para não administradores.

user36226
fonte