it-swarm.com.de

Wie kann ich Beiträge nur anzeigen, wenn meta_value nicht leer ist?

Drei Leute haben bereits versucht, dieses Problem zu lösen, und wir kommen gleich zu Ende. Ich möchte nur Posts anzeigen, die einen Wert im meta_key 'featured_image' haben.

Also ... wenn 'featured_image' nicht leer ist, zeige den Beitrag. Hier ist der 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>

Wir haben buchstäblich jede denkbare Kombination ausprobiert, die veralteten meta_ * -Optionen, query_posts, get_posts anstelle von WP_Query ... Nichts. Die Select-Anweisung wurde gedruckt, es wird kein Meta-Wert-Feld angezeigt. Es existiert - für die Beiträge (für jeden Beitrag) und es existiert in der Datenbank.

Wir haben jeden Beitrag zu diesem Thema gesehen, einschließlich dieser:

query_posts und zeige nur Ergebnisse, wenn ein benutzerdefiniertes Feld nicht leer ist

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

Zilch. Bitte helfen Sie ...

34
robalan

Hallo @Rob:

Der Grund, warum Sie nicht herausfinden können, wie es geht, ist, dass es nicht möglich ist, zumindest nicht ohne Rückgriff auf SQL. Fügen Sie der functions.php-Datei Ihres Themas Folgendes hinzu:

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

Wenn Sie benutzerdefinierte 'featured_image' Felder mit leeren Werten haben, filtern die oben genannten diese heraus. Wenn Ihr Problem etwas anderes ist, müssen wir sehen, wie Ihre Daten aussehen, um es zu lösen.

Eine Sache, auf die ich neugierig bin; Wie sind Sie zu leeren Werten für 'featured_image' gekommen? Die Admin-Benutzeroberfläche in WordPress 3.1 versucht, Sie daran zu hindern, leere Werte einzugeben. Hoffe das hilft.

6
MikeSchinkel

Dies scheint zu funktionieren, um den Wert in die Abfrage zu übernehmen, obwohl nicht sicher ist, ob er gültige Ergebnisse liefert.

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

Ich hatte keine Zeit, Felder zu erstellen, um die Ergebnisse zu testen, aber ich habe Abfragen beobachtet, mit denen ich heute gearbeitet habe, und festgestellt, dass NOT IN gerne ein leeres Array annimmt.

55
t31os

Dies ist eine alte Frage, aber es scheint, dass Wordpress diese "fehlende Funktion" behoben hat: Jetzt ist es laut Wordpress Codex möglich, die Existenz (oder Nichtexistenz) des Metaschlüssels auf diese Weise zu überprüfen

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

Dies ist verfügbar ab WP> = 3.5.

7
Erenor Paz

Vermisse ich etwas?

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

?>

Tut das nicht?

3
Infinity Media
3
Tessa

Dies ist in WP 3.2-alpha behoben:

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

3
scribu