WordPress SEO від Yoast: Сховати мета-коробки в повідомленнях для не-адміністраторів


9

У мене є багатоавторний веб-сайт, і мені не дуже зручно дозволяти всім учасникам вводити інформацію про SEO в публікаціях, які вони публікують. Я хотів би, щоб це було видно лише адміністратору веб-сайту. Будь-які ідеї?

Відповіді:


19

У документах 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- доповнено.


16
+1 для yoast_is_toast().
кайзер

@Ahmad M дякуємо за запропоновані зміни, але $post_typeпараметр аргументу var та action в цьому випадку не потрібен і не видає повідомлення / помилку. Також якщо ви включаєте $post_typevar, вам потрібно визначити тип публікації у межах функції, де ви цього не робили, тож користувач запустив би це, щоб він працював неправильно! У цьому випадку цілком прийнятно передавати ім'я типу посту, тобто як 'post'безпосередньо у remove_meta_boxфункцію. Дякую за пропозицію в будь-якому випадку.
Адам

@userabuser: Дякуємо за роз’яснення, але $post_typeвін уже визначений і готовий до використання add_meta_boxesфункцій гачка дій, будь ласка, перегляньте опис цього гачка дій Адама Брауна . Використовуючи $post_typeв цьому випадку, код зробить незалежним від post_typeекрана редагування, тобто він видалить wpseo_metaметабокс із усіх типів публікацій, на яких він знайдений, і не поверне нічого, якщо wpseo_metaйого не знайдено.
Ахмад М

@AhmadM Спасибі товариш. Я знаю, що вар вже визначений, однак це не робить необхідним перехід до гачка / функції. У цьому випадку ОП хоче видалити мета-поле з типу " postpost_type", тому початкове рішення дозволить детально контролювати. Однак у випадку, коли ви хочете видалити його для всіх типів публікацій, тоді використання вже визначеного var $post_typeє задовільним. Що я зроблю, - це відредагувати свою відповідь, щоб включити ваш додатковий приклад із використанням $post_typeзмінної для ситуацій, коли хтось може захотіти застосувати це до всіх зареєстрованих типів пост_типів.
Адам

5

Спробуйте вставити це у плагін або 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

Ви можете видалити його за допомогою функції 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 в додатку завантаження, це гарантує, що це робиться після підключення метабокса WP SEO.


2

Ви можете використовувати плагін Adminimize, щоб приховати елементи від користувачів залежно від їх ролі. Я використовував це сам, щоб приховати від клієнтів деякі речі Yoast SEO та спростити задню частину.

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

Досить прямо вперед для використання, додавши селектори css для елементів, які ви хочете приховати. Використовували його для приховування вкладок аналізу сторінки SEO (#linkdex)


0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.