Статьи

Написание пользовательских запросов в WordPress

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


Основные функциональные возможности WordPress подходят для самых простых задач, но что бы вы сделали, если бы захотели реализовать некоторые конкретные потребности? Возможно, вы пишете плагин? Тогда вы должны узнать, как вы можете использовать SQL-запросы в WordPress прямо сейчас! Официальные ссылки можно найти в Кодексе WordPress ( пользовательские запросы и класс WPDB ).


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


Функция запроса нуждается в строке, содержащей пользовательский запрос. Возвращаемым значением является целое число, соответствующее количеству затронутых / выбранных строк, и значение false, если возникает ошибка.

1
2
$query = «SELECT COUNT(apple) FROM fruits»;
$wpdb->query($query);

Эта функция получает несколько строк при выполнении запроса. По умолчанию результатом функции является массив.

1
2
3
4
5
6
7
$query = «
    SELECT *
    FROM wp_terms wt
    INNER JOIN wp_term_taxonomy wtt ON wt.term_id = wtt.term_id
    WHERE wtt.taxonomy = ‘post_tag’ AND wtt.count = 0″;
 
$wpdb->get_results($query);

Это вернет одну переменную из базы данных, но полный результат запроса кэшируется для последующего использования. Возвращает NULL, если результат не найден.

1
2
$query = «SELECT COUNT(*) FROM users»;
$wpdb->get_var($query);

Полная строка будет возвращена в результате функции, которая может быть объектом, ассоциативным массивом или числовым индексированным массивом. NULL — результат, когда не найдено подходящих данных. result_type может быть OBJECT , ARRAY_A или ARRAY_N (объект, ассоциативный массив или пронумерованный массив). Смещение — это целое число со значением по умолчанию 0.

1
2
3
4
5
$query = «
SELECT * FROM wp_posts
WHERE post_type = ‘post'»;
 
$wpdb->get_row($query, ARRAY_A, 3);

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

1
2
3
4
5
$query = «
SELECT * FROM wp_posts
WHERE post_type = ‘post'»;
 
$wpdb->get_col($query, 3);

Согласно инструкции php.net:

«Их [подготовленные запросы] можно рассматривать как некий скомпилированный шаблон для SQL, который приложение хочет запустить и который можно настроить с помощью переменных параметров».

Вы можете защитить SQL-запросы от атак SQL-инъекций. Короче говоря, данные в запросах должны быть экранированы SQL перед выполнением запроса для предотвращения атак внедрения. Это легко сделать с помощью метода prepare. В следующем примере значения ’10’, ‘monkey’ и ‘apple’ будут экранированы при использовании в этом методе.

01
02
03
04
05
06
07
08
09
10
// Usage: $wpdb->prepare( ‘query’ [, value_parameter, value_parameter … ] );
 
$wpdb->query( $wpdb->prepare(
    «INSERT INTO test_table (post_id, animal, food) VALUES ( %d, %s, %s )»,
    array(
        10,
        ‘monkey’,
        ‘apple’
    )
));

Вы можете включать и выключать сообщения об ошибках с помощью show_errors и hide_errors , но вы также можете напечатать:

1
2
$wpdb->show_errors();
$wpdb->hide_errors();

Удаление кеша можно сделать с помощью функции flush .

1
$wpdb->flush();

01
02
03
04
05
06
07
08
09
10
11
12
13
$wpdb->insert($table, $data, $format);
 
$wpdb->insert(
    ‘foods’,
    array(
        ‘fruit’ => ‘apple’,
        ‘year’ => 2012
    ),
    array(
        ‘%s’,
        ‘%d’
    )
);

Используемые параметры по порядку:

  • имя таблицы для вставки данных в
  • данные для вставки (столбец => пары значений) без экранирования
  • массив форматов для отображения на каждое из значений в $data . Если нет, все значения будут рассматриваться как строки

01
02
03
04
05
06
07
08
09
10
11
12
13
$wpdb->update(
    ‘foods’,
    array(
        ‘fruit’ => ‘apple’, // string
        ‘year’ => ‘value2’ // integer (number)
    ),
    array( ‘ID’ => 1 ),
    array(
        ‘%s’, // value1
        ‘%d’ // value2
    ),
    array( ‘%d’ )
);

Используемые параметры по порядку:

  • имя таблицы
  • данные
  • где условия
  • формат
  • where_format

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

1
$wpdb->get_col_info(‘type’, offset);
  • Тип: информация, которую вы хотите получить, некоторые примеры здесь
    • namename столбца (это по умолчанию)
    • table — имя таблицы, к которой принадлежит столбец
    • max_length — максимальная длина столбца
    • not_null — 1, если столбец не может быть NULL
    • больше можно найти в справочнике WPDB по WordPress Codex
  • Смещение: укажите столбец, из которого нужно получить информацию (0 — первый столбец)

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

  • $wpdb->posts;
  • $wpdb->postmeta;
  • $wpdb->comments;
  • $wpdb->commentmeta;
  • $wpdb->terms;
  • $wpdb->term_taxonomy;
  • $wpdb->term_relationships;
  • $wpdb->users;
  • $wpdb->usermeta;
  • $wpdb->links;
  • $wpdb->options;

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

Там у нас это есть! Справочник для пользовательских запросов в WordPress, все в одном месте для вас.