Intereting Posts
Создание нескольких функций поиска для сообщений / пользовательских типов сообщений и всего Фильтр WordPress template_include не работает должным образом Как я могу создать свой подкаст? достаточные разрешения для доступа к этой странице Какие хорошие плагины для начинающих? Огромное количество запросов на моем сайте Clone a Post Tite и настраиваемое поле в пользовательский тип сообщения сохраняйте переменную, заданную в header.php, вплоть до footer.php Отображение списка страниц и настраиваемого поля Как обновить предварительный просмотр, когда пользовательские настройки изменились в моем пользовательском виджете Пользовательские данные метаданных в rss-канале Экспорт сообщений WordPress и метаданных в формате CSV add_rewrite_rule больше не работает – возможно ли https? WordPress Customizer не устанавливает значение по умолчанию при первоначальной установке? Что такое перехват CODEX для wp-login.php? Action = lostpassword

Получить количество комментариев после изменения запроса комментария

Я изменил аргументы запроса comment-template.php в comment-template.php из

 $author_id = get_query_var( 'author_id', 1 ); $comment_args = array( 'order' => 'ASC', 'orderby' => 'comment_date_gmt', 'status' => 'approve', ); $comments = get_comments( $comment_args ); 

на следующий код ниже

 $author_id = get_query_var( 'author_id', 1 ); if($author_id == '') { $comment_args = array( 'order' => 'ASC', 'orderby' => 'comment_date_gmt', 'status' => 'approve', ); } else { $comment_args = array( 'order' => 'ASC', 'orderby' => 'comment_date_gmt', 'status' => 'approve', 'meta_key' => 'custom_author_id', 'meta_value'=> $author_id, ); } $comments = get_comments( $comment_args ); 

Я хотел бы знать, как изменить количество комментариев, которые будут различаться, т.е. get_comments_number()

Solutions Collecting From Web of "Получить количество комментариев после изменения запроса комментария"

Воздержитесь от редактирования файлов ядра

WordPress был разработан с учетом расширяемости и предоставляет множество способов изменить внешний вид и функциональность установки без изменения самого программного обеспечения WordPress (в основном с использованием Hooks вместе с плагинами и темами ). Программное обеспечение состоит из «основных файлов», которые обычно находятся за пределами каталога ./wp-config.php , кроме ./wp-config.php , и любых файлов конфигурации сервера на уровне каталогов ( .htaccess и т. Д.).

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

Вместо того, чтобы изменять основной файл ./wp-includes/comment-template.php , более ./wp-includes/comment-template.php решением было бы создать файл шаблона comments.php в вашей настраиваемой теме (или дочернюю тему вашей текущей темы, если она была разработана сторонний) и использовать WP_Comment_Query в нем, чтобы указать ваши новые аргументы. Используйте аргументы number и offset чтобы указать желаемый диапазон комментариев.

Файл шаблона ./wp-content/themes/wpse202457_theme/comments.php :

 <?php $author_id = get_query_var( 'author_id', '' ); $comments = array(); if( $author_id != '' ) { $comment_args = array( 'order' => 'ASC', 'orderby' => 'comment_date_gmt', 'status' => 'approve', 'meta_key' => 'custom_author_id', 'meta_value' => $author_id, 'number' => 20, // Retrieve 20 comments... 'offset' => 40 // ...starting from the 40th comment. ); $comment_query = new WP_Comment_Query; $comments = $comment_query->query( $comment_args ); } if( ! empty( $comments ) ) { // The Comments Loop foreach( $comments as $comment ) { echo( '<p>' . $comment->comment_content . '</p><br/><br/>' ); } } else { echo( '<p>No comments found</p>' ); } ?> 

Ознакомьтесь с этим замечательным вопросом о том, как обрабатывать комментарии на страницах (разбиение на страницы) с использованием динамических number и аргументов offset . Копайте в другой файл comments.php для некоторых примеров разметки.

Вместо создания нового шаблона темы вы можете поочередно разместить свой шаблон замещающих комментариев в плагине и использовать фильтр comments_template для перенаправления в него шаблонов шаблонов комментариев:

Файл плагина ./wp-content/plugins/wpse202457_comments_plugin/wpse202457CommentsPlugin.php :

 function wpse202457_comments_template( $comment_template ) { // Redirect ALL comment template inclusions to "./wp-content/plugins/wpse202457_comments_plugin/comments.php" return dirname(__FILE__) . '/comments.php'; } add_filter( 'comments_template', 'wpse202457_comments_template' ); 

ДОПОЛНЕНИЕ

В ответ на комментарии, как предложила get_comments_query() функция get_comments_query() вернет только число комментариев, записанных для объекта post, отображаемого в основном запросе.

Чтобы получить количество комментариев для вашего измененного запроса, просто count() результаты запроса, то есть:

 $comment_query = new WP_Comment_Query; $comments = $comment_query->query( $comment_args ); $comment_count = count( $comments ); 

Однако , если вы используете аргумент number для указания количества комментариев, которые хотите получить, тогда $comment_count всегда будет равен или меньше number . Чтобы получить общее количество комментариев, соответствующих вашим аргументам, вам нужно будет либо опустить аргумент number и count() , либо задать аргумент count true , и в этом случае запрос вернет количество соответствующих комментариев без возврата сами комментарии:

 $author_id = get_query_var( 'author_id', 1 ); $comment_args = array( 'status' => 'approve', 'meta_key' => 'custom_author_id', 'meta_value' => $author_id, 'count' => true // Return the NUMBER of matching comments, not the matching comment objects themselves ); $comment_query = new WP_Comment_Query; $comment_count = $comment_query->query( $comment_args ); 

Если вы не планируете делать что-либо еще с объектом WP_Comment_Query , вам может понадобиться создать некоторые удобные функции и поместить их в свой плагин или в functions.php вашей пользовательской темы для быстрого доступа. Что-то вроде:

 // Get comments with a custom_author_id meta-value of $author_id function wpse202471_get_author_comments( $author_id = null, $args = array() ) { // If an author id was not passed, see if there's one in the query vars if( ! isset( $author_id ) ) $author_id = get_query_var( 'author_id', null ); // If no author id was provided, return a negative result if( ! isset( $author_id ) ) { if( isset( $args[ 'count' ] ) && $args[ 'count' ] ) return 0; return array(); } // Merge query argument arrays $comment_args = array_merge( array( // Default values 'order' => 'ASC', 'orderby' => 'comment_date_gmt', 'status' => 'approve' ), $args, // Any arguments passed to the function array( // Merge meta-arguments last, so nothing can overwrite them 'meta_key' => 'custom_author_id', 'meta_value' => $author_id ) ); // Perform the query and return the results $comment_query = new WP_Comment_Query; return $comment_query->query( $comment_args ); } // Get the total number of comments with a custom_author_id meta-value of $author_id function wpse202471_get_author_comment_count( $author_id = null, $args = array() ) { $args[ 'count' ] = true; // Remove query arguments that would prevent the proper count from being returned if( isset( $args[ 'number' ] ) ) unset( $args[ 'number' ] ); if( isset( $args[ 'offset' ] ) ) unset( $args[ 'offset' ] ); return wpse202471_get_author_comments( $author_id, $args ); } 

get_comments_number() не полагается на какой-либо комментарий, он просто сообщает количество сохраненных комментариев в post object (свойство comment_count ).

В вашем примере вы опустили, как выглядит сам запрос. Если вы используете фактический объект WP_Comment_Query тогда его свойство comments будет иметь массив результатов, которые вы могли бы count() . Если использование функций API может стать более беспорядочным.