web-dev-qa-db-fra.com

Comment puis-je afficher les publications uniquement si meta_value n'est pas vide

Trois personnes ont déjà essayé de résoudre ce problème et nous montons nul. 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 littéralement essayé 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 messages (pour chaque message) 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 n'affiche les résultats que si un champ personnalisé n'est pas vide

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

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

34
robalan

Bonjour @Rob:

Si vous ne savez pas comment faire, c'est parce que c'est impossible, du moins 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 t'aides.

6
MikeSchinkel

Cela semble fonctionner pour obtenir la valeur dans la requête, mais vous ne savez pas si elle génère des résultats valides.

'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 suis en train de regarder les requêtes avec lesquelles j'ai travaillé aujourd'hui et j'ai remarqué que NOT IN prendra avec plaisir un tableau vide.

55
t31os

C'est une vieille question, mais il semble que Wordpress ait corrigé cette "fonctionnalité manquante": maintenant, selon Wordpress Codex il est possible de vérifier l'existence (ou la non-existence) de la méta clé, 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.

7
Erenor Paz

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

?>

Ça ne va pas le faire?

3
Infinity Media

C'est la requête qui a fonctionné pour moi. Très similaire à la comparaison 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, en utilisant 'meta_value' => '' et 'meta_compare' => '! =' ou 'meta_compare' => 'PAS LIKE' continue de tirer tous les articles pour moi, mais cela a probablement quelque chose à voir 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 champ personnalisés dans le codex .

3
Tessa

Ceci est corrigé dans WP 3.2-alpha:

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

3
scribu