Intereting Posts
Сортировка объекта $ posts ACF, который уже был отсортирован Как перенаправить одно сообщение в родительскую категорию Правильно настройте запись SPF / DMARC для работы с WordPress Ошибка базы данных после импорта WordPress Невозможно добавить класс в тег h2 Как я понимаю, какая страница моей темы загружается? Показать меню на боковой панели, если на конкретной странице и конкретной роли пользователя (is_page, current_user_can) Как обновить размеры пользовательских изображений? Страницы, пользовательские сообщения и пользовательская таксономия, определяющие структуру слизняков Получение текущего пользователя Показать все родительские страницы и их детей ниже от того же автора, что и в настоящее время просматривается страница WooCommerce: измените тип billing_city при изменении billing_country ссылка на главную страницу (для wp multisite) Добавление расширений файлов к прикрепленным страницам Как обновить термины в базе данных из конкретной таксономии без плагина?

Полностью ограничить таксономию типа сообщения для зарегистрированных пользователей

Я зарегистрировал тип публикации employers с несколькими связанными таксономиями и хочу, чтобы все связанные страницы (однократные, временные архивы, страница архива типа публикации) просматривались только зарегистрированными пользователями.

Я играл с аргументом capabilities для register_post_type() и смотрел на фильтр map_meta_cap , но просто не мог собрать все вместе. Кажется, что, возможно, мне нужно использовать пользовательские возможности, но это похоже на перебор для этой функции. Я также видел некоторые ссылки на использование функции template_redirect но не уверен, что это правильный путь.

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

Я видел « Ограничить пользовательский тип типа публикации по роли пользователя », но это только фильтры the_content . Я также много смотрел в разделе « Ограничить настраиваемый тип сообщений только ролью администратора сайта », но он больше подходит для зарегистрированных пользователей. Наконец, « Установить записи персонализированного типа сообщений, которые будут закрыты по умолчанию? » Устанавливает только статус сообщения, означающий, что редактор может случайно опубликовать публикацию, которая является обработчиком транзакций.

Я столкнулся с подобными ситуациями (например, клиент хочет увидеть, как ведет себя пользовательский тип сообщения и / или таксономия, прежде чем они будут готовы для широкой публики). В таких случаях я буду использовать что-то вроде следующего фрагмента кода, добавленного либо в файл плагина (если я построил CPT / таксономию как плагин), либо непосредственно в функции активной темы. Php:

 /** * IN-DEVELOPMENT REDIRECTS * While specified areas are under development, redirect users to home page if not logged in */ add_filter( 'wp', 'f040925b_redirect', 0 ); function f040925b_redirect( $content ) { global $post; if( ( $post->post_type == '[custom_post_type_name]' || is_post_type_archive( '[custom_post_type_name]' ) || is_tax( '[custom_taxonomy_name]' ) ) && !is_user_logged_in() ) { wp_redirect( get_home_url() ); exit; } return $content; } 

По сути, это запускает три ранних проверки:

  1. Создает ли тип post post $ post объект, который вы пытаетесь скрыть?
  2. Является ли этот URL-адрес архивом типа post для типа сообщения, которое вы пытаетесь скрыть?
  3. Является ли этот URL-адрес таксономией / термином для таксономии, которую вы пытаетесь скрыть?

Если какой-либо из них является совпадением, и пользователь не вошел в систему, пользователь перенаправляется на домашнюю страницу сайта.

Возможно, я неправильно понимаю, что вы хотите, но вы можете сделать это с помощью current_user_can () в своем шаблоне.

 if( ! current_user_can( 'read' ) { echo "You must log in to see this content."; } else { //The Loop goes here } 

Проблема заключается в том, что он не кэширует; или, по крайней мере, он недостаточно хорошо кэшируется, особенно если вы используете кеш-файл.