我想在循环中的产品项中添加一些Bootstrap样式。
我知道,为此还有一个额外的模板。在模板文件content-product.php
中,我可以向wc_product_class
函数中添加一些代码。像这样:
<li <?php wc_product_class( 'col-6 col-lg-4', $product ); ?>>
但是现在该类已添加到商店中的每个循环项目中。就像相关产品中的单个产品模板一样。
我知道我可以添加一些if / else并检查我在哪一页上,并为每页添加样式。 但我想知道是否有更好的解决方案。有什么办法以编程方式添加类或挂钩函数?
在这种情况下,仅当例如在循环中并且不必在模板文件中添加大量代码时,才可以更改/添加类。
答案 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过滤器。
我的完整答案在这里: