Pregunta

Tres personas ya han tratado de resolver esto, y estamos llegando nulos. Quiero mostrar solo publicaciones que tengan un valor en el meta_key 'séntese_image'.

Entonces ... si 'streened_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 cada combinación que se nos ocurramos, las opciones de meta_* en desuso, consulta_posts, get_posts, en lugar de wp_query ... nada. Impreso la instrucción SELECT, no muestra ningún campo de meta valor. Existe: para las publicaciones (para cada publicación) y existe en el DB.

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

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

http://scribu.net/wordpress/advanced-metadata-queries.html

Nada. Por favor ayuda...

¿Fue útil?

Solución

Hola @Robar:

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

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 tienes personalizado 'featured_image' Campos 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 resolverlos.

Una cosa que tengo curiosidad; ¿Cómo obtuviste valores vacíos para 'featured_image'? La interfaz de usuario de administración en WordPress 3.1 hace todo lo posible para evitar que ingrese valores vacíos. Espero que esto ayude.

Otros consejos

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

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

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

Esta es una vieja pregunta, pero parece que WordPress ha solucionado esta "característica faltante": ahora, según WordPress Codex es posible verificar la existencia (o la no existencia) de la meta clave, 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.

Esta es la consulta que funcionó para mí. Muy similar a la comparación en la respuesta de T31OS de 2011, pero debido a que la meta clave/valor es solo un sencillo de texto, no necesita ser una matriz de 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 alguna razón, usando 'meta_value' => '' y 'Meta_Compare' => '! =' o 'meta_compare' => 'no como' Aún me sacó todas las publicaciones, pero probablemente tenga algo que ver con el hecho de que creé mi meta valor utilizando el complemento avanzado de campos personalizados (ACF).

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

Esto se fija en WP 3.2-Alpha:

http://core.trac.wordpress.org/ticket/15292

¿Me estoy perdiendo de algo?

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

?>

¿Eso no lo hará?

!has_featured_image();

un revestimiento FTW.

Licenciado bajo: CC-BY-SA con atribución
scroll top