Вопрос или проблема
У меня есть только фронтенд блок, и мне нужно ограничить доступ к категории только для авторизованных пользователей, так что автор создает категорию, и эту категорию видит только этот текущий автор, а не другие пользователи. Есть ли здесь какой-либо способ/плагин в WordPress?
edit1:
Мой вопрос похож на этот:
Ограничение пользователей на просмотр только тех пользовательских таксономий, которые они внесли?
но я не знаю, как это реализовать для моего случая.
edit2:
Я добавил мета-поля терминов в таксономию с помощью этого плагина:
https://fuc.wordpress.org/plugins/wp-custom-taxonomy-meta/
Так что я связываю мета-данные пользователя с таксономией (категорией).
Как я могу реализовать get_terms и wp_dropdown_cats, чтобы показать таксономию только для текущего авторизованного автора (фронтенд пользователя)?
Внутри цикла while файла single.php вы можете поставить условие, как это:
if(in_category('Catetory_slug')){ //Указание категории, которую мы не хотим видеть неавторизованными пользователями
if(is_user_logged_in()){ //Проверка, авторизован ли пользователь или нет
//код внутри single.php
}else{
Echo "Вам нужно войти, чтобы увидеть этот пост."; //сообщение для неавторизованных пользователей
}}
Это можно сделать и для других шаблонов файлов темы, как мы сделали для single.php.
ОБНОВЛЕНИЕ
Если вы хотите, чтобы один пользователь не мог видеть посты другого пользователя, вы можете использовать эти две функции для достижения этого
- get_the_author(): Чтобы получить отображаемое имя автора поста
- wp_get_current_user(): Чтобы получить информацию о авторизованном пользователе
Используйте следующее внутри цикла while
//сохраняем отображаемое имя автора в переменную
$post_author = get_the_author();
$current_user = wp_get_current_user();
//сохраняем отображаемое имя автора в переменную
$current_user_info = $current_user->display_name;
//Проверка, равны ли обе строки (имена отображения)
if (strcmp($post_author, $current_user_info) == 0) {
//Ваш код для отображения содержимого поста
}
Вы также можете поставить условие if по ID вместо отображаемого имени. Для этого нужно сделать 2 изменения в приведённом выше коде
- заменить
get_the_author()
наget_the_author_meta()
-
и заменить следующую строку кода
$current_user_info = $current_user->display_name;
на эту
$current_user_info = $current_user->ID;
Чтобы узнать больше, прочитайте о этих функциях подробнее по моей ссылке.
Ответ или решение
Для выполнения задачи ограничения доступа к категории в WordPress таким образом, чтобы только автор мог видеть свои категории и записи, вам необходимо реализовать несколько функций. Ниже представлен подробный план шагов, которые помогут вам настроить видимость категорий для авторизованных пользователей, а также некоторые примеры кода.
Шаг 1: Ограничение видимости категорий по автору
Чтобы ограничить видимость категорий и записей, создаваемых пользователем, вы можете использовать функции, которые предоставлены WordPress. Первое, что нужно сделать, это убедиться, что посты и категории видны только их создателям. Вы можете использовать следующий код, который следует поместить в файлы шаблона вашего сайта (например, single.php
, archive.php
и т. д.):
// Получаем информацию о текущем авторе поста
$post_author_id = get_the_author_meta('ID');
$current_user_id = get_current_user_id();
if ($post_author_id !== $current_user_id) {
// Если текущий пользователь не совпадает с автором поста
echo "Вы должны войти, чтобы видеть этот контент.";
} else {
// Код для отображения контента поста
the_content();
}
Шаг 2: Фильтрация категорий
Для фильтрации категорий в зависимости от пользователя, вам необходимо использовать функцию get_terms()
. Это можно сделать путем добавления метаполя к вашим категориям и фильтрации их по идентификатору пользователя. Предположим, что вы уже добавили мета-поля к своей таксономии с помощью плагина, который упоминается в вашем вопросе.
// Получаем текущего пользователя
$current_user_id = get_current_user_id();
// Получаем все категории с метаданными пользователя
$terms = get_terms(array(
'taxonomy' => 'category',
'meta_query' => array(
array(
'key' => 'auth_user_id', // Пожалуйста, замените на ваше реальное метаполе
'value' => $current_user_id,
'compare' => '='
)
)
));
if (!empty($terms) && !is_wp_error($terms)) {
// Выводим категории, доступные текущему пользователю
foreach ($terms as $term) {
echo '<ul>';
echo '<li>' . esc_html($term->name) . '</li>';
echo '</ul>';
}
}
Шаг 3: Проверка состояния пользователя
Вам нужно убедиться, что пользователь авторизован, прежде чем выполнять вышеуказанные действия. Используйте следующую проверку перед основной логикой:
if (is_user_logged_in()) {
// Вставить код ограничения визуализации категорий и постов здесь
} else {
echo "Для просмотра контента вам необходимо войти в систему.";
}
Шаг 4: SEO и удобство использования
Для улучшения SEO вашего контента убедитесь, что ваш код возвращает правильные метатеги, заголовки и описания. Не забывайте о структурировании контента, использовании заголовков и предоставлении четких сообщений об ошибках для пользователей, не авторизованных в системе.
Заключение
Приведенные выше шаги помогут вам ограничить доступ к категориям и записям на вашем сайте, обеспечивая, чтобы только авторы могли видеть свой собственный контент. Помните, что аккуратная работа с кодом и проверка его на наличие ошибок – ключевой момент для достижения успешного результата. Blade, чтобы глубже понять функции, используемые в вашем проекте, вы можете обратиться к официальной документации WordPress.