Работаем с базой данных используя класс wpdb в WordPress
Пример запроса выборки:
$posts = $wpdb->get_results("SELECT ID, post_title FROM $wpdb->posts WHERE post_status = 'publish'
AND post_type='post' ORDER BY comment_count DESC LIMIT 0,4")
Пример результата:
Array
(
[0] => stdClass Object
(
[ID] => 6
[post_title] => The Male Angler Fish Gets Completely Screwed
)
[1] => stdClass Object
(
[ID] => 25
[post_title] => 10 Truly Amazing Icon Sets From Germany
)
[2] => stdClass Object
(
[ID] => 37
[post_title] => Elderberry Is Awesome
)
[3] => stdClass Object
(
[ID] => 60
[post_title] => Gathering Resources and Inspiration With Evernote
)
)
get_results — возвращает массив, содержащий отдельные объекты для каждой строки
$posts = $wpdb->get_results("SELECT ID, post_title FROM wp_posts WHERE post_status = 'future'
AND post_type='post' ORDER BY post_date ASC LIMIT 0,4")
// Echo the title of the first scheduled post
echo $posts[0]->post_title;
get_row — возвращает первую найденную строку по запросу и возвращает в виде объекта
$posts = $wpdb->get_row("SELECT ID, post_title FROM wp_posts WHERE post_status = 'publish'
AND post_type='post' ORDER BY comment_count DESC LIMIT 0,1")
// Echo the title of the most commented post
echo $posts->post_title;
get_col — возвращает одно поле из запроса в массиве объекты
$posts = $wpdb->get_col("SELECT ID FROM wp_posts WHERE post_status = 'publish'
AND post_type='post' ORDER BY comment_count DESC LIMIT 0,10")
// Echo the ID of the 4th most commented post
echo $posts[3]->ID;
get_var — возвращает одно поле из первой строки в запросе
$email = $wpdb->get_var("SELECT user_email FROM wp_users WHERE user_login = 'danielpataki' ")
// Echo the user's email address
echo $email;
еще пример:
$total = $wpdb->get_var("SELECT COUNT(ID) WHERE deal_id = 125 ");
Вставка в базу данных
$wpdb->insert( $table, $data, $format);
$wpdb->insert($wpdb->usermeta, array("user_id" => 1, "meta_key" => "awesome_factor", "meta_value" => 10), array("%d", %s", "%d"));
// Эквивалентно:
// INSERT INTO wp_usermeta (user_id, meta_key, meta_value) VALUES (1, "awesome_factor", 10);
еще пример:
$wpdb->insert('tracking', [
"deal_id" => 643,
"action" => "click",
"action_url" => "//thisiswhereitwasclicked.com/about/",
"user_id" => 223,
"user_ip" => "123.234.223.12"
], ["%d", %s", "%s", "%d", "%s"]);
Обновление данных
$wpdb->update( $table, $data, $where, $format = null, $where_format = null );
$wpdb->update( $wpdb->posts, array("post_title" => "Modified Post Title"), array("ID" => 5), array("%s"), array("%d") );
еще пример:
$wpdb->update( $wpdb->postmeta, array("meta_value" => $total), array("ID" => 125), array("%d"), array("%d") );
// обратите внимание, что это следует делать с помощью update_post_meta(), я сделал это данным образом ради примера
Удалить данные
$wpdb->query("DELETE FROM wp_usermeta WHERE meta_key = 'first_login' OR meta_key = 'security_key' ");
еще пример удаления в валидацией:
$sql = $wpdb->prepare("DELETE FROM tracking WHERE user_ip = %s ", '168.211.23.43');
$wpdb->query($sql);
Защита и валидация
$sql = $wpdb->prepare( "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value ) VALUES ( %d, %s, %d )", 3342, 'post_views', 2290 )
$wpdb->query($sql);
insert_id — вернуть ID последнего вставленного объекта
$sql = $wpdb->prepare( "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value ) VALUES ( %d, %s, %d )", 3342, 'post_views', 2290 )
$wpdb->query($sql);
$meta_id = $wpdb->insert_id;
num_rows — вернуть количество результатов последнего запроса
global $wpdb;
$wpdb->get_results("
SELECT * FROM " . $wpdb->prefix . "product_order
WHERE
rel = '" . $post["id"] . "' AND
`range` = '" . $range . "' AND
category = '" . $range . "'
");
echo $wpdb->num_rows;
Названия таблиц
Все базовые названия таблиц хранятся в переменных, чьи названия в точности такие же, как их эквивалент основной таблицы. Название таблицы постов (возможно, wp_posts) будет храниться в переменной $posts, так что можно вывести ее с помощью $wpdb->posts.
Управление сообщениями об ошибке
Вызывая методы show_errors() или hide_errors(), можно включать или выключать сообщения об ошибках (по умолчанию они выключены), чтобы получить больше информации о происходящем. В любом случае для распечатки ошибок последнего запроса вы также можете применять метод print_error().
$wpdb->show_errors();
$wpdb->query("DELETE FROM wp_posts WHERE post_id = 554 ");
// По причине того, что установлен show_errors(), при запуске сообщение об ошибках скажет вам, что поле "post_id" неизвестно
// поле в этой таблице (так как правильное поле – это ID)