Содержание
Класс wpdb позволяет получать данные из базы данных wordpress. Обращение к методам класса wpdb идет через глобальную переменную $wpdb.
Пример GET запроса
Нужно помнить, что внутри обычных функций $wpdb нужно определять, как глобальную переменную. Пример:
$posts = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post' ORDER BY ID ASC LIMIT 10");
Этот запрос получает первые 10 записей (постов) из таблицы wp_posts со статусом publish (опубликовано). Чтобы получить последние 10 записей, то в запросе необходимо указать сортировку по убыванию: ORDER BY ID DESC.
Вывод результатов из БД
global $wpdb;
$posts = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post' ORDER BY ID ASC LIMIT 10");
if( $posts ) {
foreach ( $posts as $post ) {
$content. = '<h3>'.$post->post_title.'</h3>'; // заголовок постов
$content. = '<p>'.$post->post_content.'</p>'; // контент
$content. = '<span>'.$post->post_date.'</span>'; // дата публикации
}
}
else {
$content="Ничего не найдено";
}
echo $content;
?>
Здесь происходит вывод результатов запроса к БД. При успешном запросе отображаются заголовок, контент и дата публикации записи. В противном случае выводится текст, что ничего не найдено.
Пример DELETE запроса
$wpdb->query($wpdb->prepare("DELETE FROM $wpdb->posts WHERE ID = '2'"));
?>
Здесь происходит удаление записи с ID=2 из таблицы wp_posts. Для защиты от SQL-инъекций используется метод prepare, который подготавливает SQL-запрос и находится внутри $wpdb->query.
Пример INSERT запроса
Добавим в таблицу `wp_usermeta` новый параметр last_name (фамилия) для юзера с id=1
$wpdb->query($wpdb->prepare("INSERT INTO $wpdb->`usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES (5, 1, 'last_name', 'Doe' )"));
?>
Использование $wpdb при ajax запросах
Чтобы переменная $wpdb работала в кастомных php-файлах при ajax запросах, необходимо подключить ядро WordPress через файл wp-load.php.
$path = $_SERVER['DOCUMENT_ROOT'];
include_once $path . '/wp-load.php';
?>