Завантажте всі спеціальні поля WordPress за допомогою запиту до бази даних
Під час отримання інформації з бази даних WordPress я вважаю за краще уникати використання прямих запитів до бази даних, але бувають випадки, коли вони можуть бути корисними (і важливо, щоб це було зроблено правильно).
Один із випадків використання, коли це може бути корисним, коли вам потрібно отримати набір даних одного типу. Приклад: скажімо, вам потрібно завантажити всі спеціальні поля WordPress.
На момент написання цієї статті не існує жодної функції, про яку я знаю, яка б це зробила, тому ось як я запитую базу даних для цього.
Завантажте всі спеціальні поля WordPress
Є кілька речей, які слід зауважити щодо настроюваних полів, які пов’язані з даною публікацією:
- спеціальні поля зберігаються в метаданих публікації,
- спеціальні поля вважаються приватними, тому перед ними ставиться підкреслення,
- це не сподобається стандартам кодування WordPress (тому вам, можливо, доведеться ігнорувати стандарти)
Ви можете прочитати все про них у Кодексі.
І так, легко отримати всю спеціальну інформацію для однієї публікації. Але якщо ви працюєте над проектом, де вам потрібно отримати всі настроювані поля, а саме ті, які є приватними, то вам потрібно переконатися, що ви запитуєте рядки, які починаються з підкреслення.
Отже, щоб завантажити всі власні поля WordPress у базу даних, ось запит, який я використовую :
<?php
function get_the_custom_fields() {
global $wpdb;
$results = $wpdb->get_results(
$wpdb->prepare(
"
SELECT meta_key, meta_value
FROM $wpdb->postmeta
WHERE meta_key REGEXP '%s'
", '^[_]') );
return $results;
}
Кілька речей, які слід зауважити щодо наведеного вище запиту:
- Я використовую функцію підготовки перед get_results. Це для параметризації та безпеки. Якщо для вас це нове, рекомендую прочитати цю статтю.
- Це повертає всі мета-ключі та мета-значення в масиві,
- Залежно від того, скільки записів ви бажаєте повернути, це може зайняти деякий час (і, можливо, слід робити пакетами).
Нарешті, для тих, кому цікаво, індекси не існують у стовпці meta_value, але існують у стовпці meta_key.
Стовпці в мета-таблиці Post з індексами.
Отже, якщо ви вирішили змінити запит і хочете використовувати стовпці з індексами, зверніться до meta_id, post_id і meta_key.