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

wordpress.stackexchange https://wordpress.stackexchange.com/questions/10881

  •  16-10-2019
  •  | 
  •  

Вопрос

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

Так что ... если 'effeed_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>

Мы пробовали буквально каждую комбинацию, о которой мы можем подумать, о том, что устаревшая мета -параметры, Query_posts, get_posts, вместо wp_query ... ничего. Отпечатано оператор SELECT, поле мета -значения не показывает. Он существует - для постов (для каждого поста) и существует в БД.

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

Query_posts и покажите результаты только в том случае, если пользовательское поле не пусто

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

Зилч. Пожалуйста помоги...

Это было полезно?

Решение

Привет @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'? Пользовательский интерфейс Admin в WordPress 3.1 делает все возможное, чтобы вы не входили в пустые значения. Надеюсь это поможет.

Другие советы

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

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

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

Это старый вопрос, но, похоже, WordPress исправил эту «отсутствующую функцию»: теперь, согласно WordPress Codex возможно проверить наличие (или несуществующего) мета-ключа, как это

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

Это доступно как WP> = 3,5.

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

$args = array(
    'posts_per_page' => 5,//replaced 'showposts' in version 2.1
    'meta_key' => 'featured_image',
    'meta_value' => array(''),
    'meta_compare' => 'NOT IN'
);

По какой -то причине использование 'meta_value' => '' а также 'meta_compare' => '! =' или же 'meta_compare' => 'не как' Все еще вытащил все сообщения для меня, но, вероятно, это как -то связано с тем фактом, что я создал свою мета -значение, используя плагин Advanced Custom Fields (ACF).

Узнайте больше о пользовательских параметрах поля в кодексе.

Это зафиксировано в WP 3.2-альфа:

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

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

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

?>

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

!has_featured_image();

Один лайнер FTW.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с wordpress.stackexchange
scroll top