13. Работа с Базой Данных
Хотя WordPress предоставляет высокоуровневые API (WP_Query, get_post), иногда требуется прямой доступ к базе данных для сложных отчетов или работы с кастомными таблицами.
Объект $wpdb
Заголовок раздела «Объект $wpdb»$wpdb — это глобальный объект класса wpdb, который инкапсулирует работу с MySQL.
global $wpdb;
// Получение одной переменной$user_count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->users" );
// Получение одной строки$user = $wpdb->get_row( "SELECT * FROM $wpdb->users WHERE ID = 1" );
// Получение списка результатов$results = $wpdb->get_results( "SELECT post_title FROM $wpdb->posts WHERE post_status = 'publish'" );Структура таблиц WordPress
Заголовок раздела «Структура таблиц WordPress»erDiagram WP_POSTS ||--o{ WP_POSTMETA : has WP_POSTS ||--o{ WP_TERM_RELATIONSHIPS : has WP_TERMS ||--o{ WP_TERM_TAXONOMY : belongs WP_TERM_TAXONOMY ||--o{ WP_TERM_RELATIONSHIPS : categorizes WP_USERS ||--o{ WP_USERMETA : hasОсновные таблицы:
Заголовок раздела «Основные таблицы:»wp_posts: Записи, страницы, вложения и CPT.wp_postmeta: Дополнительные данные (метаполя) для записей.wp_options: Настройки сайта и плагинов.wp_terms: Названия категорий/тегов.
Создание кастомных таблиц
Заголовок раздела «Создание кастомных таблиц»При разработке сложных систем (например, системы логов) лучше создать свою таблицу.
function yasha_create_custom_table() { global $wpdb; $table_name = $wpdb->prefix . 'yasha_logs'; $charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name ( id mediumint(9) NOT NULL AUTO_INCREMENT, time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, message text NOT NULL, PRIMARY KEY (id) ) $charset_collate;";
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); dbDelta( $sql );}Операции CRUD
Заголовок раздела «Операции CRUD»// Insert$wpdb->insert( $wpdb->prefix . 'yasha_logs', [ 'time' => current_time( 'mysql' ), 'message' => 'Test log' ], [ '%s', '%s' ]);
// Update$wpdb->update( $wpdb->prefix . 'yasha_logs', [ 'message' => 'Updated message' ], [ 'id' => 1 ], [ '%s' ], [ '%d' ]);- Используйте
$wpdb->prefixдля поддержки кастомных префиксов таблиц. - Всегда экранируйте данные через
$wpdb->prepare(). - Используйте
dbDeltaдля безопасного создания и обновления структуры таблиц.
Интерактивный пример
Заголовок раздела «Интерактивный пример»Структура базы данных WordPress: