Если get_post_meta пустой, выполнить действие
Мне нужно противоположное этому:
<?php if ( get_post_meta($post->ID, 'price_list_category1', true) ) : ?>style="display:none;"<?php endif; ?>
Другими словами, я хочу чтобы style="display:none;"
отображался только когда метаданные не существуют.
Я думал, что это будет просто, как if ( get_post_meta($post->ID, 'price_list_category1', true
, но оказалось, что этот true/false работает совершенно по-другому.
Есть идеи?
Спасибо.

Вы могли бы использовать функцию empty
внутри вашего условия if
следующим образом:
<?php if( empty( get_post_meta( $post->ID, 'price_list_category1', true ) ) ) : ?>style="display:none;"<?php endif; ?>
Вышеуказанный код возвращает ошибку, вам следует присвоить возвращаемое значение переменной. Смотрите мою правку ниже.
Предупреждение
empty
может быть не лучшим вариантом в зависимости от значений, которые вы храните в метаполях. Значения такие как false
, 0
и т.д. будут считаться пустыми.
Проверьте руководство по PHP для полного списка значений, которые считаются пустыми.
Правка
Вы можете попробовать присвоить метаполю переменную и использовать её в условии if
.
<?php
$price_list = get_post_meta( $post->ID, 'price_list_category1', true );
?>
И затем...
if( empty( $price_list) ) : ?>style="display:none"<?php endif; ?>

Я попробовал это, но получаю фатальную ошибку: Can't use function return value in write context

Вы можете присвоить возвращаемое значение мета-поля переменной и использовать эту переменную внутри if
. Смотрите мои правки.

Похоже, empty имеет ограничения и требует простую переменную для своей работы. Одно из тех бессмысленных ограничений PHP.

Вы можете использовать metadata_exists();
(это сработало у меня) для проверки любых метаданных записи, а затем делать что угодно.
// Проверяем и получаем метаданные записи
if ( metadata_exists( 'post', $post_id, '_meta_key' ) ) {
$meta_value = get_post_meta( $post_id, '_meta_key', true );
}

Я нашел это решение во время самостоятельного поиска, но затем осознал, что ответ очень прост. Нужно просто проверить, пустое ли значение, и если да — не выводить ничего, а если есть содержимое — отобразить его. Код, который я использовал, приведен ниже, и его можно адаптировать под свои нужды.
<?php $meta = get_post_meta( get_the_ID(), 'page-sub-title', true );
if ($meta == '') {
echo ' ';
} else {
echo '<h2>' . $meta . '</h2>';
}
?>

if( ! in_array( 'given_key', get_post_custom_keys($post_id) ) ) {}
Здесь написано: https://developer.wordpress.org/reference/functions/get_post_meta/#user-contributed-notes
get_post_custom_keys Возвращает массив, содержащий ключи всех произвольных полей определенной записи или страницы. Для меня это лучшее решение :)
