Вопрос или проблема
Выбор только ID поста и значения мета с помощью WP_Query
Я разрабатываю простой плагин для рейтинга, который позволяет посетителям ставить лайки к постам и также показывает общий балл лайков для каждого тега на странице администратора плагина. Мне нужны как ID постов (чтобы получить данные тегов), так и значения лайков.
В данный момент мой запрос выглядит так:
$args = array(
'meta_key' => '_Like',
'orderby' => 'meta_value',
);
$query = new WP_Query($args);
Но этот запрос возвращает полный объект поста, что неэффективно по памяти. Мне нужно только значение _Like
и post_id
. Есть ли более оптимальный запрос для этого?
Вам нужно будет создать свой собственный запрос MySQL, чтобы достичь этого. Вы можете использовать встроенные функции PHP или WPDB, который является оберткой для MySQL, используемой WordPress:
Ответ или решение
Для того чтобы получить только идентификаторы постов и значения метаданных, вы можете использовать класс wpdb
в WordPress для выполнения прямого SQL-запроса. Это позволит избежать возврата полного объекта поста, что сделает ваш запрос более эффективным с точки зрения использования памяти.
Вот пример, как это можно сделать:
global $wpdb;
// Выполняем запрос к базе данных для выбора post_id и значения мета-поля _Like
$results = $wpdb->get_results("
SELECT post_id, meta_value
FROM $wpdb->postmeta
WHERE meta_key = '_Like'
ORDER BY meta_value DESC
", ARRAY_A);
// Проверяем результаты
if (!empty($results)) {
foreach ($results as $row) {
echo 'Post ID: ' . esc_html($row['post_id']) . ' - Likes: ' . esc_html($row['meta_value']) . '<br>';
}
} else {
echo 'Нет постов с мету-значением _Like.';
}
Пояснение:
-
Глобальная переменная
$wpdb
: Это объект, который предоставляет доступ к базе данных WordPress и позволяет выполнять SQL-запросы. -
SQL-запрос: Мы выбираем
post_id
иmeta_value
из таблицы метаданных постов$wpdb->postmeta
, отбираем только записи, гдеmeta_key
равно'_Like'
, и сортируем результаты по значениям мета-данных в порядке убывания. -
get_results
: Этот метод выполняет запрос и возвращает массив результатов. Мы используем флагARRAY_A
для получения ассоциативного массива. - Вывод результатов: Мы проверяем, есть ли результаты, и выводим их, использовав функцию
esc_html()
для безопасного вывода.
Этот способ позволит вам получить необходимые данные более эффективно, чем использование WP_Query
, при этом вы сможете использовать их для дальнейшей обработки, например, для отображения информации на вашей админстративной странице плагина.