Проверить существование произвольного поля?
Можно ли проверить существование произвольного поля для конкретной записи внутри цикла? Например, я использую функции типа get_post_meta($post->ID, 'Company', true);
с предшествующим тегом <h4>
, но хотелось бы сначала проверить наличие значения для произвольного поля "Company" перед выводом тега <h4>
. Возможно ли это?

Методы get_
в WordPress предназначены для получения данных, а не для их вывода. Вы можете легко проверить переменную, содержащую данные, перед добавлением тегов заголовков:
$my_post_meta = get_post_meta($post->ID, 'Company', true);
if ( ! empty ( $my_post_meta ) )
echo '<h4>'.$my_post_meta.'</h4>';

@T.Todua Автор вопроса (в 2011 году) спросил: "[…] я хочу убедиться, что для произвольного поля есть значение […]", поэтому проверка наличия значения — это нормально. Кроме того, get_post_meta()
— это простая обёртка для get_metadata()
, которая возвращает либо пустую строку ''
, либо пустой array()
, если значение отсутствует. Можете, пожалуйста, уточнить ваше утверждение или вам нужна помощь?

Я хотел сделать заметку для читателя, только и всего...
но заголовок вопроса сам по себе говорит (я не читал всю тему, только заголовок), что запрашивалось решение конкретной проблемы, и ответ не является 100%-ным решением той проблемы, которая была у меня (точно такой же, как в вопросе). Однако, возможно, он удовлетворил автора вопроса.

@T.Todua Тогда вам нужно уточнить, что вы подразумеваете под "существует". Как вы можете прочитать в ответе, а также по ссылке, которую я предоставил в комментарии выше, get_metadata()
достаточно для проверки наличия значения в БД.

да, get_metadata
— это другое. ... P.S. Я не ставил минус вашему ответу, просто это было моё замечание, которое побудило вас сделать более понятный комментарий! спасибо

@T.Todua В ответе нет минусов :) В любом случае, get_metadata()
фактически то же самое, что и get_post_meta()
. Последний — это просто упрощённая "обёртка" и внутри вызывает get_metadata()
. Кстати, не возражаете, если я отредактирую ваш комментарий и уберу бесконечный поток восклицательных знаков и жирное выделение?

нет, удалите его, как хотите... Я не смотрел на get_metadata()
. Не знаю, понимаете ли вы меня, что я имею в виду.. если ключ существует, но его значение пустое, то ваша функция переведёт это как "мета не существует"... однако, мне нужна была простая функция, которая просто скажет мне, существует ли эта мета вообще.

Ну, если вам нужно сырое значение, тогда можно использовать $id_list = [ /* ваши ID */ ]; $wpdb->get_results( "SELECT $column, meta_key, meta_value FROM $table WHERE ".sanitize_key('post_id')." IN ($id_list) ORDER BY meta_id ASC", ARRAY_A );
. В противном случае, WordPress core всегда будет возвращать либо пустой массив, либо пустую строку, в зависимости от того, запросили ли вы одиночное значение или все значения через аргумент функции.
