Intereting Posts
<a> с PHP внутри разделяет ссылку Изменения API пользовательской настройки темы не сохраняются Как ограничить функциональность плагина woocommerce только определенной ролью пользователя? Перевести сайт на собственный текстовый язык Кажется, не фильтрует wp_query по идентификатору текущей категории Создавать и обновлять пользовательские файлы cookie на основе нескольких значений GET и POST для посетителей первого раза? Постоянная ссылка только с номерами Как BuddyPress загружает контент на такие страницы, как «Члены», «Активность» и т. Д.? Добавление «продолжить редактирование моего последнего черновика» в панель администратора Как показать динамическую боковую панель в пункте меню Как разрешить роли редактора изменять параметры темы? Форма входа комментария видна мне, но не пользователю Почему я не могу редактировать определенные изображения из библиотеки WordPress Media? Render P2P метаболизм за период таксономии Как обернуть метазначения, разделенные запятой в <span>?

Скрыть комментарии к сообщениям при отображении через 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'); 

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

Проблема

Вы должны помнить о вызове основной функции 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>'; }