0

複数のカテゴリとサブカテゴリが割り当てられた投稿がある Web サイトで作業しています。FacetWP を使用して、これらの投稿をカテゴリとサブカテゴリで検索するオプションをユーザーに提供したいと考えています。次の例のように階層的に動作するようにします。

ある投稿に次のカテゴリが割り当てられているとします。

France  - Paris   - River
                  - Street
        - Lyon    - Street
                  - House
Germany - Hamburg - Street
        - Berlin  - House
                  - Church

ここで、ドロップダウン ファセットを作成します。最初のドロップダウンでメイン カテゴリ (この場合は国) のみを提供します。その後、誰かが国を選択したときに、その特定の国 (この場合は都市) のサブカテゴリのみを表示する 2 番目のドロップダウンが必要です。その後、次のドロップダウンにサブサブカテゴリのみを表示したいと思います。

そのため、誰かがフランスを選択すると、次のドロップダウンにはパリとリヨンのみが表示されます (ハンブルグとベルリンは表示されません)。パリが選択されると、次のドロップダウンには川と通りのみが表示されます (家や教会は表示されません)。

これは FacetWP で可能ですか? または、それを可能にするために微調整する方法はありますか?

4

1 に答える 1

1

各カテゴリ レベルに 1 つずつ、合計 3 つのファセットを作成する必要があります。

次に、facetwp_facet_htmlフィルターを使用する必要があります。

select2 ファセットを使用する例を次に示します。

```

function fwp_limit_subcategory( $output, $params ) {

  $facet = $params['facet'];
  if ($facet['type'] != 'select2') { return $output; }

  $custom_out = $out = '';
  $exploded = explode('<option', $output);


if ( 'subcategory' == $facet['name'] ) {

    // See if a category is selected
    foreach ( FWP()->facet->facets as $f ) {

        if ( 'category' == $f['name'] && empty( $f['selected_values'] ) ) {
          return $exploded[0].'</select>';
        }

        if ( 'category' == $f['name'] && ! empty( $f['selected_values'] ) ) {

            $term_slugs = $f['selected_values'];

            foreach($term_slugs as $term_slug) {

              $term = get_term_by( 'slug', $term_slug, 'category' );
              if ( isset( $term->term_id ) ) {

                  $get_terms = get_terms(
                    array(
                      'parent' => $term->term_id, 
                      'taxonomy' => 'category',
                      'hierarchical' => true
                    )
                  );
                  foreach ($exploded as $opt) {
                    foreach($get_terms as $child) {
                      if (strpos($opt, $child->slug) !== false) {
                        $custom_out .= '<option '. $opt;
                      }
                    }

                  }



              }
            }

        }
    }
  }
}

if ($custom_out != '') { 
  $out .= $exploded[0].$custom_out;
  if (strpos($out, '</select>') === false) {
    $out .= '</select>';
  }
  return $out; 


return $output;

}
add_filter( 'facetwp_facet_html', 'fwp_limit_subcategory', 10, 2 );

```

これがあなたを助け、正しい軌道に乗せることを願っています.

編集

役立つ可能性のある追加の解決策を発見しました。

  1. 1 つのファセットで上位のみのカテゴリにインデックスを付ける
  2. 別のファセットで子のみのカテゴリにインデックスを付ける
  3. 最初のファセットの結果に従って、2 番目のファセットの結果を微調整します。
  4. 3 番目、4 番目のファセットなどについて繰り返します
于 2016-11-29T03:07:17.130 に答える