Intereting Posts
Нет изображения с изображением в заголовке get_page_by_title () ничего не возвращает Динамически зависимые раскрывающиеся списки для категорий, подкатегорий и сообщений Плагин, чтобы скрыть меню администратора (вертикальная панель меню) Проблема с использованием Customizer URL-адреса изображений перестали работать из-за постоянных ссылок? получить URL-адрес аватара вместо тега html img при использовании get_avatar? Должен ли я использовать wpdb? Автоматически добавлять дочерние страницы, когда создается новый сайт wp_get_attachment_image_src () width и height boolean Если обычная таксономия существует на почте? Проверьте, находится ли сообщение в проекте или в ожидании проверки? Аутентификация пользовательского поля при входе в систему Создание плагина, уникального для того, чтобы не противоречить плагинам с тем же именем / page / не работает с пользовательской структурой постоянной ссылки (WooCommerce)

Как изменить способность, необходимую для доступа к параметрам плагина?

У меня есть следующие три разные роли : Admin , Editor и SEO . Я установил WordPress SEO от Yoast, и я хочу это сделать:

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

Я пытаюсь с некоторыми фрагментами с этого сайта, и я могу скрыть мета-окно для Editors , но не небольшую «рейтинговую шкатулку» над кнопкой « Опубликовать» .

Также я не знаю, как справиться со вторым моментом, потому что все плагины используют ту же manage_options , поэтому я не могу назначить эту функцию роли SEO . И я не знаю, как изменить необходимую возможность без изменения файлов плагинов (что будет потеряно при обновлении плагинов).

Заранее спасибо.

Возможно, это не лучший метод, потому что он дает редактору доступ к настройкам и параметрам, но то, что это делает, дает конкретный редактор (на основе идентификатора пользователя) разрешения для редактирования параметров. Затем мы тестируем, если мы загружаем один из шаблонов параметров, если мы И Идентификатор пользователя – это тот же самый идентификатор, который мы дали разрешениям, убить процесс и выплюнуть сообщение.

1) Итак, во-первых, создайте своего пользователя SEO и назначьте ему роль редактора.

2) Затем нам нужно дать этому пользователю возможность manage_options . Вы можете найти это, отредактировав пользователя и посмотрев URL-адрес, он должен быть одним из последних параметров в URL-адресе.

 /** Give our SEO Guy Permissions **/ function give_seo_yoastToast() { $user = new WP_User( $seo_user_id ); $user->add_cap( 'manage_options'); } add_action( 'admin_init', 'give_seo_yoastToast'); 

3) Теперь нам нужно убедиться, что все наши SEO dudeski не могут получить доступ к каким-либо критическим параметрам. Насколько мне известно, страницы, приведенные ниже, являются единственным способом, которым этот пользователь может редактировать важную информацию. ЕСЛИ они действительно просматривают эти страницы, мы убиваем его и выплевываем сообщение, не стесняемся менять сообщение.

 /** Remove Access to Certain Pages **/ add_action( 'load-options-general.php', 'prevent_seoguy_access' ); add_action( 'load-options-writing.php', 'prevent_seoguy_access' ); add_action( 'load-options-reading.php', 'prevent_seoguy_access' ); add_action( 'load-options-discussion.php', 'prevent_seoguy_access' ); add_action( 'load-options-media.php', 'prevent_seoguy_access' ); add_action( 'load-options-permalink.php', 'prevent_seoguy_access' ); add_action( 'load-options.php', 'prevent_seoguy_access' ); function prevent_seoguy_access(){ $currID = is_user_logged_in() ? get_current_user_id() : 0; if($currID == $seo_user_id ){ wp_die("There was a hole here once, it's gone now."); exit(); } } 

4) Сейчас он может просматривать страницы в меню, но когда он обращается к ним, он видит сообщение выше. Как дополнительный шаг, давайте фактически удалим эту страницу из нашего меню. Обратите внимание: если вы удалите страницу меню без указанной функции, опытный пользователь может перейти на любую из страниц параметров напрямую через URL.

 /** Remove Settings Menu Page from SEO Guy **/ function seo_guy_menu() { if(!current_user_can('administrator')){ remove_menu_page('options-general.php'); } } add_action('admin_menu', 'seo_guy_menu'); 

5) И все готово!

К сожалению, как вы указали в своем вопросе, Yoast не похож, что он имеет возможность предоставить пользователю определенное разрешение на все материалы SEO, не предоставляя им лишних дополнительных разрешений, а также какой отстой. И на другом сборе вы могли бы вместо статического $seo_user_id сделать SEO-роль вместо этого, предоставить разрешения для этого ролевого редактора вместе с вышесказанным. Это немного больше работы (не слишком много, хотя), но если у вас всего один парень, который делает ваш SEO навсегда, то вышеупомянутый метод в порядке, я думаю.

Лучший способ изменить возможности, которые пользователи должны просматривать на страницах настроек Yoast SEO, – это использовать фильтр wpseo_manage_options_capability .

Вот пример того, как это используется (помещается в файл functions.php ):

 /** * Return the capability that users need to view the Yoast SEO settings pages. * * @return mixed|void */ function my_custom_wpseo_manage_options_capability() { $manage_options_cap = 'edit_others_posts'; return $manage_options_cap; } add_filter( 'wpseo_manage_options_capability', 'my_custom_wpseo_manage_options_capability' ); 

В приведенном выше примере edit_others_posts используется так, что (при установке WordPress по умолчанию) и редакторы, и администраторы могут получить доступ к настройкам Yoast SEO.

В вашем случае, когда вы не хотите, чтобы «нормальные» редакторы имели доступ, вам нужно создать новую роль (то есть «SEO»), которая имеет те же возможности, что и редактор, плюс дополнительные пользовательские возможности (например, manage_wpseo_options ), которые может использоваться в функции выше вместо edit_others_posts .

Плагин Members от Justin Tadlock позволяет вам легко создавать новые роли и возможности для этого.

Примечание. Это может не работать в Multisite из-за этой проблемы .


Обновление: в Yoast SEO v5.5 + фильтр wpseo_manage_options_capability был переименован в wpseo_manage_options .

Я просто нашел очень простое решение. Если вы еще не установили плагин менеджера возможностей. Затем создайте новую возможность из диспетчера возможностей – назовите его «CUSTOM_CAPABILITY_NAME» или что хотите. Затем назначьте его определенной роли или пользователю.

Важно : копирование и резервное копирование и файл, который вы собираетесь изменить, в случае, если вы f * ck up, вы всегда можете восстановить оригинал.

Затем на реальном сервере вам нужно сменить директории на wp-content / plugins /, а затем grep и найти все файлы с «manage_options».

Пример: grep 'manage_options' */*

Сложная часть, вам нужно будет найти основную функцию, которая добавляет меню или подменю в панель инструментов. Вот мои два примера для Yoast SEO конкретного доступа.

 $manage_options_cap = apply_filters( 'wpseo_manage_options_capability', 'CUSTOM_CAPABILITY_NAME' ); add_submenu_page( 'wpseo_dashboard', __( 'WooCommerce SEO Settings', 'yoast-woo-seo' ), __( 'WooCommerce SEO', 'yoast-woo-seo' ), 'CUSTOM_CAPABILITY_NAME', $this->short_name, array( 

PS – ничего не меняйте, начиная с «$» – это переменная. 🙂