Статьи

Расширенные запросы WordPress, часть 3

В этой серии мы рассмотрели базу данных WordPress, выполнили несколько простых запросов к ней и рассмотрели различные способы чтения данных из базы данных. Как бы это ни было полезно, это займет у вас столько времени … особенно когда речь идет о создании собственных тем, плагинов или других расширенных функциональных возможностей на основе WordPress. В этом последнем посте мы рассмотрим, как мы можем обновлять существующие значения в базе данных и даже вводить собственные значения!


До этого момента мы не слишком беспокоились о написании защитных запросов для защиты от таких вещей, как внедрение SQL. Поскольку мы собираемся записывать данные непосредственно в базу данных, сейчас самое время начать это делать. К счастью, API WordPress делает это относительно легко.

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

1
2
3
4
<?php
$query = «INSERT INTO $wpdb->posts (post_id) VALUES (%d)»;
$wpdb->query($wpdb->prepare($query, 10));
?>

Строки представлены с помощью токена «% s», а целые числа представлены с использованием значений «% d». Итак, предполагая, что вы будете передавать эти значения в базу данных, вы бы написали запрос следующим образом:

1
2
3
4
<?php
$query = «INSERT INTO $wpdb->posts (post_id, post_title) VALUES (%d, %s)»;
$wpdb->query($wpdb->prepare($query, 10, ‘Post Title Example’));
?>

Хотя это работает для большей части работы, которую вы будете выполнять, вы можете пойти дальше, используя функциональность проверки данных WordPress.


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

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

Предположим, вы собираетесь ввести термин «фрагмент кода» в базу данных WordPress. Схема таблицы терминов состоит из следующих столбцов, первые три из которых являются обязательными:

  • term_id
  • имя
  • слизень
  • term_group

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

  • term_taxonomy_id
  • term_id
  • таксономия

Нам нужно будет указать значения для каждого из обязательных столбцов, прежде чем записывать его в базу данных, прежде чем писать каждый запрос. Я назвал переменные так же, как столбцы, которые они будут изменять, поэтому код должен быть легок для понимания:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
<?php
 
global $wpdb;
 
$term_id = 100;
$name = ‘Code Snippet’;
$slug = ‘code-snippet’;
 
// add the new category
$query = «INSERT INTO $wpdb->terms (term_id, name, slug) VALUES (%d, %s, %s)»;
$wpdb->query($wpdb->prepare($query, $term_id, $name, $slug));
 
// create the relationship
$term_taxonomy_id = 100;
$taxonomy = ‘category’;
$query = «INSERT INTO $wpdb->term_taxonomy (term_taxonomy_id, term_id, taxonomy) VALUES (%d, %d, %s)»;
$wpdb->query($wpdb->prepare($query, $term_taxonomy_id, $term_id, $taxonomy));
 
?>

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


Обновление существующих значений в базе данных аналогично вставке записей, но может использоваться только для изменения одного (или подмножества) или значений. Обновление записей обычно происходит по двум конкретным сценариям:

Например, предположим, что вы хотите изменить заголовок самого первого сообщения в базе данных:

1
<?php global $wpdb;

Другой пример — обновление нескольких строк в одном запросе. Например, предположим, что вы хотите преобразовать все ваши теги записей в категории. Вам нужно будет найти все term_taxonomy_id, которые имеют таксономию ‘post_tag’, и обновить их таксономию до категории.

Обратите внимание, что я рекомендую запускать это только в разработке, потому что это изменит вашу существующую структуру тегов:

1
2
3
4
<?php
global $wpdb;
$wpdb->update(«$wpdb->term_taxonomy», array(‘taxonomy’ => ‘category_demo’), array(‘taxonomy’ => ‘post_tag’));
?>

Простой (но мощный), верно?

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


На этом этапе мы рассмотрели базу данных WordPress, способы, которыми мы можем прочитать значение (или значения), обновить существующие записи и вставить новые записи, написав несколько строк кода.

Отсюда вы сможете поднять свою тему и разработку плагинов на новый уровень.