Woocommerce过滤 loop_shop_columns 在Woocommerce版本2.6.1中无法正常使用
我使用以下代码:
add_filter('loop_shop_columns', 'loop_columns');
if (!function_exists('loop_columns')) {
function loop_columns() {
return 3; // 3 products per row
}
}
答案 0 :(得分:1)
尝试在热门文件上写一下:WooCommerce>循环>环start.php
答案 1 :(得分: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 0.7。然后你仍然应该用css调整产品。
答案 2 :(得分: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
}
}