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

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каталоге. Вам нужно выяснить, вызывается ли эта функция и правильно ли она вводит условный оператор, потому что этот обратный вызов работает для меня.
Адам
См. Pastebin.com/nX9ZLubH
Адам,