Объединение 2 таксономий в одном дереве навигации - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь добавить 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>


...