Загрузить все настраиваемые поля 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 с индексами.
Поэтому, если вы решите изменить запрос и хотите использовать столбцы с индексами, обратитесь к meta_id, post_id и meta_key.