Intereting Posts
расположение кладки перекрывается для портфельных проектов с темой orvis и jetpack Свяжите wordpress с SQl + MongoDB + .NET Крючки для сохранения сообщений делают post-new.php для загрузки данных последнего сообщения Настройка XAMPP и Sendmail для включения электронной почты WordPress на локальном хосте Заголовок и почтовый URL на основе пользовательских полей? Загружать родительские файлы тем перед дочерней темой functions.php Автоматически уменьшать размер шрифта для длинных слов Как добавить пользовательский HTML в панель управления WordPress? Как заставить виджет Twitter Tools отображать мои твиты? Многие пользователи со странными именами регистрируются, но не оставляют комментарии. Должен ли я бояться? Как получить ссылку для самого старого настраиваемого типа сообщений (динамически) Пользовательские типы сообщений не отображаются, пользовательский WP_Query Попытка изменить post_content через the_post Просмотр и запрос сообщений с избранным изображением Необходимо создать пользователя admin без возможности создавать пользователя

Скрыть комментарии к сообщениям при отображении через WP_Query

Я написал короткий код, который показывает «x» количество сообщений на главной странице моего сайта, когда я пишу [blog posts_per_page-"3"] . Вот:

 function getBlogPosts($atts) { extract(shortcode_atts(array( "posts_per_page" => '', ), $atts)); $queryArgs = array( "posts_per_page" => $posts_per_page ); $queryPosts = new WP_Query($queryArgs); $output = ""; $output .= "<ul class='articles-list clearfix'>"; if ( $queryPosts->have_posts() ) : while ( $queryPosts->have_posts() ) : $queryPosts->the_post(); $output .= "<li class='clearfix ind-article'> <a class='article-container' href='". get_the_permalink() ."'>"; if (has_post_thumbnail($post->ID)) { $output .= get_the_post_thumbnail($post->ID, 'medium'); // medium img size = 300x300. => make sure photos uploaded are at least 600x600 } $output .= "<div class='article-content'>"; $output .= "<h3 class='entry-title gamma uppercase'>". get_the_title() ."</h3>"; $output .= "<span class='entry-meta'>". get_the_date('l jS F') ."</span>"; $output .= "</div></a></li>"; endwhile; endif; $output .= "</ul>"; return $output; } add_shortcode('blog', 'getBlogPosts'); 

Тем не менее, когда я это делаю, также отображается форма комментария для сообщения в блоге (это определенно форма комментария комментария, а не страница), также кажется, что это только одна форма комментария, поскольку последнее сообщение в блоге, которое я думаю). Я хочу, чтобы комментарии включались, но удаляли комментарий, когда используется короткий код. Как мне это сделать?

Solutions Collecting From Web of "Скрыть комментарии к сообщениям при отображении через WP_Query"

Проблема

Вы должны помнить о вызове основной функции wp_reset_postdata() после цикла while для восстановления глобального объекта $post . Форма комментария опирается на этот объект, который вы переопределяете с помощью $queryPosts->the_post() .

Обратите внимание, что extract() не рекомендуется, например, проверьте этот ответ на @toscho.

Удаление комментариев

Чтобы удалить форму комментария , при использовании короткого кода вы можете проверить мой ответ здесь .

Если вы хотите удалить список комментариев и форму комментариев , после короткого кода, вы можете попробовать один из следующих методов в обратном вызове короткого кода:

Метод # 1 Удалите запрошенные комментарии через фильтры:

 if( is_singular() && post_type_supports( get_post_type(), 'comments' ) ) { // Remove the comment form add_filter( 'comments_open', '__return_false' ); // Remove the list of comments add_filter( 'comments_array', '__return_empty_array' ); } 

Метод №2. get_comments() возвращать пустой массив:

 if( is_singular() && post_type_supports( get_post_type(), 'comments' ) ) { // Remove the comment form add_filter( 'comments_open', '__return_false' ); // Empty comments SQL query - Run only once add_filter( 'comments_clauses', function( $clauses ) { static $count = 0; if( 0 === $count++ ) $clauses['where'] .= ' AND 1=0 '; return $clauses; }); } 

Здесь мы запускаем обратный вызов фильтра только один раз, чтобы предотвратить это, например, от последнего виджета комментариев на боковой панели.

Метод №3 Изменить шаблон комментария через фильтр. Создайте пустой файл comments-empty.php в своей теме и используйте:

 if( is_singular() && post_type_supports( get_post_type(), 'comments' ) ) { // Modify the comment template add_filter( 'comments_template', function( $template ) { if( $tmp = locate_template( 'comments-empty.php' ) ) $template = $tmp; return $template; } ); } 

Вы можете изменить путь к файлу в соответствии с вашими потребностями.

Метод №4 Скрыть его с помощью CSS. Пример:

 if( is_singular() && post_type_supports( get_post_type(), 'comments' ) ) { print '<style> #comments { display: none } </style>'; }