11 февраля 2020 WordPress MySQL
Взаимодействие с базой данных в CMS WordPress осуществляется с помощью класса wpdb
. Класс позволяет осуществлять различные операции с базой данных, такие как добавление, удаление, обновление и вывод данных.
Обращаться к базе данных необходимо через глобальную переменную $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);?>