web-dev-qa-db-ja.com

Meta_queryはget_posts配列内で機能しますか?

これがうまくいくようには思えません - メタ 'featured_image'値をanyに設定した投稿を表示しようとしています。私が言うことができることから、それは正しく設定されています、しかし私は私の頭の上に少し過ぎています。これは私が持っているものです:

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

クエリ全体を表示するように更新されました。何か案は? :\


WP_Queryに更新しました。投稿が表示されるようになりましたが、「featured_image」内に何かがある投稿のみではありません。それについて何かアイデアはありますか?新しいクエリ

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

まず、あなたのget_post_meta呼び出しにはキーがありません。複数の値が必要な場合は、get_post_meta( $post->ID, 'featured_image', true )get_post_meta( $post->ID, 'featured_image', false )にしないでください。

さらに、get_post_meta呼び出しの結果をここでは$meta['featured_image'][0]の値の配列を持つように扱っていますが、まだキーを指定していません。つまり、その時点で何かを含むことはほとんどありません。

私はget_post_meta呼び出しにキーがないことが主な問題であると思います。

さらに、!=演算子に戻ることをお勧めします。NOT LIKEは空の文字列の比較には実際には適切ではないでしょう。そのSQLがどのように見えるか想像してください。

WHERE meta_value NOT LIKE '%%'

ここで、等号比較を使用しているとします。

WHERE meta_value != ''

..私たちがチェックしようとしているのはまさにその通りです。空の値以外の値を持つメタフィールドです。

0
t31os