Если get_post_meta пустой, выполнить действие

26 июн. 2012 г., 22:32:13
Просмотры: 55K
Голосов: 5

Мне нужно противоположное этому:

<?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 работает совершенно по-другому.

Есть идеи?

Спасибо.

0
Все ответы на вопрос 4
4
10

Вы могли бы использовать функцию 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; ?>

 
26 июн. 2012 г. 22:38:39
Комментарии

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

User User
26 июн. 2012 г. 22:46:14

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

Shane Shane
26 июн. 2012 г. 22:53:37

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

User User
27 июн. 2012 г. 12:04:50

Некоторые функции, такие как empty(), не являются функциями в обычном смысле. Они реализованы как особенности языка/ключевые слова, которые оценивают переменную напрямую, вместо передачи значения в функцию.

Dave Ross Dave Ross
1 мар. 2015 г. 08:18:20
0

Вы можете использовать metadata_exists(); (это сработало у меня) для проверки любых метаданных записи, а затем делать что угодно.

    // Проверяем и получаем метаданные записи

if ( metadata_exists( 'post', $post_id, '_meta_key' ) ) {
    $meta_value = get_post_meta( $post_id, '_meta_key', true );
}
23 июн. 2017 г. 11:27:10
1

Я нашел это решение во время самостоятельного поиска, но затем осознал, что ответ очень прост. Нужно просто проверить, пустое ли значение, и если да — не выводить ничего, а если есть содержимое — отобразить его. Код, который я использовал, приведен ниже, и его можно адаптировать под свои нужды.

<?php $meta = get_post_meta( get_the_ID(), 'page-sub-title', true );
    if ($meta == '') {
        echo '&nbsp;';
    } else {
        echo '<h2>' . $meta . '</h2>';
      }
?>
19 февр. 2014 г. 23:11:49
Комментарии

работает, но почему get_the_ID() вместо старого доброго $post->ID

gurung gurung
8 апр. 2014 г. 19:01:57
0
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 Возвращает массив, содержащий ключи всех произвольных полей определенной записи или страницы. Для меня это лучшее решение :)

23 авг. 2018 г. 00:10:21