Se get_post_meta è vuoto esegui qualcosa

26 giu 2012, 22:32:13
Visualizzazioni: 55K
Voti: 5

Ho bisogno dell'opposto di questo:

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

In altre parole, voglio style="display:none;" solo quando i meta dati non esistono.

Pensavo fosse semplice come if ( get_post_meta($post->ID, 'price_list_category1', true ma questo true/false si rivela essere una cosa completamente diversa.

Qualche idea?

Grazie.

0
Tutte le risposte alla domanda 4
4
10

Potresti usare la funzione empty all'interno del tuo if in questo modo:

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

Il codice sopra restituisce un errore, dovresti assegnare il valore di ritorno a una variabile. Vedi la mia modifica qui sotto.

Attenzione

empty potrebbe non essere l'opzione migliore a seconda dei valori che memorizzi nei meta. Valori come false, 0 ecc... verranno considerati vuoti.

Consulta il manuale PHP per la lista completa dei valori considerati vuoti.

Modifica

Puoi provare ad assegnare il meta a una variabile e usarla nell'istruzione if.

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

E poi...

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

 
26 giu 2012 22:38:39
Commenti

Ho provato questo, ma dà un errore fatale: Non posso usare il valore di ritorno di una funzione in un contesto di scrittura

User User
26 giu 2012 22:46:14

Potresti assegnare il valore di ritorno del meta a una variabile e usare quella variabile dentro l'if. Vedi la mia modifica.

Shane Shane
26 giu 2012 22:53:37

Sembra che empty abbia delle limitazioni e abbia bisogno di una variabile semplice per funzionare. Una di quelle limitazioni di PHP che non hanno senso.

User User
27 giu 2012 12:04:50

Alcune funzioni come empty() non sono funzioni nel senso tradizionale. Sono implementate come caratteristiche del linguaggio o parole chiave che valutano direttamente una variabile invece di passare un valore a una funzione.

Dave Ross Dave Ross
1 mar 2015 08:18:20
0

Puoi utilizzare metadata_exists(); (ha funzionato per me) per verificare la presenza di meta post e poi fare ciò che desideri.

    // Verifica e ottieni un meta post

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

Ho trovato questa soluzione cercando una risposta per un mio problema, ma mi sono reso conto che la soluzione è molto semplice. Basta verificare se il valore è vuoto, se lo è allora non viene visualizzato nulla - se invece contiene del testo, allora viene mostrato il contenuto - il codice che ho utilizzato è riportato qui sotto e può essere adattato da chiunque ne abbia bisogno.

<?php $meta = get_post_meta( get_the_ID(), 'page-sub-title', true );
    if ($meta == '') {
        echo '&nbsp;';
    } else {
        echo '<h2>' . $meta . '</h2>';
      }
?>
19 feb 2014 23:11:49
Commenti

funziona ma perché usare get_the_ID() invece del vecchio caro $post->ID

gurung gurung
8 apr 2014 19:01:57
0
if( ! in_array( 'given_key', get_post_custom_keys($post_id) ) ) {}

Qui è scritto: https://developer.wordpress.org/reference/functions/get_post_meta/#user-contributed-notes

get_post_custom_keys Restituisce un array contenente le chiavi di tutti i campi personalizzati di un particolare post o pagina. Per me, questa è la soluzione migliore :)

23 ago 2018 00:10:21