如果您在woocommerce \ includes \ wc-template-functions.php中查看woocommerce核心函数wc_get_loop_class,您会发现此行:
$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是列 这个过滤器没有设置“第一”和“最后”类的所需数量导致2列布局,并考虑$ cols值再次介绍它们。 $ woocommerce_loop ['loop']是一个全局的Woocommerce变量,对于每个产品项目都假定值为1,3,5 ....在任何情况下,我已经测试过,它可以与WooCommerce 3.0.7一起使用。那么你仍然应该用CSS调整产品。