2016-06-21 54 views

回答

1

尝试把它写在上面的文件: WooCommerce> Loop> loop-start.php

1

如果您在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调整产品。

0

设置优先级为1

add_filter('loop_shop_columns', 'loop_columns',1,10); 

if (!function_exists('loop_columns')) { 
    function loop_columns() { 
     return 4; // 3 products per row 
    } 
}