Intereting Posts
Вручную установите глобальные $ post vars с идентификатором, чтобы использовать теги шаблонов Удалить границу изображения в 20-й теме мета-контент на требуемых страницах Как получить доступ к данным wp_usermeta сразу после создания нового пользователя Как использовать wp_footer () на странице 404? Принудительный SSL-протокол для дочерних сайтов субдоменов с несколькими субсайтами + настройка cPanel Как объединить файлы javascript без плагинов? Тип пользовательского сообщения WordPress с структурой папок в slug Создание короткого кода слайдера на основе слайдера Nivo Отключить сброс пароля WordPress через почту, а не уведомлять администратора о запросе на сброс Каков правильный способ передачи параметров в функции как удалить (не исключать) пункт меню из панели навигации Как упорядочить роль пользователя? Тематическая тема Пользовательский цикл Откройте the_author_link () в новом окне

Подсчет сообщений с аргументом без извлечения сообщений

У меня довольно обширная база данных, 30000+ элементов и с помощью этого:

$args = array( 'posts_per_page' => -1, 'post_type' => 'books', 's' => $s ); $post_counts = count(get_posts($args)); 

кажется, навсегда.

 I solved this particular case with: $post_count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_type = 'books' AND post_status = 'publish' AND post_title LIKE '%".$s."%'"); 

Но у меня есть много запросов, которые я хотел бы считать, не записывая их вручную. Есть ли способ подсчитать сообщения с помощью $ args, используя встроенные функции wordpress, без необходимости хранить весь запрос, но только счет?

Solutions Collecting From Web of "Подсчет сообщений с аргументом без извлечения сообщений"

Вот одна вещь, которую вы могли бы сделать. Создайте объект WP_Query, но включите только идентификаторы:

 $args = array( 'posts_per_page' => -1, 'post_type' => 'books', 's' => $s, 'fields' => 'ids', ); $query = new WP_Query( $args ); $post_counts = $query->post_count; wp_reset_postdata(); 

Используя fields => ids вы возвращаете только идентификаторы. Кроме того, WP_Query уже выполняет подсчет и поставляет его как свойство: post_count . Наконец, поскольку мы используем WP_Query, нам нужно сбросить глобальные переменные с помощью wp_reset_postdata() .

Когда WP_Query генерирует SQL-запрос с SQL_CALC_FOUND_ROWS и предложением LIMIT :

 SELECT SQL_CALC_FOUND_ROWS ... FROM ... WHERE ... LIMIT ... 

то общее количество строк:

 SELECT FOUND_ROWS(); 

доступно из свойства WP_Query .


Это означает, что мы можем получить одну запись с помощью:

 'posts_per_page' => 1 // not -1 

и получить общее количество от

 $total = $query->found_posts; 

где $query – это объект WP_Query .


Из документации MySQL:

FOUND_ROWS ():

Для SELECT с предложением LIMIT количество строк, которые будут возвращены, не было бы оговоркой LIMIT

Также WP_Query::set_found_posts() посмотреть на WP_Query::set_found_posts() чтобы узнать, как found_posts свойство found_posts .

$wpdb->num_rows . Но я предлагаю вам сделать это с помощью

 $wpdb->get_var("SELECT COUNT(*) ... ) 

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

При выполнении COUNT сервер будет выделять память только для хранения результата подсчета.

При использовании mysql_num_rows сервер обрабатывает весь результирующий набор, выделяет память для всех этих результатов