¿Cómo puedo mostrar publicaciones solo si meta_value no está vacío?

27

Tres personas ya han intentado resolver esto, y estamos llegando a cero. Quiero mostrar solo las publicaciones que tengan un valor en la meta_key 'Featured_image'.

Entonces ... si 'Featured_image' no está vacío, muestre la publicación. Aquí está el código:

      <ul>
      <?php
      $args = array(
        'showposts' => 5,
        'meta_query' => array(
          array(
            'key' => 'featured_image',
            'value' => '',
            'compare' => '!='
            )
          )
      );
      $ft_pagination = new WP_Query( $args );
      ?>
      <?php while ($ft_pagination->have_posts()) : $ft_pagination->the_post(); ?>
        <?php $ftimage = get_post_meta(get_the_id(), 'featured_image', TRUE); ?>
        <li>
          <article>
            <a href="">
            <?php if ($ftimage): ?>
              <img src="<?php bloginfo('template_directory'); ?>/timthumb.php?src=<?php echo $ftimage; ?>&w=84&h=60" alt="" />
            <?php else: ?>
              <img src="<?php bloginfo('template_directory'); ?>/timthumb.php?src=/wp-content/themes/ssv/images/review-default.gif&w=84&h=60" alt="" />
            <?php endif; ?>
            </a>
          </article>
        </li>
      <?php
      endwhile;

      wp_reset_query();
      ?>
      </ul>

Hemos intentado literalmente todas las combinaciones que podemos imaginar, las opciones meta_ * en desuso, query_posts, get_posts, en lugar de WP_Query ... Nada. Imprimió la declaración de selección, no se muestra ningún campo de valor meta. Existe, para las publicaciones (para cada publicación) y existe en la base de datos.

Hemos visto todas las publicaciones sobre el tema en este momento, incluidas estas:

query_posts y solo muestra resultados si un campo personalizado no está vacío

enlace

Zilch. Por favor ayuda ...

    
pregunta robalan 02.03.2011 - 06:56

7 respuestas

6

Hola @Rob:

La razón por la que no puedes descubrir cómo hacerlo es porque no es posible, al menos no sin recurrir a SQL. Intente agregar lo siguiente al archivo functions.php de su tema:

add_filter('posts_where','yoursite_posts_where',10,2);
function yoursite_posts_where($where,$query) {
  global $wpdb;
  $new_where = " TRIM(IFNULL({$wpdb->postmeta}.meta_value,''))<>'' ";
  if (empty($where))
    $where = $new_where;
  else
    $where = "{$where} AND {$new_where}";
  return $where;
}

Si tiene campos personalizados 'featured_image' con valores vacíos, los anteriores los filtrarán. Si su problema es otra cosa, tendremos que ver cómo se ven sus datos para resolverlo.

Una cosa de la que tengo curiosidad; ¿Cómo obtuviste valores vacíos para 'featured_image' ? La IU de administrador en WordPress 3.1 hace todo lo posible para evitar que ingreses valores vacíos. Espero que esto ayude.

    
respondido por el MikeSchinkel 02.03.2011 - 07:05
49

Esto parece funcionar para incluir el valor en la consulta, aunque no estoy seguro de si obtiene resultados válidos ...

'meta_query' => array(
    array(
        'key' => 'some_key',
        'value'   => array(''),
        'compare' => 'NOT IN'
    )
)

No tuve tiempo de crear campos para probar los resultados, pero he estado observando las consultas con las que trabajé hoy y noté que NOT IN tomará una matriz vacía.

    
respondido por el t31os 04.03.2011 - 01:20
3

Esto se ha corregido en WP 3.2-alpha:

enlace

    
respondido por el scribu 03.03.2011 - 01:43
3

¿Me estoy perdiendo algo?

<?php 
    $args = array(
        'post_type' => 'post',
        'posts_per_page' => -1,
        'meta_key' => "featured_image"
    );
    $the_query = new WP_Query( $args ); 

?>

¿No lo hará?

    
respondido por el Infinity Media 24.01.2014 - 22:47
3

Esta es la consulta que funcionó para mí. Muy similar a la comparación en la respuesta de t31os de 2011, pero como la clave / valor meta es solo una simple cadena de texto, no es necesario que sea una matriz meta_query.

$args = array(
    'posts_per_page' => 5,//replaced 'showposts' in version 2.1
    'meta_key' => 'featured_image',
    'meta_value' => array(''),
    'meta_compare' => 'NOT IN'
);

Por cualquier motivo, use 'meta_value' = > '' y 'meta_compare' = > '! =' o 'meta_compare' = > "NO ME GUSTA" aún me sacó todas las publicaciones, pero probablemente tenga algo que ver con el hecho de que creé mi valor meta utilizando el complemento de Campos personalizados personalizados (ACF).

Lea más acerca de los parámetros de campo personalizados en el códice .

    
respondido por el Tessa 10.01.2018 - 15:03
3

Esta es una pregunta antigua, pero parece que Wordpress corrigió esta "característica faltante": ahora, de acuerdo con Wordpress Codex es posible verificar la existencia (o no existencia) de la clave meta, como esta

'meta_query' => array(
    array(
        'key' => 'featured_image',
        'compare' => 'EXISTS', //or "NOT EXISTS", for non-existance of this key
    )
)

Esto está disponible a partir de WP > = 3.5.

    
respondido por el Erenor Paz 06.12.2017 - 18:18
-3
!has_featured_image();

un trazador de líneas ftw.

    
respondido por el tom 30.01.2012 - 12:39

Lea otras preguntas en las etiquetas