Question

Trois personnes ont déjà essayé de résoudre ce problème, et nous sommes à venir nul. Je veux montrer que les messages qui ont une valeur dans la meta_key « featured_image ».

Alors ... si « featured_image » est vide pas, montrer le poste. Voici le code:

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

Nous avons essayé littéralement toutes les combinaisons que nous pouvons penser, le meta_ * désapprouvée options, query_posts, get_posts, au lieu de WP_Query ... Rien. Imprimé l'instruction select, aucun champ de valeur méta montre. Il existe -. Pour les postes (pour chaque poste) et il existe dans la db

Nous avons vu tous les postes là-bas sur le sujet en ce moment, y compris ceux-ci:

query_posts et seulement si les résultats montrent un champ personnalisé n'est pas vide

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

Zilch. S'il vous plaît aider ...

Était-ce utile?

La solution

Salut @Rob:

La raison pour laquelle vous ne pouvez pas comprendre comment le faire est parce qu'il est impossible, du moins pas sans avoir recours à SQL. Essayez d'ajouter ce qui suit au fichier functions.php de votre thème:

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 vous avez des champs de 'featured_image' personnalisés avec des valeurs vides ci-dessus seront les filtrer. Si vous problème est quelque chose d'autre, nous allons voir ce que vos regards de données comme pour le résoudre.

Une chose que je suis curieux de savoir; comment avez-vous des valeurs vides pour 'featured_image'? L'interface d'administration dans WordPress 3.1 fait de son mieux pour vous empêcher d'entrer des valeurs vides. Espérons que cela aide.

Autres conseils

Cela semble fonctionner pour obtenir la valeur dans la requête, pas sûr si elle tire des résultats valides si ..

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

pas eu le temps de créer des champs pour tester les résultats, mais je surveille les requêtes que j'ai travaillé aujourd'hui et remarquées NOT IN prendra heureusement un tableau vide.

Ceci est une vieille question, mais il semble Wordpress a corrigé cette "fonctionnalité manquante": maintenant, selon Wordpress Codex est possible de vérifier l'existence (ou la non-existence) de la clé meta, comme celui-ci

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

Il est disponible à partir de WP> = 3.5.

Ceci est la requête qui a fonctionné pour moi. Très similaire à la comparaison dans la réponse à partir de 2011 de t31os, mais parce que la clé de méta / valeur est juste un textstring simple, il n'a pas besoin d'être un tableau 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'
);

Pour une raison quelconque, en utilisant 'meta_value' => '' et 'meta_compare' => '! =' ou 'meta_compare' => « NOT LIKE ' encore tiré tous les messages pour moi, mais il a probablement quelque chose à voir avec le fait que j'ai créé ma valeur meta en utilisant le plug-in avancée des champs personnalisés (ACF).

En savoir plus sur les paramètres de champs personnalisés dans le codex .

Ceci est fixé dans WP 3,2-alpha:

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

Suis-je manque quelque chose?

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

?>

est pas le faire?

!has_featured_image();

une doublure ftw.

Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top