si get_post_meta está vacío hacer algo
Necesito lo opuesto a esto:
<?php if ( get_post_meta($post->ID, 'price_list_category1', true) ) : ?>style="display:none;"<?php endif; ?>
En otras palabras, quiero style="display:none;"
solo cuando los metadatos no existen.
Pensé que sería simple como if ( get_post_meta($post->ID, 'price_list_category1', true
pero este true/false resulta ser algo completamente diferente.
¿Alguna idea?
Gracias.

Podrías usar la función empty
dentro de tu if
de esta manera:
<?php if( empty( get_post_meta( $post->ID, 'price_list_category1', true ) ) ) : ?>style="display:none;"<?php endif; ?>
El código anterior devuelve un error, deberías asignar el valor de retorno a una variable. Mira mi edición más abajo.
Advertencia
empty
podría no ser la mejor opción dependiendo de los valores que almacenes en el meta. Valores como false
, 0
, etc... serán considerados como vacíos.
Consulta el manual de PHP para ver la lista completa de valores que se consideran vacíos.
Edición
Puedes intentar asignar el meta a una variable, y usar esa variable en la sentencia if
.
<?php
$price_list = get_post_meta( $post->ID, 'price_list_category1', true );
?>
Y luego...
if( empty( $price_list) ) : ?>style="display:none"<?php endif; ?>

Probé esto, me da el error fatal: No se puede usar el valor de retorno de una función en contexto de escritura

Podrías asignar el valor de retorno del meta a una variable y usar esa variable dentro del if
. Mira mi edición.

parece que empty tiene limitaciones, y necesita una variable simple para hacer su magia. una de esas limitaciones de php que no tienen sentido.

Puedes usar metadata_exists();
(funcionó para mí) para verificar cualquier meta de publicación y luego hacer lo que necesites.
// Verificar y obtener un meta de publicación
if ( metadata_exists( 'post', $post_id, '_meta_key' ) ) {
$meta_value = get_post_meta( $post_id, '_meta_key', true );
}

Encontré esto buscando una solución por mi cuenta, pero me di cuenta de que la respuesta es muy simple. Solo necesitas verificar si el valor está vacío, si lo está, no mostrar nada; si tiene contenido, entonces mostrar el contenido. El código que usé está abajo y puede adaptarse según sea necesario para cualquiera que necesite usarlo.
<?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) ) ) {}
Aquí está escrito: https://developer.wordpress.org/reference/functions/get_post_meta/#user-contributed-notes
get_post_custom_keys Devuelve un array que contiene las claves de todos los campos personalizados de un post o página en particular. Para mí, esta es la mejor solución :)
