robalan
  • 0
Учитель

Работает ли meta_query в массиве get_posts?

  • 0

Кажется, я не могу заставить это работать — я пытаюсь показать сообщения, у которых мета-значение «featured_image» установлено на что-либо. Насколько я могу судить, он настроен правильно, но я немного не в себе. Вот что у меня есть:

 <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();
      ?>
Share
  1. Во- первых, у вашего 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 '%%'
    

    Где, используя сравнение not equals, мы получаем..

    WHERE meta_value != ''
    

    .. что (я считаю) именно то, что мы собираемся проверить, мета-поле со значением, которое является чем угодно, но не пустым значением.

    • 0

Оставить ответ

You must login to add an answer.