si get_post_meta está vacío hacer algo

26 jun 2012, 22:32:13
Vistas: 55K
Votos: 5

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.

0
Todas las respuestas a la pregunta 4
4
10

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

 
26 jun 2012 22:38:39
Comentarios

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

User User
26 jun 2012 22:46:14

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

Shane Shane
26 jun 2012 22:53:37

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

User User
27 jun 2012 12:04:50

Algunas funciones como empty() no son funciones en el sentido tradicional. Están implementadas como características del lenguaje o palabras clave que evalúan una variable directamente en lugar de pasar un valor a una función.

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

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 );
}
23 jun 2017 11:27:10
1

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 '&nbsp;';
    } else {
        echo '<h2>' . $meta . '</h2>';
      }
?>
19 feb 2014 23:11:49
Comentarios

funciona pero ¿por qué get_the_ID() en lugar del buen $post->ID

gurung gurung
8 abr 2014 19:01:57
0
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 :)

23 ago 2018 00:10:21