Как выполнять SQL запросы WordPress с помощью класса wpdb

Как выполнять SQL запросы WordPress с помощью класса wpdb

11 февраля 2020 WordPress

Взаимодействие с базой данных в CMS WordPress осуществляется с помощью класса wpdb. Класс позволяет осуществлять различные операции с базой данных, такие как добавление, удаление, обновление и вывод данных.

Обращаться к базе данных необходимо через глобальную переменную $wpdb. Таким образом перед кодом переменная обязательно должна быть глобализированна:

global $wpdb;

После этого, с помощью готовых методов класса, можно управлять любыми таблицами в текущей базе данных WordPress, даже теми, которые вы создали вручную. Точно так же как если бы вы использовали для подключения PHP-функцию mysql_connect().

Email-маркетинг — один из наиболее самых эффективных способов привлечения клиентов для бизнеса. Приведите новых клиентов с помощью https://spidersoft.su/

Например, можно выбрать все поля из произвольной таблицы 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 '<p>Количество пользователей равно: ' . $user_count . '</p>';

Вывести количество страниц:

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);?>
	<p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
	<?php
  }
}

Вывести названия всех страниц:

$pages = $wpdb->get_results( 
	"
	SELECT post_title, post_content 
	FROM $wpdb->posts
	WHERE post_status = 'publish' 
	AND post_type = 'page'
	"
);

if( $pages ) {
	foreach ( $pages as $page ) {
		echo $page->post_title;
	}
}
// Выводим заголовки

Вывести дату регистрации конкретного пользователя:

$date = $wpdb->get_var(
	"SELECT user_registered
	FROM $wpdb->users
	WHERE user_login = 'admin'"
);
echo $date;

Вывести пост с самым большим количеством комментариев:

$post = $wpdb->get_row(
	"
	SELECT post_title, post_content
	FROM $wpdb->posts
	WHERE post_status = 'publish'
	ORDER BY comment_count DESC LIMIT 0,1
	"
);
echo $post->title;

Добавление данных

Вставить значение в строку таблицы mytable:

$wpdb->insert(
	'mytable',
	array( 'column1' => 'Значение1', 'column2' => 'Значение2' ),
	array( '%s', '%s' )
);

В методе указывается формат строки. Если его не указать, то формат по умолчанию будет строчный.

%s — строка
%d — целое число
%f — дробное число

Обновление данных

Обновление строки c ID = 5 в таблице mytable:

$wpdb->update( 'mytable',
	array( 'column1' => 'Значение1', 'column2' => 'Значение2' ),
	array( 'ID' => 5 )
);

Удаление данных

Удалить строку из таблицы mytable c ID = 5:

$wpdb->delete( 'mytable', array( 'ID' => 5 ) );

Защита от SQL инъекций

$sql = $wpdb->prepare( "SELECT * FROM mytable WHERE id = %s", $var );

Если вам понравилась статья, вы можете отблагодарить автора любой суммой, какую сочтете для себя приемлемой:
Остались вопросы по статье? Задайте их прямо сейчас!
Перенос сайта на WordPress на другой домен

В повседневной работе часто приходится сталкиваться с переносом сайта на Wordpress с локального или тестового домена на основной. Для этого необходимо не только скопировать файлы, базу данных и поменять настройки в конфигурационном файле, но и сделать ряд SQL-запросов, чтобы прописать Читать далее

Правильный файл robots.txt для WordPress 2019

Самый оптимальный и простой код файла robots.txt для вашего сайта на WordPress, который подойдет для всех поисковиков. Этот вариант использую на данном сайте. Не забудьте заменить maindot.ru на адрес вашего сайта. Содержание файла robots.txt для WordPress Если вы используете HTTPS, Читать далее

Произвольные типы записей WordPress

Произвольные типы записей позволяют разделить посты не только по категориям, но и по их типу с собственными названиями и рубриками. Это что-то типо инфоблока, как в CMS 1С-Битрикс. По умолчанию в WordPress есть возможность добавлять записи и их рубрики. К Читать далее

Произвольные поля WordPress

Произвольные поля или как их еще называют кастомные или доп. поля в WordPress очень нужная вещь, особенно при создании например сайта-каталога. С помощью доп. полей можно добавить к записям возможность указывать например цену или цвет, а затем выводить сохраненное значение Читать далее

Создание плагина WordPress с нуля

Когда я создавал свой первый плагин, то оказалось, что в сети очень мало информации по этому вопросу. С трудом удалось найти даже основы. Надеюсь эта статья поможет вам научиться писать различные плагины для WordPress. Наверняка вы уже пользовались и знаете, Читать далее

WordPress Ajax

По большей части публикации про применение Ajax в WordPress сложные для понимания, особенно если вы мало знакомы с этой технологией. В этой статье я покажу, как на самом деле просто использовать Ajax в публичной части сайта. Ajax запросы в WordPress Читать далее

WordPress подгрузка постов кнопкой показать еще или бесконечным скроллом

Кнопка "Показать ещё" и бесконечный скроллинг - это по сути постраничная навигация, которая подгружает следующую страницу с постами без перезагрузки страницы. Подобные примеры часто можно встретить в лентах соц. сетей. В этом примере показана реализация кнопки "Показать ещё" и бесконечного Читать далее

Добавить комментарий