Как скрыть записи в блоге от неавторизованных?

169
13 сентября 2018, 10:30

Вот простое требование. Заходишь на сайт как гость и видишь сообщение типа "авторизуйтесь для просмотра записей", войдя на сайта видны все существующие записи в блога. У знакомого другая cms и там такое требование выполняется легко. А вот на wordpress найти не могу. Только закрытие на пароль, где заголовок записей виден. Или же полностью закрытый сайт что видна страница входа только. Такие варианты не подходят. Да и зачем так недоскрывать запись, чтобы был виден ее заголовок а дальше уведомление, что запись на пароле?

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

https://ru.wordpress.org/plugins/blog-post-filter/ в этот плагин удалось реализовать то что нужно, но в нем есть нюанс. записи не скрываются в archive.php странице а только на home page.

function filterCategories($query) {
            if ( !is_user_logged_in() ) {
        if ($query->is_main_query() && is_home()) {
            $categoryList = array();
            $allowed = get_option('blogPostFilterCategories');
            foreach($allowed as $id=>$status)
                if($status==1){
                    $categoryList[] = $id;
                }
            $query->set('cat', implode(',', $categoryList));
        }
      }
    }
Answer 1

Вы можете использовать действие template_redirect для перенаправления конкретных пользователей на основе ваших условий. Этот крюк действия выполняется непосредственно перед тем, как WordPress определяет, какую страницу шаблона загружать. Это хороший крючок для использования, если вам нужно сделать переадресацию с полным знанием содержимого, которое было запрошено.

Вы можете использовать функцию is_page, чтобы проверить погоду, что текущая страница находится в вашем списке страниц или нет.

add_action( 'template_redirect', 'redirect_to_specific_page' );
function redirect_to_specific_page() {
    if ( is_page('slug') && ! is_user_logged_in() ) {
        wp_redirect( 'http://www.example.dev/your-page/', 301 ); 
        exit;
    }
}

Или вместо редиректа вывести надпись что данный блок будет доступен после авторизации.

READ ALSO
Red bean не сохраняет R::store

Red bean не сохраняет R::store

Сохраняю таблицу а б таблице вместо заданых значений Null, хотя значения GET не пустыеПробовал и без даты сохранять, все равно не получается

170
JS при открытии файла PHP его не видит или еще что-то выдает ошибки, как исправить?

JS при открытии файла PHP его не видит или еще что-то выдает ошибки, как исправить?

При работе на локальном сервере все шло отлично(перенес код на Wordpress случились ошибки)Мой JS скрипт не может обратиться к PHP скрипту ,который...

198
Как сойденить webrtc (node.js) с php?

Как сойденить webrtc (node.js) с php?

У меня есть 2 разных части проекта, одна сделана на nodejs - это p2p webrtc видео чат, вторая на php, это парсер

178
Как в 1С:Битрикс сделать многоуровневое меню?

Как в 1С:Битрикс сделать многоуровневое меню?

1С БитриксЕсть меню каталога товаров, в котором много уровней вложенности (например 10)

174