Если посмотреть основную функцию WooCommerce wc_get_loop_class в WooCommerce \ включает \ туалет-шаблонный functions.php вы найдете эту строку:
$woocommerce_loop['columns'] = max(1, ! empty($woocommerce_loop['columns']) ? $woocommerce_loop['columns'] : apply_filters('loop_shop_columns', 4));
Так что если $ woocommerce_loop ['columns'] не является пустым и не ниже 1 в этой точке процесса, ваш фильтр никогда не будет принят, и я полагаю, что это так.
Честно говоря, я не исследовал больше, однако в качестве решения я предлагаю:
add_filter('post_class', 'my_woo_modify_product_class',40,3);
function my_woo_modify_product_class($classes, $class = '', $post_id = '') {
if (! $post_id || ! in_array(get_post_type($post_id), array('product', 'product_variation'))) {
return $classes;
}
$product = wc_get_product($post_id);
if ($product) {
if ($index = array_search('first', $classes)) {
unset($classes[ $index ]);
}
if ($index = array_search('last', $classes)) {
unset($classes[ $index ]);
}
global $woocommerce_loop;
$woocommerce_loop['loop'] = ! empty($woocommerce_loop['loop']) ? $woocommerce_loop['loop'] + 1 : 1;
$loop = 1 + absint(($woocommerce_loop['loop'] - 1)/2);
$cols = 4;
if (0 === ($loop - 1) % $cols || 1 === $cols) {
$classes[] = 'first';
} elseif (0 === $loop % $cols) {
$classes[] = 'last';
}
}
return $classes;
}
где $ COLS является желаемым числом столбцов Этого фильтра сбросьте первый 'и «последние» классов вызывают расположение двух столбцов и вводят их снова с учетом значения $ cols. $ woocommerce_loop ['loop'] - глобальная переменная Woocommerce, которая для каждого элемента продукта принимает значения 1,3,5, .... В любом случае я тестировал и работает с WooCommerce 3.0.7. Тогда вы все равно должны настроить продукт witdh с помощью css.