web-dev-qa-db-ja.com

管理ダッシュボードからメタクエリーでCPTを検索する方法

私は本当に明白な何かが欠けているように感じますが、私は見て、これを理解することができません。 CPT(request_form)があり、投稿のタイトルではなくメタクエリ(wp_postmeta)で検索を実行する必要があります。キャッチは私が管理者ダッシュボードからこれをする必要があることであり、私のコードは機能していません。私はユーザー側で同様の種類の検索をしましたが、以前は管理者側では行っていませんでした。私はpre_get_postsを使うのが正しいと思いました、しかし私はどこにもなっていません。

私が気づいた2つの奇妙なこと。

  1. meta_query$queryオブジェクト内に2回存在します。 $query->query_vars['meta_query']に一度、$query->meta_queryに一度。
  2. wp-config.phpSAVEQUERIESを有効にして$wpdb->queriesをダンプしても、クエリがまったく実行されていません。

    function my_search($query) {
      if (!is_admin()) {
        return;
      }
    
     if ($query->query['post_type'] !== 'request_form') {
       return;
     }
    
     if (!$query->is_search) {
      return $query;
     }
    
     $search = $query->query_vars['s'];
    
     $meta_query = array(
        'relation' => 'OR',
        array(
          'key' => 'request_details',
          'value' => $search,
          'compare' => 'LIKE'
        ),
        array(
          'key' => 'request_subject',
          'value' => $search,
          'compare' => 'LIKE'
        )
      );
    
      $query->set('meta_query', $meta_query);
      echo "<pre>";
      var_dump($query);
      echo "</pre>";
    
      return $query;
    }
    add_action('pre_get_posts', 'my_search');
    

次のようにsequelproを使用してデータベース内で直接クエリを実行すると、予想どおりの投稿が返されます(申し訳ありませんが、これはまったく同じではありません)。

SELECT * FROM wp_postmeta WHERE meta_value LIKE "%basketball%"

あなたが与えることができるあらゆる助けをありがとう!

1
aberkow

Query Monitorプラグインをインストールすると、検索を実行したときに実際に実行されているクエリを確認できます。

私はあなたが抱えている問題はあなたが最初のクエリ変数を設定解除していないということであると思われます。メタクエリを追加していますが、s =パラメータを削除していません。これは、タイトル、コンテンツ、および抜粋でキーワードを検索するだけです。

$query->set('meta_query', $meta_query);の下に、次のいずれかを追加してみてください。$query->set('s', '');には、 's'を空の文字列に設定するか、$query->__unset('s');に設定解除します。

1
Linda Paiste