Ответы:
В документации по API на сайте плагинов Yoast не было сказано, что это 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
- исправлено.
$post_type
параметр аргумента var и action в этом случае не требуется и не выдает уведомление / ошибку. Также, если вы включите $post_type
var, вам нужно определить тип записи в функции где-то еще, чего вы не делали, так что пользователь мог бы запустить ее, чтобы она работала неправильно! В этом случае вполне допустимо передавать имя типа сообщения, то есть 'post'
непосредственно в remove_meta_box
функцию. В любом случае, спасибо за предложение.
$post_type
он уже определен и готов к использованию add_meta_boxes
функциями ловушек действий, см. представление Адама Брауна об этой ловушке действий. Использование $post_type
в этом случае сделает код независимым от post_type
экрана редактирования, а это означает, что он удалит wpseo_meta
мета-поле из всех типов сообщений, в которых он найден, и не вернет ничего, если wpseo_meta
он не найден.
post
post_type, поэтому первоначальное решение позволит получить детальный контроль. Однако в случае, если вы хотите удалить его для всех типов записей, тогда использование уже определенного var $post_type
вполне приемлемо. Что я сделаю, так это отредактирую свой ответ, включив в него ваш дополнительный пример, используя $post_type
переменную для ситуаций, когда кто-то может захотеть применить это ко всем зарегистрированным типам post_type.
Попробуйте вставить это в плагин или 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');
Вы можете удалить его, используя функцию 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 был подключен.
Вы можете использовать плагин Adminimize, чтобы скрыть элементы от пользователей в зависимости от их ролей. Я использовал это сам, чтобы скрыть некоторые вещи Yoast SEO от клиентов и упростить серверную часть.
http://wordpress.org/extend/plugins/adminimize/
Довольно просто использовать, добавив селекторы css для элементов, которые вы хотите скрыть. Использовали его, чтобы скрыть вкладки SEO Page Analysis (#linkdex)
Ну, есть опция настройки в WordPress SEO от Yoast для отключения расширенной части настроек WordPress SEO для не администраторов. Если вы хотите полностью отключить этот блок, то вы можете использовать другие плагины для удаления элементов страницы редактора сообщений для не администраторов, например, для удаления окна WordPress SEO из редактора сообщений для администраторов.
yoast_is_toast()
.