it-swarm.com.de

Funktioniert meta_query im Array get_posts?

Ich scheine nicht in der Lage zu sein, dies zum Laufen zu bringen - ich versuche Posts zu zeigen, bei denen der Metawert 'featured_image' auf irgendetwas gesetzt ist. Soweit ich das beurteilen kann, ist es korrekt eingerichtet, aber ich bin etwas überfordert. Folgendes habe ich:

 <ul>
  <?php
    global $post;
    $myposts = get_posts(array(
      'showposts' => 5,
      'offset' => 7,
      'meta_query' => array(
        array(
          'key' => 'featured_image',
          'value' => '',
          'compare' => 'NOT LIKE'
          )
        )
    ));
    foreach($myposts as $post) {
      setup_postdata($post);
      $meta = get_post_meta($post->ID, '');
  ?>
    <li>
      <a href=""><img src="<?php bloginfo('template_directory'); ?>/timthumb.php?src=<?php if (isset($meta['featured_image'][0]) && !empty($meta['featured_image'][0])): echo $meta['featured_image'][0]; else: ?>/wp-content/themes/SSv2011/images/review-default.gif<?php endif; ?>&w=84&h=60" alt="" /></a>
    </li>
  <?php unset($myposts); ?>
  <?php } ?>
  </ul>

Aktualisiert, um die gesamte Abfrage anzuzeigen. Irgendwelche Ideen? : \


Aktualisiert auf WP_Query und ich erhalte die Anzeige von Beiträgen, aber es handelt sich nicht NUR um Beiträge mit dem Inhalt "featured_image". Irgendwelche Ideen damit? Die neue Abfrage:

      <?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();
      ?>
2
robalan
1
robalan

Erstens hat Ihr get_post_meta-Aufruf keinen Schlüssel, sollte das nicht get_post_meta( $post->ID, 'featured_image', true ) oder get_post_meta( $post->ID, 'featured_image', false ) sein, wenn Sie mehrere Werte wünschen.

Außerdem behandeln Sie die Ergebnisse des get_post_meta-Aufrufs so, als hätte er hier ein Array von Werten $meta['featured_image'][0], Sie haben jedoch keinen Schlüssel angegeben, sodass es sehr unwahrscheinlich ist, dass zu diesem Zeitpunkt etwas enthalten ist.

Ich vermute, dass das Fehlen eines Schlüssels im get_post_meta-Aufruf das Hauptproblem ist.

Außerdem würde ich vorschlagen, zum Operator != zurückzukehren. NOT LIKE wäre für einen Vergleich mit leeren Zeichenfolgen nicht wirklich geeignet. Stellen Sie sich vor, wie diese SQL aussehen wird.

WHERE meta_value NOT LIKE '%%'

Woher als mit dem nicht gleich Vergleich bekommen wir ..

WHERE meta_value != ''

..das ist (glaube ich) genau das, wonach wir suchen wollen, ein Metafeld mit einem Wert, der alles andere als ein leerer Wert ist.

0
t31os