Поддержка Проблемы и решения Запретить просмотр комментов гостям

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

Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Можно добавить фрагмент в файл functions.php активной темы (или оформить в виде плагина):

    function hide_comments_for_guests( $comments ) {
    	if ( ! is_user_logged_in() ) {
    		$comments = array();
    	}
    
    	return $comments;
    }
    add_filter( 'comments_array', 'hide_comments_for_guests' );
    
    function hide_comments_number_for_guests( $count ) {
    	if ( ! is_user_logged_in() ) {
    		$count = 0;
    	}
    
    	return $count;
    }
    add_filter( 'get_comments_number', 'hide_comments_number_for_guests' );
    
    function disable_comment_form_for_guests( $open ) {
    	if ( ! is_user_logged_in() ) {
    		$open = false;
    	}
    
    	return $open;
    }
    add_filter( 'comments_open', 'disable_comment_form_for_guests' );

    Здесь три функции: первая скрывает существующие комментарии для гостей, вторая скрывает их количество, третья отключает форму комментирования.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Более короткий вариант (все три действия в одной функции):

    function hide_comments_for_guests() {
    	if ( is_user_logged_in() ) {
    		return;
    	}
    
    	add_filter( 'comments_array',      '__return_empty_array' );
    	add_filter( 'get_comments_number', '__return_zero' );
    	add_filter( 'comments_open',       '__return_false' );
    }
    add_action( 'init', 'hide_comments_for_guests' );

    Спасибо, попробую

    Работает, благодарю

    ++ Расширю вопрос (хотел отдельным постом, но теперь не знаю, как тут удалить)

    Как скрыть посты от гостей, но не все, а которые нужно

    Используются плагины:

    https://44gu.ru/wp-admin/plugin-install.php?tab=plugin-information&plugin=hide-for-group-roles&TB_iframe=true&width=600&height=550
    http://gndev.info/shortcodes-ultimate/ (ШК: «пользователи»)

    Почти все устраивает в обоих (в принципе первого хватает), за исключением — сами новости видны. Т.е. На главной видно новость например «Скрытая», к которой при формировании были назначены все роли кроме визитеров (1й плагин) или «вы можете прочесть если войти» (во втором). Т.е. заголовки новостей видно, а содержимое нет (надпись «войдите»). Как убрать и заголовки?

    А нельзя ли сделать как тут (Решение, которое предложил Серега, работает на «ура», оч. понравилось (думаю, что многие оценят, кто искал). Может и для постов тоже можно так же)?

    Чтобы без регистрации были видны только новости одобреные 1м плагином или например каким-то доп.полем (вкл»произвольные поля» при написании) в посте дополнительным (например добавить поле guest с volume 0\1)?

Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Тема «Запретить просмотр комментов гостям» закрыта для новых ответов.