たとえば、分類法を持つWooCommerce製品があります。
もちろん、すべてのブランドがすべてのカテゴリを含むわけではありません。
カテゴリ別にブランドをリストする必要があります。 ( Zapposがすることに似たもの 。E.g。:
Converse
- Sandals (2)
- Sneakers (6)
D&G
- Boots (10)
- Heels (4)
- Sandals (7)
特定のブランドを持つすべての製品をループ処理し、そのカテゴリをチェックする以外にこれを行うための簡単な方法はありますか?
投稿が分類法Yの用語にも関連付けられている分類法Xのすべての用語のリストを取得するには、次の手順を実行します。
行こう!
IDという用語を取得するのは簡単です。
get_terms( $taxonomy_name, array( 'fields' => 'ids' ) )
それを2回(各分類ごとに1回)実行するだけです。
タクソノミークエリでは、両方の分類法で are というすべての投稿を確認するために、関係AND
が必要です。
'tax_query' => array (
'relation' => 'AND',
array(
'taxonomy' => $first,
'field' => 'id',
'terms' => get_terms( $first, array( 'fields' => 'ids' ) )
),
array(
'taxonomy' => $second,
'field' => 'id',
'terms' => get_terms( $second, array( 'fields' => 'ids' ) )
),
),
書式設定のために、最初の分類法の用語がキーで、2番目の分類法の用語が値である配列を作成します。それからプレーンな<ul>
要素でネストしたリストを作ります。
今の機能:テストが簡単だったという理由だけで、分類法としてタグとカテゴリを使用しました。
function double_term_tree(
$post_types = array( 'post', 'page' ),
$first = 'category',
$second = 'post_tag'
)
{
$query = new WP_Query(
array (
'numberposts' => -1,
'suppress_filters' => TRUE,
'posts_per_page' => -1,
'post_type' => $post_types,
'tax_query' => array (
'relation' => 'AND',
array(
'taxonomy' => $first,
'field' => 'id',
'terms' => get_terms( $first, array( 'fields' => 'ids' ) )
),
array(
'taxonomy' => $second,
'field' => 'id',
'terms' => get_terms( $second, array( 'fields' => 'ids' ) )
),
),
)
);
if ( empty ( $query->posts ) )
return;
$result_list = array();
$output = '<ul>';
foreach ( $query->posts as $post )
{
$first_terms = get_the_term_list( $post->ID, $first, '', '|' );
$second_terms = get_the_term_list( $post->ID, $second, '', '|' );
$f_term_array = explode( '|', $first_terms );
$s_term_array = explode( '|', $second_terms );
foreach ( $f_term_array as $f_term )
{
if ( ! isset ( $result_list[ $f_term ] ) )
$result_list[ $f_term ] = array();
$result_list[ $f_term ] = array_merge( $result_list[ $f_term ], $s_term_array );
}
}
foreach ( $result_list as $k => $v )
{
$result_list[ $k ] = array_unique( $v );
$output .= "\n<li>$k\n\t<ul>\n\t\t<li>"
. join( "</li>\n\t\t<li>", array_unique( $v ) )
. "</li>\n\t</ul>\n</li>";
}
$output .= '</ul>';
return $output;
}
あなたはこのようにこの関数を呼ぶことができます:
echo double_term_tree( 'product', 'brand', 'category' );
そして、あなたはその木を手に入れます。