メモ:カスタムクエリの作り方<メモ程度要追記>

メモ。

  1. 既存のURLパターンとかぶらないURLを考える。(例:http://example.com/ore-query/taxonomy/oretax/term1,term2/)
  2. rewrite ruleに追記する:
     add_filter('rewrite_rules_array', 'ore_rule');
    function ore_rule($rules){
     $rules['.*?/?'ore-query/taxonomy/([^/]+?)/([^/]+?)(?:/page/(\d+))?/?$']
      = 'index.php?ore_taxonomy=$matches[0]&ore_terms=$matches[1]&paged=$matches[2]';
     return $rules;
    }
    
  3. 得られるクエリの値に基づいて処理。
     add_action('wp', 'ore_parse_query');
    function ore_parse_query(){
     $ore_tax = get_query_var('ore_taxonomy');
     $term_slugs = explode( ',', get_query_var('ore_terms') );
     $ore_terms = array();
     foreach ($term_slugs as $t) {
      $ore_terms[] = get_term_by('slug', $t, $ore_tax);
     }
     global $wp_query;
     $wp_query;
     query_posts( array_merge( $wp_query->query, array( 'tax_query' => array(
      'relation' => 'AND',
      array(
       'taxonomy' => $ore_tax,
       'field' => 'slug',
       'terms' => $ore_terms,
      )
     ) ) ) );
     //とかなんとか。
    }
    

Leave a Reply