Как выполнять SQL запросы WordPress с помощью класса wpdb

web-design-website-coding-concept

11 февраля 2020 WordPress MySQL

Взаимодействие с базой данных в CMS WordPress осуществляется с помощью класса wpdb. Класс позволяет осуществлять различные операции с базой данных, такие как добавление, удаление, обновление и вывод данных.

wpdb-e1581423613993-1024x709-8985946

Обращаться к базе данных необходимо через глобальную переменную $wpdb. Таким образом перед кодом переменная обязательно должна быть глобализированна:

global $wpdb;

После этого, с помощью готовых методов класса, можно управлять любыми таблицами в текущей базе данных WordPress, даже теми, которые вы создали вручную. Точно так же как если бы вы использовали для подключения PHP-функцию mysql_connect().

Например, можно выбрать все поля из произвольной таблицы mytable таким образом:

$mytable = $wpdb->get_results( "SELECT * FROM mytable" );

Основные методы класса wpdb

query — произвольный запрос к Базе Данных WordPress
get_var — получение определенной ячейки таблицы
get_row — выбор строки таблицы
get_col — выбор столбца таблицы
get_results — выбор нескольких строк таблицы
insert — вставка новой записи (строки) в таблицу
update — обновление записи (строки) в таблице
replace — замена строки
delete — удаление строки из таблицы
prepare — защита запроса от SQL инъекций
esc_like — очистка LIKE строки
show/hide/print_error — показать или спрятать ошибки SQL
get_col_info — получить информацию о колонке
flush — сброс кэша

Примеры использования

Вывод данных

Вывод количества пользователей:

$user_count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->users;" );
echo '
Количество пользователей равно: ' . $user_count . '';

Вывести количество страниц:

function get_totalpages() {
        global $wpdb;
        $totalpages = intval( $wpdb->get_var(
                "SELECT COUNT(ID) FROM $wpdb->posts WHERE post_type = 'page' AND post_status = 'publish'"
        ));

        return $totalpages;
}

Вывести количество комментариев:

function get_totalcomments() {
        global $wpdb;
        $totalcomments = intval( $wpdb->get_var(
                "SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_approved = '1'"
        ));

        return $totalcomments;
}

Вывести записи с доп.полем color:

$meta_key1 = 'Color';
$meta_key2 = 'Display_Order';

$postids = $wpdb->get_col($wpdb->prepare("
SELECT      key1.post_id
FROM        $wpdb->postmeta key1
INNER JOIN  $wpdb->postmeta key2
                        on key2.post_id = key1.post_id
                        and key2.meta_key = %s
WHERE       key1.meta_key = %s
ORDER BY    key2.meta_value+(0) ASC",
                 $meta_key2,$meta_key1)); 

if ($postids) {
  echo 'List of '. $meta_key1  . ' posts, sorted by ' . $meta_key2 ;
  foreach ($postids as $id) {
        $post=get_post(intval($id));
        setup_postdata($post);?>