web-dev-qa-db-ja.com

特定のmeta_valueがないものを除くカスタム投稿タイプのリストを返す

更新:メタクエリオプションの助けを借りて正しい道を進んでいると思いますが、非常に非効率的であるために行き過ぎたかもしれません。更新されたコードはこの投稿の下部にあります。 。

技術的には3つの質問がありますが、それらは関連しており、最初の質問に回答する必要があるため、ここにすべて投稿してもかまいません。

これを少しコンテキストに入れるために、私は、各投稿の3つのメタフィールドにある3つのURLに追加できる種類のディレクトリに取り組んでいます。上記のURLを1〜3個追加した投稿のみのリストを表示したい。これをさらに面白くするために、アイテムが売り切れた場合に選択できる各メタフィールドに対応する3つのチェックボックスもあります。このリストから売り切れたアイテムも除外したいと思います。

質問1-すべて同じmeta_valueとキーを持つ(同じ値を持つものを除く)カスタム投稿タイプの投稿のリストを表示するにはどうすればよいですか

myPostType内の'meta_value' => falseのすべてのmyMetaKey投稿を返すリストを作成できました。以下のコードを参照してください:

<?php 
    $args = array(
        'post_type' => 'myPostType', 
        'meta_key' => 'myMetaKey', 
        'meta_value' => false, 
        'orderby' => '_custom', 
        'order' => 'ASC', 
        'posts_per_page' => -1, );
    $loop = new WP_Query($args);
    while ($loop->have_posts() ) : $loop->the_post();
?>

doesmyMetaKeymeta_valueを含む投稿を返すリストを作成することに興味があります。 meta_valuefalsetrueに変更するのと同じくらい簡単だと思いましたが、代わりに空のリストを返します。

解決済み:質問2-異なるmeta_key 'sの投稿を含むリストを返すにはどうすればよいですか?

myPostTypemyMetaKeyA、およびmyMetaKeyBの両方を含むmyMetaKeyCからの投稿もリストに表示することに興味がありますが、meta_valueがtrueの場合(または上記の質問1)で求められたものと同等。

meta_queryクラスに誘導してくれたNielsに感謝します。複数の配列をmeta_queryに追加すると、うまくいきました。

質問3-対応するチェックボックスが選択されたmeta_keyを含む投稿を除外する方法

冒頭で述べたように、選択したチェックボックスを使用して投稿を除外することにも興味があります。


多くの問題を修正したと思いますが、私のコードは非常に非効率的であるため、実際には使い物になりません

下にあるので、30分以上かかります。ロードする(30分後にタブを閉じたように)。これをより効率的に書き換える方法についてのポインタはありますか?

<?php 
  $args = array(
    'post_type' => array('myPostType1', 'myPostType2'), 
    'orderby' => '_custom', 
    'order' => 'ASC', 
    'posts_per_page' => -1,
    'meta_query' => array( 'relation' => 'OR',
      array('relation' => 'AND',
          array(
            'key' => 'product1',
            'value' => false,
            'compare' => '!=',
            ),
          array(
            'key' => 'stock1',
            'value' => '"soldOut1"',
            'compare' => 'NOT LIKE',
            )
          ),
      array('relation' => 'AND',
          array(
            'key' => 'product2',
            'value' => false,
            'compare' => '!=',
            ),
          array(
            'key' => 'stock2',
            'value' => '"soldOut2"',
            'compare' => 'NOT LIKE',
            )
          ),
      array('relation' => 'AND',
          array(
            'key' => 'product3',
            'value' => false,
            'compare' => '!=',
            ),
          array(
            'key' => 'stock3',
            'value' => '"soldOut3"',
            'compare' => 'NOT LIKE',
            )
          )
        )
  );
  $loop = new WP_Query($args);
  while ($loop->have_posts() ) : $loop->the_post();
?>
1
rpbtz

現在のコードを考慮すると、あなたが望むことができるWP Meta Queryクラスを見逃したと思います。

https://codex.wordpress.org/Class_Reference/WP_Meta_Query

1