Я пытаюсь добавить 2 таксономии вместе, чтобы создать вложенный список непустых терминов.
Клиент использует категории (woocommerce "product_cat"), а затем у него есть другая таксономия, называемая "мусорными ведрами". (Условия для мусорных ведер включают такие вещи, как продажа и промо). Категории являются вложенными, а мусорные ведра плоскими.
Таким образом, конечная навигация должна выглядеть следующим образом:
Продажа - категория 1 - субкат 1 - субкат 2 - категория 2 - субкат 2 Промо - категория 1 - субкат 4 -sub cat 6 - категория 2 - sub cat 3
У меня есть решение на данный момент, но поскольку я перебираю все на каждой странице загрузки, это довольно интенсивно использует сервер, и мне нужно сделать его легче,так что я надеюсь, что есть функция wp, о которой я не знаю, которая сделает это для меня.
<?php
$binsurl = $nf->current_url();
if (strpos($binsurl, 'product_cat') !== false) {
$binsurl = explode('product_cat',$binsurl);
$binsurl = explode('/',$binsurl[1]);
$binsurl = array_filter($binsurl);
$link_new = get_option('home') . '/product_cat/' . $binsurl[1] . '/bins/new/';
$link_value = get_option('home') . '/product_cat/' . $binsurl[1] . '/bins/end-of-range/';
$link_promo = get_option('home') . '/product_cat/' . $binsurl[1] . '/bins/promo/';
$link_low_stock = get_option('home') . '/product_cat/' . $binsurl[1] . '/bins/low-stock/';
$link_sale = get_option('home') . '/product_cat/' . $binsurl[1] . '/bins/sale/';
} else {
$link_new = get_option('home') . '/bins/new/';
$link_value = get_option('home') . '/bins/end-of-range/';
$link_promo = get_option('home') . '/bins/promo/';
$link_low_stock = get_option('home') . '/bins/low-stock/';
$link_sale = get_option('home') . '/bins/sale/';
}
$product_cat_arr = getProductCategoriesList();
?>
<ul>
<li class="cat-item <?php if (is_tax('bins','sale')) { echo 'current-cat-parent current-cat-ancestor'; } ?>">
<a href="<?php echo $link_sale; ?>">Sale</a>
<?php
echo '<ul class="children">';
foreach ($product_cat_arr as $k1 => $pca) {
if ($k1 != 'uncategorised') {
?><li class="<?php if (strpos( $nf->current_url(), $k1) && strpos( $nf->current_url(), '/sale')) { echo 'current-cat exp'; } ?>">
<?php
foreach ($product_cat_arr[$k1] as $k2 => $pca2) {
if (!is_array($product_cat_arr[$k1][$k2])) {
echo '<a href="'.get_option('home').'/product_cat/'.$k1.'/bins/sale/">' . $product_cat_arr[$k1][$k2] . '</a>';
} else {
echo '<ul>';
foreach ($product_cat_arr[$k1][$k2] as $k3 => $pca3) {
$binargs = array(
'post_type' => 'product',
'posts_per_page' => 1,
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => array( $k2 ),
),
array(
'taxonomy' => 'bins',
'field' => 'slug',
'terms' => array( 'sale' ),
)
)
);
$binquery = new WP_Query( $binargs );
if ( $binquery->have_posts() ) {
?><li class="<?php if (strpos( $nf->current_url(), $k2) && strpos( $nf->current_url(), '/new')) { echo 'current-cat exp'; } ?>">
<?php
if (!is_array($product_cat_arr[$k1][$k2][$k3])) {
echo '<a href="'.get_option('home').'/product_cat/'.$k1.'/'.$k2.'/bins/sale/">' . $product_cat_arr[$k1][$k2][$k3] . '</a>';
}
echo '</li>';
}
wp_reset_postdata();
}
echo '</ul>';
}
}
echo '</li>';
}
}
echo '</ul>';
?>
</li>
</ul>