Как обернуть ul .products .columns в div со своим классом woocommerce?

На странице магазина нужно обернуть вывод товара в div с классом. Если просто добавить div в файлы loop-start.php и loop-and.php, то div появляется на всех страницах, а это плохо. Я попробовал такую конструкцию , но она не помогла.

function  woocommerce_product_columns_wrapper() {
    if (is_shop()) {
        echo '<div class="shop">';       
    } 
}
   add_action( 'woocommerce_before_shop_loop', ' woocommerce_product_columns_wrapper'
); 

function woocommerce_product_columns_wrapper_after() {
    if (is_shop()) {
        echo '</div">';       
    } 
}
add_action( 'woocommerce_after_shop_loop', ' woocommerce_product_columns_wrapper_after'
);

Сто я делаю не так?


Ответы (1 шт):

Автор решения: Darth KYL

в вашем примере есть лишний пробел в начале название callback функции, поэтому вы не видите обертку

я бы на вашем месте сделал вот так, если вам нужно обернуть только товары

add_filter( 'woocommerce_product_loop_start', 'woocommerce_product_columns_wrapper');

function  woocommerce_product_columns_wrapper( $loop_start ) {
    return is_shop() ? '<div class="shop">' . $loop_start : $loop_start;
}


add_action( 'woocommerce_product_loop_end', 'woocommerce_product_columns_wrapper_after');

function woocommerce_product_columns_wrapper_after( $loop_end ) {
    return is_shop() ? $loop_end . '</div>' : $loop_end;
}

если же вам нужно обернуть весь контент с фильтрами сортировкой и пагинацией то можно это сделать через ваш код только с изменением приоритетов

add_action( 'woocommerce_before_shop_loop', 'woocommerce_product_columns_wrapper', 5 ); 
function  woocommerce_product_columns_wrapper() {
    if (is_shop()) {
        echo '<div class="shop">';       
    } 
}


add_action( 'woocommerce_after_shop_loop', 'woocommerce_product_columns_wrapper_after', 15 );
function woocommerce_product_columns_wrapper_after() {
    if (is_shop()) {
        echo '</div">';       
    } 
}
→ Ссылка