Функция get_post_custom( int $post_id ): mixed
предназначена для получения всех произвольных полей поста по его ID. Она возвращает массив данных (метаполей) поста. Важно отметить, что функция кэширует данные для оптимизации производительности, особенно при многократных вызовах.
get_post_custom( int $post_id ): mixed
get_post_custom()
обращается к метаполям записи и возвращает их в виде многомерного массива. Если ID поста не указан, функция автоматически использует текущий пост (определяется через глобальную переменную $post
). Эта функция является удобным способом для получения всех произвольных полей записи, но если нужно получить одно конкретное поле, предпочтительнее использовать get_post_meta()
.
Параметры
$post_id
(необязательный, тип: integer) — ID поста, произвольные поля которого требуется получить. Если не указан, используется ID текущего поста.
Возвращаемое значение
Функция возвращает массив данных (метаполей) поста. Если указан невалидный ID поста (например, ноль, отрицательное значение или нечисловое значение), она вернет false
. Если передан корректный, но несуществующий ID поста, функция вернет пустую строку.
Особенности:
- Возвращаемый массив может быть многомерным.
- Если произвольное поле содержит сериализованные данные, они будут возвращены в сериализованном виде.
Пример 1: Получение всех произвольных полей текущего поста
Для получения всех метаданных текущего поста можно использовать следующий код:
$custom_fields = get_post_custom();
Этот код присвоит переменной $custom_fields
массив всех метаполей текущей записи.
Пример 2: Получение всех полей поста с заданным ID
В следующем примере рассмотрим, как получить произвольные поля поста с ID 103:
$custom_fields = get_post_custom(103);
Этот код вернет все произвольные поля поста с ID 103.
Пример 3: Извлечение конкретных значений произвольных полей
Предположим, что у поста с ID 45 есть несколько полей с ключом event_details
, которые содержат разные значения (например, «Концерт», «2024-12-31», «18:00»). Мы можем извлечь и вывести эти значения следующим образом:
$custom_fields = get_post_custom(45);
$event_details = $custom_fields['event_details'];
foreach ( $event_details as $index => $detail ) {
echo $index . " => " . $detail . "<br />";
}
Вывод на экране:
0 => Концерт
1 => 2024-12-31
2 => 18:00
Пример 4: Обработка сериализованных данных
Если метаполя могут содержать массивы или другие сложные типы данных, они могут быть сериализованы. В этом случае, чтобы обработать такие данные, потребуется десериализация:
$custom_fields = get_post_custom(58);
$complex_field = maybe_unserialize($custom_fields['complex_data'][0]);
if (is_array($complex_field)) {
foreach ($complex_field as $key => $value) {
echo $key . " => " . $value . "<br />";
}
}
Этот код проверяет, сериализованы ли данные, и, если они представляют собой массив, корректно выводит их.
Заключение
Функция get_post_custom()
является полезным инструментом для извлечения всех произвольных полей записи. Она позволяет получить метаполя поста в виде многомерного массива, что особенно полезно, если пост содержит несколько значений для одного и того же ключа. Однако, если необходимо извлечь только одно поле, рекомендуется использовать функцию get_post_meta()
для оптимизации кода.