loop_shop_columns过滤器无法正常工作(Woocommerce)

时间:2016-06-21 07:33:25

标签: wordpress woocommerce

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
    }

}

3 个答案:

答案 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
    }
}