it-swarm.com.ru

WordPress SEO от Yoast: скрыть мета-боксы в сообщениях для не-администраторов

У меня есть веб-сайт с несколькими авторами, и мне не очень удобно позволять всем участникам вводить детали SEO в публикуемые ими сообщения. Хотелось бы, чтобы это было видно только администратору сайта. Есть идеи?

9
Audrius

В документации API на сайте плагинов Yoast SEO не было сказано, что такое ID, и у меня нет в распоряжении установленной копии Yoast, но согласно строке yoas-plugin-dir/admin/class-metabox.php 144, зарегистрированный meta_box является;

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

Который подключен к add_meta_boxes ловушке в строке 32 того же файла,

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

Конечно, вы можете получить идентификатор из самого мета-окна на экране редактирования сообщения ... В любом случае.

Вы можете сделать следующее,

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

... где тип сообщения - это тип сообщения, к которому вы хотите применить это ограничение, например, post или пользовательский тип сообщения один или несколько!

Должен сделать свое дело.

обновление:manage_pluginsдолжно было бытьactivate_plugins- исправлено.

19
userabuser

Вы можете удалить его с помощью функции 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' );
}

Обратите внимание на 100000 в add_action, это гарантирует, что это будет сделано после того, как метабокс WP SEO был подключен.

4
Kid Slimmer

Попробуйте вставить это в плагин или файл functions.php темы, в соответствии с WordPress SEO плагин ( API Docs ), Yoast .

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

Чтобы избежать любых ошибок ... Это проверяет, чтобы убедиться, что функция существует, прежде чем пытаться скрыть вещи, позволяя вам деактивировать плагин, а не выбрасывать ошибки.

Возможно, вам придется подключиться к init для правильной работы, что можно сделать так:

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');
4
Michael Ecklund

Вы можете использовать плагин Adminimize, чтобы скрыть элементы от пользователей в зависимости от их ролей. Я использовал это сам, чтобы скрыть некоторые вещи Yoast SEO от клиентов и упростить серверную часть.

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

Довольно просто использовать, добавив селекторы css для элементов, которые вы хотите скрыть. Использовали его, чтобы скрыть вкладки SEO Page Analysis (#linkdex)

2
noelmcg

Ну, есть опция настройки в WordPress SEO от Yoast для отключения расширенной части настроек WordPress SEO для не администраторов. Если вы хотите полностью отключить эту опцию, вы можете использовать другие плагины для удаления элементов страницы редактора постов для не администраторов, например, удаление окна WordPress SEO из редактора сообщений для не администраторов.

0
user36226