Как выполнять SQL запросы WordPress с помощью класса wpdb
11 февраля 2020 WordPress MySQL
Взаимодействие с базой данных в CMS WordPress осуществляется с помощью класса wpdb
. Класс позволяет осуществлять различные операции с базой данных, такие как добавление, удаление, обновление и вывод данных.
Обращаться к базе данных необходимо через глобальную переменную $wpdb
. Таким образом перед кодом переменная обязательно должна быть глобализированна:
global $wpdb;
После этого, с помощью готовых методов класса, можно управлять любыми таблицами в текущей базе данных WordPress, даже теми, которые вы создали вручную. Точно так же как если бы вы использовали для подключения PHP-функцию mysql_connect()
.
Email-маркетинг — один из наиболее самых эффективных способов привлечения клиентов для бизнеса. Приведите новых клиентов с помощью https://spidersoft.su/
Например, можно выбрать все поля из произвольной таблицы 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 '<p>Количество пользователей равно: ' . $user_count . '</p>';
Вывести количество страниц:
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);?> <p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p> <?php } }
Вывести названия всех страниц:
$pages = $wpdb->get_results( " SELECT post_title, post_content FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'page' " ); if( $pages ) { foreach ( $pages as $page ) { echo $page->post_title; } } // Выводим заголовки
Вывести дату регистрации конкретного пользователя:
$date = $wpdb->get_var( "SELECT user_registered FROM $wpdb->users WHERE user_login = 'admin'" ); echo $date;
Вывести пост с самым большим количеством комментариев:
$post = $wpdb->get_row( " SELECT post_title, post_content FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY comment_count DESC LIMIT 0,1 " ); echo $post->title;
Добавление данных
Вставить значение в строку таблицы mytable:
$wpdb->insert( 'mytable', array( 'column1' => 'Значение1', 'column2' => 'Значение2' ), array( '%s', '%s' ) );
В методе указывается формат строки. Если его не указать, то формат по умолчанию будет строчный.
%s
— строка%d
— целое число%f
— дробное число
Обновление данных
Обновление строки c ID = 5 в таблице mytable:
$wpdb->update( 'mytable', array( 'column1' => 'Значение1', 'column2' => 'Значение2' ), array( 'ID' => 5 ) );
Удаление данных
Удалить строку из таблицы mytable c ID = 5:
$wpdb->delete( 'mytable', array( 'ID' => 5 ) );
Защита от SQL инъекций
$sql = $wpdb->prepare( "SELECT * FROM mytable WHERE id = %s", $var );
Добавить комментарий