web-dev-qa-db-ja.com

Meta_valueが空でない場合にのみ投稿を表示する方法

3人がすでにこれを解決しようとしています、そして我々は皆無になっています。 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>

WP_Queryではなく、文字通り、考えられるあらゆる組み合わせ、つまり推奨されないmeta_ *オプション、query_posts、get_postsを試してみました... selectステートメントを印刷しました。メタ値フィールドは表示されていません。それは存在します - 投稿用(すべての投稿用)で、dbに存在します。

私たちはこれらのトピックを含めて、このトピックに関するすべての投稿を見てきました。

query_posts。カスタムフィールドが空でない場合にのみ結果を表示する

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

Zilch助けてください...

34
robalan

こんにちは @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'の空の値はどうやって得たのですか? WordPress 3.1の管理UIは、空の値を入力しないようにしています。お役に立てれば。

6
MikeSchinkel

これは値をクエリに入れるためには有効であるように見えますが、それが有効な結果を引き出すかどうかはわかりません。

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

結果をテストするためのフィールドを作成する時間はありませんでしたが、今日作業していたクエリを見てきましたが、NOT INは空の配列を受け取ることに気付いたのです。

55
t31os

これは古い質問ですが、Wordpressはこの「欠けている機能」を修正したようです。今、 Wordpress Codex に従って、メタキーの存在(または存在しない)をチェックすることができます

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

これはWP> = 3.5以降で利用可能です。

7
Erenor Paz

私は何かが足りない?

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

?>

そうじゃないの?

3
Infinity Media

これは私のために働いた質問です。 2011年のt31osの回答との比較と非常によく似ていますが、メタキー/値は単なる単純なテキスト文字列なので、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' => 'NOT LIKE' を使用するそれでも私にはすべての投稿を引っ張ってきましたが、おそらくAdvanced Custom Fields(ACF)プラグインを使用して私のメタ値を作成したという事実と関係があります。

コーデックスのカスタムフィールドパラメータについてもっと読む

3
Tessa

これはWP 3.2-alphaで修正されています。

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

3
scribu