WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

Видимость поста для зарегистрированных

Хочу выводить некоторые посты только для зарегистрированных пользователей. Так чтобы этот пост во всех разделах отображался только для зарегистрированных. Подскажите, готовое решение, только без плагинов.

Заметки к вопросу:
lethalblo 17 дней назад

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

mi13 17 дней назад

Используй Проверку на id usera

0
lethalblo
17 дней назад 15
  • 0
    kolshix736 paxtoy.com

    Я для таких целей pre_get_pests юзаю
    Создал отдельную таксономию.
    Ну а дальше только условие.

    https://wp-kama.ru/hook/pre_get_posts
    Вам второй пункт подойдёт, только условие поменять и нужный термин или таксономию полставить

    lethalblo 16 дней назад

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

    add_action( 'pre_get_posts', 'exclude_category' );
    function exclude_category( $query ) {
    	if ( !is_user_logged_in() && $query->is_main_query() ) {
    		$query->set( 'cat', '-1914' );
    	}
    }
    kolshix 16 дней назад

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

        add_action( 'wp', 'template_redirect_fn' );
    		function template_redirect_fn(){
    			if ( is_single() && !is_user_logged_in() ){
    				if( has_term( null, 'post_hidden' ) && !is_user_logged_in () || 
    					has_term( array('123', '456', '789'), 'taxonomy' ) ) {
    					wp_redirect( home_url('') );
    					exit(); 
    				}
    			}
    		}
    
    lethalblo 16 дней назад

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

    add_action( 'pre_get_posts', 'exclude_category' );
    function exclude_category( $query ) {
    	if ( !is_user_logged_in() ) {
    		$query->set( 'cat', '-1914' );
    
    		if (in_category('xity')){
    		wp_redirect( home_url('') );
    					exit(); 
    		}           
    	}
    }
    
    mi13 16 дней назад

    воткнуть подмену шаблона, это делать редирект на заготовленную страницу?

    wp_redirect( get_permalink($id страницы) )

    может так.

    Комментировать
  • 0
    Andrew481 america-xix.ru

    как вариант - сохранять произвольное метаполе для записи, которая только для авторизованных.

    Далее в фильтре pre_get_posts проверять - залогинен ли пользователь(https://wp-kama.ru/function/is_user_logged_in) и если нет, то получать массив ID постов, для которых сохранено метаполе, и добавлять его в параметр 'exclude' основного запроса. Имейте в виду, что для этого параметра массив придется преобразовать в строку (склеить запятой или пробелом)

    Andrew 15 дней назад

    Более удобный и наглядный вариант - добавьте в CMS произвольный статус записи, специально под записи для авторизованных. https://wp-kama.ru/function/register_post_status

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

    mi13 15 дней назад

    Сложная схема, я бы сделал через post-formats

    Andrew 15 дней назад

    через мета-поле - согласен. У способа через статус есть свои преимущества

    mi13 15 дней назад

    То есть если я публикую пост и у меня есть хуки повешанные на событие публикации,при смене статуса не возникнит ли проблем со всем этим. Извините если что не понял.

    Andrew 15 дней назад

    если в хуке есть проверка на статус и при несовпадении статуса с publish происходит возврат из функции, то вам придется добавить новый статус в условие

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация