Скрываем "секретные" рубрики от гостей сайта
-
Делюсь опытом, потратил много времени, может кому пригодится (особенно с последними «нововведениями в законодательстве»).
Встал вопрос — как защитить «секретные» посты от гостей сайта? У мну например регистрация запрещена и пользователи явно прописаны. Но это будет работать и для «незалогинившихся», если вошли без регистрации\авторизации.
Все что ниже — советы не профи, а личные исследования, возможно даже с ошибками, буду рад, если кто поправит (либо решение проще предложит!). Решение не конечное, но рабочее, дан рабочий пример для контента главной, другие странички (поиск например и т.д.) доделаете сами.
История.
Стандартные средства не устроили.
Ессесено перво-наперво были исследованы плагины на эту тему. Мне подошли 2:
https://wordpress.org/plugins/hide-for-group-roles/ (не обновлялся год)
http://gndev.info/shortcodes-ultimate/ (там есть ш\к «только для пользователей»)Первый добавляет при новом посте опции, кому можно пост видеть — по ролям пользователей (а так же дает их редактировать).
Второй дает возможность защитить текст поста, если его заключить в ШК.Однако сами посты видно (заголовки и в зависимости от плагина надпись «нет прав» или «авторизуйтесь»).
Замечание — тут в моих постах ранее есть ссылка на тему создания своего плагина (ссылка на страничку блога тутошнего гуру с картинками, просто очень), ща искать лень и спать пора, а так — все на его основе. Как аналог — можно добавлять в function.php своей темы, но если она обновится, все потрется.
К делу. Добавляем функции
// is user login function gu_is_user_login() { if ( is_user_logged_in() ) { $my_ = 1;} else { $my_ = 0;} return $my_; }
определяет, залогинин ли текущий пользователь. Возвращает Да-1, Нет-0. По каким то причинам простое использование is_user_logged_in() мне не понравилось, т.к. true возвращает только когда залогинин а когда нет — «ничего». Не знаю как это описать, php только начал ковырять, но если сравнивать с др. языками то возвращает что-то типа null. сделал чтобы явно было 0 если нет.
// is cat=... function gu_is_cat($gucatid) { $my_ = 0; foreach((get_the_category()) as $category) { if ($category->cat_ID==$gucatid) {$my_=1;break;} } return $my_; }
проверяет по номеру категории (рубрики), есть ли пост в ней. у поста может быть много категорий, создаем новую для примера «Моя скрытая категория» и смотрим ее номер. Добавляем новый пост, включаем в несколько категорий и в Скрытую тоже. При обращении к функции указываем номер категории (который можно подсмотреть в менеджере категорий, если не понятно ищем в Яндексе или Гугле «wordpress узнать номер рубрики») и если она присвоена посту возвращаем 1. Лучше пока не придумал.
// if no login and cat=... function gu_is_cat2($gucatid) { $my_ = 0; if (gu_is_user_login()==0) { if (gu_is_cat($gucatid)==1) {$my_=1;} } return $my_; }
Соединим 2 функции в новую. Если пользователь — Гость и категория совпала, вернем 1. Нет — 0.
Теперь не трудно понять, как все заюзать.
Допустим ID нашей скрытой категории=444. Идем в content.php нашей схемы, вставляем первой строкой<?php if ( gu_is_cat2(444)==0) : ?>
Т.е. если пользователь Гость и категория поста «Скрытая» — пропустить вывод поста. Если залогинин — покажем как обычно.
Последней строкой в этом же файле добавим
<?php endif; ?>
чтобы закрыть обработку условия, которое задали в начале файла.
Если все сделали верно — при входе на сайт без авторизации — пост в скрытой рубрике вы не увидите. Для других страниц схемы делаем аналогично.
Дополнительно — «режим отладки».
Чтобы посмотреть, как отрабатывают все 3 функции, в content.php в самое начало добавим
<?php echo gu_is_user_login(); echo gu_is_cat(444); echo gu_is_cat2(444); ?>
444 — заменив своим ID скрытой рубрики.
После этого перед каждым постом увидите 3 циферки, что то типа 000, 010, 011, 100 и тд.
++
Ясно, что это пример, основа для дальнейших шагов и творчества. Например, при поиске такие посты будет видно, но войти в них будет нельзя (нужно вносить изменения в search.php схемы) и т.д. Можно пойти дальше и перед<?php endif; ?>
добавить блок условия «else», который, например, будет отвечать за то, что в качестве пропущенного поста будет выводится какая-то рамка в стиле оформления схемы с надписью «Вы могли бы это видеть, если бы авторизовались» (если записей много, то «постраничность» не будет учитывать скрытые). Короче, зависит от Вашей изобретательности.
++
Еще интересно, немного в другом русле: http://wordpress-life.ru/skryit-rubriku-v-wordpress.htmlБуду рад, если кому пригодилось. Замечания и дополнения приветствуются.
- Тема «Скрываем "секретные" рубрики от гостей сайта» закрыта для новых ответов.