• Делюсь опытом, потратил много времени, может кому пригодится (особенно с последними «нововведениями в законодательстве»).

    Встал вопрос — как защитить «секретные» посты от гостей сайта? У мну например регистрация запрещена и пользователи явно прописаны. Но это будет работать и для «незалогинившихся», если вошли без регистрации\авторизации.

    Все что ниже — советы не профи, а личные исследования, возможно даже с ошибками, буду рад, если кто поправит (либо решение проще предложит!). Решение не конечное, но рабочее, дан рабочий пример для контента главной, другие странички (поиск например и т.д.) доделаете сами.

    История.

    Стандартные средства не устроили.
    Ессесено перво-наперво были исследованы плагины на эту тему. Мне подошли 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

    Буду рад, если кому пригодилось. Замечания и дополнения приветствуются.

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • что-то вы слишком заумно придумали.
    я бы тупо «секретные» записи запихивал в специальную рубрику, которую бы скрывал от гостей сайта простейшим фильтром.

    при желании можно еще кучу способов придумать.
    а вы что-то уж совсем заумное построили.

    >> простейшим фильтром.
    если не сложно, можно подробнее, в этом случае например, как скрыть рубрику 444 (посты в ней) от гостей — фильтром?

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Тема «Скрываем "секретные" рубрики от гостей сайта» закрыта для новых ответов.