Как не позволить пользователям создавать новые теги, но разрешать им использовать существующие


9

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

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

Есть ли плагин или функция, которая сделает это для меня?

Ответы:


10

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

function disallow_insert_term($term, $taxonomy) {

    $user = wp_get_current_user();

    if ( $taxonomy === 'post_tag' && in_array('somerole', $user->roles) ) {

        return new WP_Error(
            'disallow_insert_term', 
            __('Your role does not have permission to add terms to this taxonomy')
        );

    }

    return $term;

}

add_filter('pre_insert_term', 'disallow_insert_term', 10, 2);

Это не позволит пользователю вставлять новые термины, но позволит им искать и добавлять существующие термины в сообщение.

Имейте в виду, что на экране редактирования поста пользователь может ввести имя термина, который не существует, и нажать клавишу ввода или нажать кнопку добавления, которая добавит термин в DOM, однако в этот момент термин не добавляется в базу данных до тех пор, пока Пользователь публикует или обновляет сообщение, после чего термин будет запрещен.


Привет, спасибо за помощь :) Я попробовал это, но, похоже, ничего не сделал. Я буду честен и скажу, что это, вероятно, моя вина. Я скопировал, вставил твой код в свои функции и, конечно, изменил бит «somerole». Добавление тегов все еще возможно для этой роли.
— Йорн Ройверс

Какую роль пользователя вы пытаетесь предотвратить? Также вы пытаетесь запретить теги для правильной таксономии, в данном случае, post_tagа не какую-то другую таксономию categoriesили какую- то другую таксономию?
— Адам

Я пытаюсь помешать роли редактора сделать это в данный момент. И это стандартная таксономия (так что должно быть post_tag), я еще ничего не создал, так как я все еще тестирую.
— Йорн Ройверс

Пришло время начать отладку. В wp-config.phpнаборе следующих констант, define('WP_DEBUG', true);, define('WP_DEBUG_LOG', true);и define('WP_DEBUG_DISPLAY', false);затем в функции фрагмента кода выше, бревенчатым вызов error_log($taxonomy);и другой вызов error_log(implode(', ', $user->roles));затем добавить тег затем обновить пост, это будет затем создать debug.logфайл в wp-contentкаталоге. Вам нужно выяснить, вызывается ли эта функция и правильно ли она вводит условный оператор, потому что этот обратный вызов работает для меня.
— Адам

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.