Comment afficher des publications uniquement si meta_value n'est pas vide

27

Trois personnes ont déjà essayé de résoudre ce problème et nous n’avons aucune chance. Je souhaite afficher uniquement les publications qui ont une valeur dans la méta_key 'Featured_image'.

Alors ... si 'Featured_image' n'est pas vide, affichez le message. 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 possibles, les options obsolètes meta_ *, query_posts, get_posts, au lieu de WP_Query ... Rien. Imprimé l’instruction select, aucun champ de méta-valeur n’est affiché. Il existe - pour les articles (pour chaque article) et il existe dans la base de données.

Nous avons vu tous les articles sur le sujet actuellement, y compris ceux-ci:

query_posts et afficher uniquement les résultats si un champ personnalisé n'est pas vide

enlace

Zilch. S'il vous plaît, aidez-moi ...

    
posée robalan 02.03.2011 - 06:56
la source

7 réponses

6

Bonjour @Rob:

La raison pour laquelle vous ne savez pas comment le faire, c'est parce que ce n'est pas possible, du moins pas sans recourir à 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 'featured_image' personnalisés avec des valeurs vides, ce qui est indiqué ci-dessus les filtrera. Si votre problème est autre chose, nous devrons voir à quoi ressemblent vos données pour le résoudre.

Une chose qui m'intrigue; Comment avez-vous obtenu des valeurs vides pour 'featured_image' ? L'interface utilisateur d'administration dans WordPress 3.1 fait de son mieux pour vous empêcher d'entrer des valeurs vides. J'espère que cela vous aidera.

    
réponse donnée MikeSchinkel 02.03.2011 - 07:05
la source
49

Cela semble fonctionner pour obtenir la valeur dans la requête, mais vous ne savez pas si des résultats valides sont obtenus ..

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

Je n'ai pas eu le temps de créer des champs pour tester les résultats, mais j'ai suivi les requêtes avec lesquelles j'ai travaillé aujourd'hui et j'ai remarqué que NOT IN prendrait avec plaisir un tableau vide.

    
réponse donnée t31os 04.03.2011 - 01:20
la source
3

Ceci est corrigé dans WP 3.2-alpha:

enlace

    
réponse donnée scribu 03.03.2011 - 01:43
la source
3

Est-ce que 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-ce que ça ne va pas le faire?

    
réponse donnée Infinity Media 24.01.2014 - 22:47
la source
3

C’est la requête qui a fonctionné pour moi. Très similaire à la comparaison faite dans la réponse de t31os à partir de 2011, mais comme la méta clé / valeur est juste une simple chaîne de texte, il n’est pas nécessaire que ce soit un tableau 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, utilisez 'meta_value' = > '' et 'meta_compare' = > '! =' ou 'meta_compare' = > 'NOT LIKE' a quand même tiré tous les articles pour moi, mais cela a probablement un lien avec le fait que j'ai créé ma méta-valeur à l'aide du plugin Advanced Custom Fields (ACF).

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

    
réponse donnée Tessa 10.01.2018 - 15:03
la source
3

C'est une vieille question, mais il semble que Wordpress ait corrigé cette "fonctionnalité manquante": maintenant, selon Wordpress Codex permet de vérifier l’existence (ou non-existence) de la clé méta, comme ceci

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

Ceci est disponible à partir de WP > = 3.5.

    
réponse donnée Erenor Paz 06.12.2017 - 18:18
la source
-3
!has_featured_image();

une doublure ftw.

    
réponse donnée tom 30.01.2012 - 12:39
la source

Lire d'autres questions sur les étiquettes