web-dev-qa-db-ja.com

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のように簡単であると思いました、しかしこの真偽は全く異なるものであることがわかります。

何か案は?

ありがとうございました。

4
user8842

以下のように、empty内でif関数を使用できます。

<?php if( empty( get_post_meta( $post->ID, 'price_list_category1', true ) ) ) : ?>style="display:none;"<?php endif; ?>

上記はエラーを返します。戻り値を変数に代入する必要があります。下記の私の編集を参照してください。

警告

メタに格納する値によっては、emptyが最善の選択肢ではない場合があります。 false0などの値は空と見なされます。

空と見なされる値の完全なリストについては、 PHP manual を確認してください。

編集

メタを変数に代入し、それをifステートメントで使用することができます。

 <?php
      $price_list = get_post_meta( $post->ID, 'price_list_category1', true );
 ?>

その後...

 if( empty( $price_list) ) : ?>style="display:none"<?php endif; ?>
8
Shane

私は自分で解決策を探すことでこれを発見しましたが、答えは非常に簡単です。値が空かどうか、それが何もエコーしない場合 - それが内容を持っている場合、その内容を表示する - をチェックする必要があるだけです。

<?php $meta = get_post_meta( get_the_ID(), 'page-sub-title', true );
    if ($meta == '') {
        echo '&nbsp;';
    } else {
        echo '<h2>' . $meta . '</h2>';
      }
?>
4
Nikki Mather

あなたはmetadata_exists();(私のために働いていました)を使ってどんな投稿メタとあなたが望むものでもdoをチェックすることができます。

    // Check and get a post meta

if ( metadata_exists( 'post', $post_id, '_meta_key' ) ) {
    $meta_value = get_post_meta( $post_id, '_meta_key', true );
}
4
Ganesh
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 特定の投稿またはページのすべてのカスタムフィールドのキーを含む配列を返します。私にとっては、これが最善の解決策です:)

0
SpaceShip