meta_valueが空でない場合にのみ投稿を表示するにはどうすればよいですか


36

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など、考えられるすべての組み合わせを文字通り試しました。選択文を印刷しましたが、メタ値フィールドは表示されていません。それは存在します-投稿のために(すべての投稿のために)それはデータベースに存在します。

これらを含む、このトピックに関するすべての投稿を今すぐ見ました。

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

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

ジルチ。助けてください...


どのバージョンのWordPressを使用していますか?
MikeSchinkel

@MikeSchinkel-すみません、マイク、これを見ませんでした—それは3.1です。
ロバラン

WP 3.5この問題を修正し、別の比較方法を使用することができます
Erenorパズ

回答:


6

こんにちは、@ 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'空の値を持つカスタムフィールドがある場合、上記はそれらを除外します。問題が他の何かである場合、それを解決するためにデータがどのように見えるかを確認する必要があります。

私が知りたいことの1つは、どのようにして空の値を取得しました'featured_image'か?WordPress 3.1の管理UIは、空の値を入力しないように最善を尽くしています。お役に立てれば。


神に感謝...それは私たちだけではありません。知っておくといいでしょう。ありがとう@MikeSchinkel-彼らは本当にコーデックスにそれを入れるべきです...説明を楽しみにしています。ありがとう!!
ロバラン

@Rob-したがって、3.0の知識を失い、3.1でテストしているので、うまくいくようです。2つの投稿と1つのfeatured_imageカスタムフィールドがあり、クエリは正常に機能しています。何を見つけていますか?クエリがfeatured_imageカスタムフィールドを持つ投稿を読み込んでいるが、そのフィールドの値が空である可能性はありますか?
MikeSchinkel

@MikeSchinkel-冗談じゃない?はい、それはまさにそれです-すべての投稿にはfeatured_imageフィールドがあり、すべてが設定されているわけではありません。とにかくすべての投稿を読み込んでいます。
ロバラン

@Rob-最新の回答をご覧ください。
MikeSchinkel

@MikeSchinkel-ありがとう!クエリでpost_typeを設定した後も、完全に機能しているようです。空の値は意図的なものです。すべての投稿にこの注目の画像があるわけではありません(投稿のサムネイルについては知っていますが、このサイトには適していません)。本当にありがとう!
ロバラン

57

これは、クエリに値を取得するために機能するようですが、有効な結果をプルするかどうかはわかりません。

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

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


私はこれが古い答えであることを知っていますが、このアプローチを試す人にとって'compare' => 'NOT LIKE'は、'NOT IN'
-handsofatenの

3
not inまたはnot likeの代わりに!=を使用する方が確実に効率的です。wordpress.stackexchange.com/a/10286/32863と同じ(メタキーについてですが、同じ原理)
アダムアダム

5
さらにクリーンなソリューション:Adamがすでに述べたように。使用するもの: 'value' => '', 'compare' => '!='
Martijn van Hoof

空の配列ではないことを確認する必要がある場合'value' => array('', array(), serialize(array())), 'compare' => 'NOT IN'
StephanieQ

10

これは、古い質問ですが、Wordpressのは、この「欠落機能」に固定しているようだ:今、に応じてWordpressのコーデックスは、このように、メタキーの存在(または非存在)をチェックすることが可能です

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

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


EXISTS空の値が表示されますが、これはこの後ではありません。最善の解決策は'value' => '', 'compare' => '!=' 、私のテストの範囲内です。
ベン

1
@BenこれはまさにOPが試みたものですが、成功しなかったようです。meta_keyの存在に基づいて投稿を取得するためのメソッドを検索することで、人々がそれを見つけることができるように、私はソリューションを追加しました。メタの値は「何か」、「空」、または「null」(メタが存在しない場合)になる可能性があるため、おそらく2つのオプションを「AND」関係でマージするのが最善の解決策です
Erenor Paz

4

これは私のために働いたクエリです。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)プラグインを使用してメタ値を作成しました。

codexのカスタムフィールドパラメーターの詳細をご覧ください



3

何か不足していますか?

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

?>

それはしませんか?


編集:コーデックスから:$query = new WP_Query( 'meta_key=featured_image' ); こちらをご覧ください:codex.wordpress.org/Class_Reference/…–
Infinity Media

まず、コメントを追加する代わりに、質問または回答をいつでも編集できます。2番目:コメントの代わりに回答を誤用しないでください。
カイザー14年

新しい質問がある場合は、[ 質問する ]ボタンをクリックして質問してください。コンテキストの提供に役立つ場合は、この質問へのリンクを含めてください。
カイザー14年

@kaiser-彼は答えていたように思えます。彼は自分のコードが有効かどうかを尋ねているわけではありませんが、彼がうまくいくと信じていることで、皮肉な質問に答えているのではないでしょうか。
ネイサン

@Nathanこれがコメントの目的です。
カイザー

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.