WooCommerce:将类添加到产品循环项

时间:2019-11-25 19:52:07

标签: php wordpress woocommerce

我想在循环中的产品项中添加一些Bootstrap样式。

我知道,为此还有一个额外的模板。在模板文件content-product.php中,我可以向wc_product_class函数中添加一些代码。像这样:

<li <?php wc_product_class( 'col-6 col-lg-4', $product ); ?>>

但是现在该类已添加到商店中的每个循环项目中。就像相关产品中的单个产品模板一样。

我知道我可以添加一些if / else并检查我在哪一页上,并为每页添加样式。 但我想知道是否有更好的解决方案。有什么办法以编程方式添加类或挂钩函数?

在这种情况下,仅当例如在循环中并且不必在模板文件中添加大量代码时,才可以更改/添加类。

2 个答案:

答案 0 :(得分:1)

您绝对可以在这里使用过滤器,但是要控制其放置位置,可能会在它运行到页面其他部分时需要在运行remove_filter后进行一些操作。

因此,对于wc_product_class函数,它会调用wc_get_product_class,最终会利用post_class的过滤器挂钩。如果要使用此控件控制类,则可能需要对此进行钩子。

过滤器(seen here)带有3个参数:

$classes:要添加的类名称的数组

$class:要添加的类名的数组或字符串,在本例中为'col-6 col-lg-4'。

$post_id:正在使用的帖子ID /产品ID。

您可能需要编写如下内容:

add_filter('post_class', function($classes, $class, $product_id) {
    if(is_product_category()) {
        //only add these classes if we're on a product category page.
        $classes = array_merge(['col-6','col-lg-4'], $classes);
    }
    return $classes;
},10,3);

答案 1 :(得分:1)

在woocommerce插件“ 3.6.2”中,文件“ wc-template-functions.php”显示为:

//注意,要更改类,您将需要使用较新的woocommerce_post_class过滤器。

我的完整答案在这里:

Full answer