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


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

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

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

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

Заранее благодарю.

Author: EliasNS, 2014-07-28

3 answers

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

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-специалисты не смогут получить доступ ни к одному из важнейших параметров. Насколько мне известно, приведенные ниже страницы - единственный способ, которым этот пользователь может редактировать важную информацию. ЕСЛИ они действительно просматривают эти страницы, мы убиваем их и выплевываем сообщение, не стесняйтесь изменять сообщение.

/** 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) И с тобой покончено!

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

 7
Author: Howdy_McGee, 2014-07-28 15:10:48

Лучший способ изменить возможности, необходимые пользователям для просмотра страниц настроек SEO Yoast, - это использовать фильтр 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 по умолчанию) как редакторы, так и администраторы могли получить доступ к настройкам SEO Yoast.

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

Плагин для участников от Джастина Тэдлока позволяет вам легко создавать новые роли и возможности для этого.

Примечание: Это может не работать на нескольких сайтах из-за этой проблемы.


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

 4
Author: Matt Sims, 2017-09-27 11:40:23

Я только что нашел очень простое решение. Если вы еще этого не сделали - установите какой-либо плагин менеджера возможностей. Затем создайте новую возможность в диспетчере возможностей - назовите ее "CUSTOM_CAPABILITY_NAME" или как хотите. Затем назначьте его определенной роли или пользователю.

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

Затем на реальном сервере вам нужно изменить каталоги вплоть до wp-контента/плагинов/, а затем grep и найдите все файлы, у которых есть "manage_options".

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

Сложная часть, вам нужно будет найти основную функцию, которая добавляет меню или подменю на панель мониторинга. Вот два моих примера для конкретного доступа к 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 - не меняйте ничего, что начинается с "$" - это переменная. :)

 1
Author: Fabian, 2016-04-08 23:10:27