Работаем с базой данных используя класс 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)