Выбор только ID поста и значения мета с помощью WP_Query

Вопрос или проблема

Выбор только 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:

https://codex.wordpress.org/Class_Reference/wpdb

Ответ или решение

Для того чтобы получить только идентификаторы постов и значения метаданных, вы можете использовать класс 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.';
}

Пояснение:

  1. Глобальная переменная $wpdb: Это объект, который предоставляет доступ к базе данных WordPress и позволяет выполнять SQL-запросы.

  2. SQL-запрос: Мы выбираем post_id и meta_value из таблицы метаданных постов $wpdb->postmeta, отбираем только записи, где meta_key равно '_Like', и сортируем результаты по значениям мета-данных в порядке убывания.

  3. get_results: Этот метод выполняет запрос и возвращает массив результатов. Мы используем флаг ARRAY_A для получения ассоциативного массива.

  4. Вывод результатов: Мы проверяем, есть ли результаты, и выводим их, использовав функцию esc_html() для безопасного вывода.

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

Оцените материал
Добавить комментарий

Капча загружается...