Se get_post_meta è vuoto esegui qualcosa
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.

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; ?>

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

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

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.

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 );
}

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 ' ';
} else {
echo '<h2>' . $meta . '</h2>';
}
?>

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 :)
