Содержание
Класс 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
$sql = $wpdb->prepare("INSERT INTO wp_usermeta (`umeta_id`, `user_id`, `meta_key`, `meta_value`) values (%d, %d, %s, %s)" , '5', '1', 'last_name', 'Doe' );
$wpdb->query($sql);
?>
Здесь добавление данных идет через синтаксис, похожий на функцию sprintf(), где
%d - целое число
%s - строка
Важно: названия столбцов таблицы должны быть заключены в обратные кавычки, а переменные в одинарные кавычки
Пример UPDATE запроса
В примере обновим заголовок у записи с ID = 5.
$sql = $wpdb->prepare("UPDATE $wpdb->posts SET post_title = 'New_title' WHERE ID='5'");
$wpdb->query($sql);
?>
или
$sql = $wpdb->update( $wpdb->posts, array("post_title" => "New_title"), array("ID" => 5), array("%s"), array("%d") );
$wpdb->query($sql);
?>
Использование $wpdb при ajax запросах
Чтобы переменная $wpdb работала в кастомных php-файлах при ajax запросах, необходимо подключить ядро WordPress через файл wp-load.php.
$path = $_SERVER['DOCUMENT_ROOT'];
include_once $path . '/wp-load.php';
?>
