从wc_get_product_cat_class Woocommerce Function

时间:2016-02-17 06:40:09

标签: woocommerce

Woocommerce中的wc_get_product_cat_class函数wc-template-functions.php添加了类&#39;首先&#39;并且&#39;最后&#39;我的一些<li>元素。

我想删除这些类。有没有人知道我怎么能在我的functions.php中覆盖它而不编辑实际的Woocommerce功能?

我到处搜索但无法找到任何解决方案。我还是很陌生,希望这不是一个愚蠢的问题:/

以下是wc-template-functions.php

的功能
function wc_get_product_cat_class( $class = '', $category = null ) {
    global $woocommerce_loop;

    $classes   = is_array( $class ) ? $class : array_map( 'trim', explode( ' ', $class ) );
    $classes[] = 'product-category';
    $classes[] = 'product';

    if ( 0 === ( $woocommerce_loop['loop'] - 1 ) % $woocommerce_loop['columns'] || 1 === $woocommerce_loop['columns'] ) {
        $classes[] = 'first';
    }

    if ( 0 === $woocommerce_loop['loop'] % $woocommerce_loop['columns'] ) {
        $classes[] = 'last';
    }

    $classes = apply_filters( 'product_cat_class', $classes, $class, $category );

    return array_unique( array_filter( $classes ) );
}

这是来自content-product_cat.php模板的代码,它调用函数

<li <?php wc_product_cat_class( '', $category ); ?>>
    <?php
    /**
     * woocommerce_before_subcategory hook.
     *
     * @hooked woocommerce_template_loop_category_link_open - 10
     */
    do_action( 'woocommerce_before_subcategory', $category );

    /**
     * woocommerce_before_subcategory_title hook.
     *
     * @hooked woocommerce_subcategory_thumbnail - 10
     */
    do_action( 'woocommerce_before_subcategory_title', $category );

    /**
     * woocommerce_shop_loop_subcategory_title hook.
     *
     * @hooked woocommerce_template_loop_category_title - 10
     */
    do_action( 'woocommerce_shop_loop_subcategory_title', $category );

    /**
     * woocommerce_after_subcategory_title hook.
     */
    do_action( 'woocommerce_after_subcategory_title', $category );

    /**
     * woocommerce_after_subcategory hook.
     *
     * @hooked woocommerce_template_loop_category_link_close - 10
     */
    do_action( 'woocommerce_after_subcategory', $category ); ?>
</li>

2 个答案:

答案 0 :(得分:0)

延迟但认为这可能会有所帮助。您可以定义自己的wc_product_cat_class函数并从content-product_cat.php中调用它

例如: 如果你想删除&#34;第一个&#34;和&#34;最后&#34; class,你可以使用下面的代码。

function your_own_wc_product_cat_class( $class = '', $category = null ) {
    $product_cat_classes = array_diff( wc_get_product_cat_class( $class, $category ), array( 'first', 'last' ) );
    echo 'class="' . esc_attr( join( ' ', $product_cat_classes ) ) . '"';
}

现在你可以从content-product_cat.php这样调用这个<?php ro_wc_product_cat_class() ?>

答案 1 :(得分:-1)

也许它有点太晚了但希望有人也会需要它......

if (  ! function_exists( 'YOUR_product_cat_class' ) ) {

    function YOUR_product_cat_class( $class = '', $category = null ) {

        // this one is Toast grid based, I use it in my own theme
        $classes[] = 'grid__col';
        $wc_span = 12 / apply_filters( 'loop_shop_columns', 4 );
        $spans = array( 6, 4, 3, 2 );
        $span  = in_array( $wc_span, $spans ) ? $wc_span : 4;
        $classes[] = 'grid__col--' . $span . '-of-12';

        return array_unique( array_filter( $classes ) );

    }

}
add_filter( 'product_cat_class' , 'YOUR_product_cat_class' );

另外,请务必正确修改content-product_cat.php模板。例如,我没有使用无序列表而我的循环以DIV开头(content-product_cat.php,第37行):

<div <?php wc_product_cat_class( '', $category ); ?>>