Подсчет постов с определенным значением метаполя
18 июн. 2014 г., 06:11:59
Просмотры: 15.5K
Голосов: 5
Как подсчитать только те записи, которые имеют определенное значение произвольного метаполя?
$productCount = wp_count_posts('product');
echo $productCount->publish;
Этот код выводит общее количество всех записей.
Как узнать, сколько из этих записей имеют, например, значение произвольного поля cat
?

user12920
207
Все ответы на вопрос
2
1
В WordPress нет стандартной/встроенной функции для подсчета записей по определенному мета-значению. wp_count_posts
подсчитывает количество записей только по типу записи.
В данном случае может быть полезно использовать WP_Query
для создания пользовательского запроса, чтобы получить все записи с указанным мета-значением, а затем использовать $wp_query->found_posts
для получения количества записей.
Вот как это можно сделать:
$query = new WP_Query( array( 'meta_key' => 'color', 'meta_value' => 'blue' ) );
echo $query->found_posts;

Pieter Goosen
55.4K
18 июн. 2014 г. 08:29:20
1
Вероятно, лучший способ сделать это:
global $wpdb;
$count = $wpdb->get_row("SELECT COUNT(*) AS THE_COUNT FROM $wpdb->postmeta WHERE (meta_key = 'color' AND meta_value = 'blue')");
return $count->THE_COUNT;
Вот набор функций для упрощения использования:
/**
* Возвращает количество записей, для которых используется конкретный мета-ключ.
* Опционально можно указать конкретное значение или массив значений мета-ключа.
*
* @param string $key
* @param null|string|array $value
*
* @return mixed
*/
function get_meta_count( $key, $value = null) {
global $wpdb;
$where = get_meta_where($key, $value);
$count = $wpdb->get_row("SELECT COUNT(*) AS THE_COUNT FROM $wpdb->postmeta WHERE $where");
return $count->THE_COUNT;
}
/**
* Возвращает записи postmeta для конкретного мета-ключа.
* Опционально можно указать конкретное значение или массив значений мета-ключа.
*
* @param string $key
* @param null|string|array $value
*
* @return mixed
*/
function get_meta ( $key, $value = null) {
global $wpdb;
$where = get_meta_where($key, $value);
return $wpdb->get_results("SELECT * FROM $wpdb->postmeta WHERE $where");
}
/**
* Возвращает условие WHERE для запроса по мета-ключу
*
* @param string $key
* @param null|string|array $value
*
* @return string
*/
function get_meta_where( $key, $value) {
$where = "meta_key = '$key'";
if (null !== $value) {
if (\is_array($value)) {
\array_walk($value,'add_quote');
$in = \implode(',', $value); // Разделяем значения запятой
$where .= " AND meta_value IN ($in)";
} else {
$where .= " AND meta_value = '$value'";
}
}
return $where;
}
/**
* Добавляет кавычки вокруг каждого значения в массиве при использовании в качестве callback-функции
*
* @param $value
* @param $key
*/
function add_quote( &$value, $key)
{
$value = "'$value'";
}

tazziedave
31
2 дек. 2019 г. 02:00:55
Похожие вопросы
2
ответов
1
ответов