サポート » 使い方全般 » 特定のカスタムフィールドを持たないページの検索

  • 解決済 Takanashi

    (@takanashi-motoharu)


    特定のカスタムフィールドを持たないページを検索する方法です。

    function pre_get_posts_filter($query) {
      if (!$query->is_admin && $query->is_search) {
        $query->set('meta_query', array(array('value' => '', 'compare' => 'LIKE')));
      }
      return $query;
    }
    
    function posts_where_filter($where = '') {
      global $table_prefix;
      if (isset($_GET['s'])) {
        $where .= " AND (ID NOT IN (SELECT ID FROM ". $table_prefix. "posts INNER JOIN ".
          $table_prefix. "postmeta ON post_id = ID WHERE meta_key LIKE 'カスタムフィールド'))";
      }
      return $where;
    }
    
    add_filter('pre_get_posts', 'pre_get_posts_filter');
    add_filter('posts_where'  , 'posts_where_filter'  );

    方法を検索したところ、見つからなかったのと、探している人もけっこういるようだった
    ので投稿いたしました。
    また、あまり WordPress の仕組みを理解しないまま書いています。指摘等がありましたら
    ご指導いただけるとうれしいです。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター jim912

    (@jim912)

    WP_Query の meta_query で3.9から compare に NOT EXISTS が使えるようになっています。

    Class Reference/WP Query 5.13 Custom Field Parameters

    トピック投稿者 Takanashi

    (@takanashi-motoharu)

    貴重な情報をいただきありがとうございます。

    NOT EXISTS、英語版ですが Codex にも載っていたのですね。見落としておりました。
    だいぶ簡単に使えるようになりそうで、カスタムフィールドを積極的に使えそうです。

    以前も別件の質問でご回答いただいており、いつもありがとうございます。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「特定のカスタムフィールドを持たないページの検索」には新たに返信することはできません。