Как я могу показать сообщения, только если meta_value не пуст

Три человека уже попытались решить это, и мы подходим ноль. Я хочу показать только сообщения, которые имеют значение в meta_key 'featured_image'.

Так..., если 'featured_image' не пуст, покажите сообщение. Вот код:

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

Мы попробовали буквально каждую комбинацию, о которой мы можем думать, meta_* опции устаревшие, query_posts, get_posts, вместо WP_Query... Ничего. Распечатанный избранный оператор, никакое поле значения meta не показывает. Это существует - для сообщений (для каждого сообщения), и это существует в дб.

Мы видели каждое сообщение там по теме прямо сейчас, включая их:

query_posts и только показывают результаты, если пользовательское поле не пусто

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

Ничто. Помогите...

37
13.04.2017, 15:37
5 ответов

Привет @Rob:

Причина, которую Вы не можете выяснить, как сделать это, состоит в том, потому что это не возможно, по крайней мере, не обращаясь к SQL. Попытайтесь добавить следующее к своей теме functions.php файл:

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

Если Вы имеете пользовательский 'featured_image' поля с пустым вышеупомянутым значений будут фильтровать их. Если Вы, проблема - что-то еще, мы должны будем видеть то, на что Ваши данные похожи для решения ее.

Одна вещь мне любопытно на предмет; как Вы получали пустые значения для 'featured_image'? Администратор UI в WordPress 3.1 прилагает все усилия, чтобы помешать Вам вводить пустые значения.Надеюсь, это поможет.

6
19.02.2020, 21:54
  • 1
    Слава Богу..., таким образом, это не просто мы. Это хорошо для знания, я предполагаю. Спасибо @MikeSchinkel - Они действительно должны поместить это в кодекс... Нетерпеливое ожидание объяснения.Спасибо!! –  robalan 02.03.2011, 08:10
  • 2
    @Rob - Таким образом, я уходил свои 3,0 знания, и теперь я тестирую их в 3,1, и это, действительно кажется, работает. У меня есть два сообщения и один с a featured_image пользовательское поле и Ваш запрос хорошо работают. Что Вы находите? Есть ли шанс, Ваш запрос загружает сообщения, которые действительно имеют a featured_image пользовательское поле, но где значение для того поля пусто? –  MikeSchinkel 02.03.2011, 08:45
  • 3
    @MikeSchinkel - Никакое ребячество? Да, это точно, что это делает — каждое сообщение имеет featured_image поле, они просто все не установлены. Это загружает все сообщения так или иначе. –  robalan 02.03.2011, 09:20
  • 4
    @Rob - См. мой обновленный ответ. –  MikeSchinkel 02.03.2011, 09:48
  • 5
    @MikeSchinkel - Спасибо! Это, кажется, работает отлично после установки post_type в запросе также. Пустые значения целеустремленны — не, каждое сообщение имеет это известное изображение (и я знаю о миниатюре сообщения, это - просто не хороший вариант для этого сайта). Большое спасибо! –  robalan 02.03.2011, 17:14

Это, кажется, работает на получение значения в запрос, не уверенный в том, вытягивает ли это допустимые результаты хотя..

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

Не имел время для создания полей для тестирования результатов, но я наблюдал запросы, с которыми я работал сегодня и заметил NOT IN счастливо возьмет пустой массив.

58
19.02.2020, 21:54
  • 1
    я знаю это, является старым ответом, но для тех, которые пробуют этот apparoach, он работает с 'compare' => 'NOT LIKE' вместо 'NOT IN' –  handsofaten 11.07.2012, 20:10
  • 2
    Конечно, более эффективный для использования! = вместо не в или не как. То же как wordpress.stackexchange.com/a/10286/32863 (который является о метаклавишах, но тот же принцип) –  Adam 09.09.2015, 22:22
  • 3
    Даже более чистое решение: как Adam, указанный уже. Должен использовать: 'value' => '', 'compare' => '!=' –  Martijn van Hoof 20.04.2018, 11:32
  • 4
    Если необходимо проверить, чтобы удостовериться, что это не пустой массив... 'value' => array('', array(), serialize(array())), 'compare' => 'NOT IN' –  StephanieQ 14.08.2018, 19:39

Это фиксируется в WP, с 3.2 альфами:

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

3
19.02.2020, 21:54
!has_featured_image();

один лайнер ftw.

-3
19.02.2020, 21:54

Я пропускаю что-то?

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

?>

Разве это не сделает этого?

3
19.02.2020, 21:54
  • 1
    : из кодекса: $query = new WP_Query( 'meta_key=featured_image' ); послушайте: codex.wordpress.org/Class_Reference / … –  Infinity Media 24.01.2014, 23:50
  • 2
    Сначала, можно всегда редактировать вопрос или ответ вместо того, чтобы добавить комментарий. Во-вторых: не неправильно используйте ответы вместо комментариев. –  kaiser 25.01.2014, 02:05
  • 3
    Если у Вас есть новый вопрос, спросите это путем нажатия кнопки Ask Question. Включайте ссылку на этот вопрос, если он помогает обеспечить контекст. –  kaiser 25.01.2014, 02:05
  • 4
    @kaiser - кажется мне как, он отвечал. Он не спрашивает, действителен ли его код, но я предполагаю вид саркастически ответа на вопрос с тем, чему он верит, будет работать. –  Nathan 05.09.2016, 07:19
  • 5
    @Nathan Это - то, для чего комментарии. –  kaiser 05.09.2016, 10:42

Теги

Похожие вопросы