使用挂钩替换 Woocommerce 中的星级
Replace star ratings in Woocommerce using hooks
启用后,每个 woocommerce 产品都有星级。我有一些自定义代码,我想完全替换当前的星级评分(包括“# customer reviews”部分。
目前,我使用的代码只是附加到星级,而不是完全替换它。下面是我看到的当前结果,以及我添加到 functions.php 的代码。提前谢谢你。
代码:
add_filter( 'woocommerce_get_star_rating_html', 'replace_star_ratings' );
function replace_star_ratings( $variable ) {
echo "XXX";
return $variable;
}
woocommerce_product_get_rating_html
将是您想要的过滤器,但我认为即使这样也不足以满足您的需求。您将不得不覆盖 rating.php 模板以更改所有内容。
woocommerce/single-product/rating.php
如果您在单个产品页面上进行操作。如果您在循环中执行此操作,则上面的过滤器应该可以正常工作,但无论如何这是模板位置
woocommerce/loop/rating.php
要在不编辑模板的情况下完全替换产品的星级,请使用以下内容:
// For single product pages
add_action( 'woocommerce_single_product_summary', 'custom_rating_single_product_summary', 4 );
function custom_rating_single_product_summary() {
global $product;
if ( $product->get_rating_count() > 0 ) {
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_rating', 10 );
add_action( 'woocommerce_single_product_summary', 'replace_product_rating', 9 );
}
}
// For Shop and archicves pages
add_action( 'woocommerce_after_shop_loop_item_title', 'custom_rating_after_shop_loop_item_title', 4 );
function custom_rating_after_shop_loop_item_title() {
global $product;
if ( $product->get_rating_count() > 0 ) {
remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 5 );
add_action( 'woocommerce_after_shop_loop_item_title', 'replace_product_rating', 5 );
}
}
// Content function
function replace_product_rating() {
global $product;
$rating_count = $product->get_rating_count();
$review_count = $product->get_review_count();
$average = $product->get_average_rating();
echo '<div class="woocommerce-product-rating">'. __("XXX", "woocommerce") . '</div>';
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。
要完全替换它,您需要 return 要在网页上显示的 HTML 代码。
例如,我想用 Font Awesome 星号替换字符串“Rated %s out of 5”:
add_filter('woocommerce_get_star_rating_html', 'replace_star_ratings', 10, 2);
function replace_star_ratings($html, $rating) {
$html = ""; // Erase default HTML
for($i = 0; $i < 5; $i++) {
$html .= $i < $rating ? '<i class="fa fa-star"></i>' : '<i class="fa fa-star-o"></i>';
}
return $html;
}
此处无需使用echo
。
启用后,每个 woocommerce 产品都有星级。我有一些自定义代码,我想完全替换当前的星级评分(包括“# customer reviews”部分。
目前,我使用的代码只是附加到星级,而不是完全替换它。下面是我看到的当前结果,以及我添加到 functions.php 的代码。提前谢谢你。
代码:
add_filter( 'woocommerce_get_star_rating_html', 'replace_star_ratings' );
function replace_star_ratings( $variable ) {
echo "XXX";
return $variable;
}
woocommerce_product_get_rating_html
将是您想要的过滤器,但我认为即使这样也不足以满足您的需求。您将不得不覆盖 rating.php 模板以更改所有内容。
woocommerce/single-product/rating.php
如果您在单个产品页面上进行操作。如果您在循环中执行此操作,则上面的过滤器应该可以正常工作,但无论如何这是模板位置
woocommerce/loop/rating.php
要在不编辑模板的情况下完全替换产品的星级,请使用以下内容:
// For single product pages
add_action( 'woocommerce_single_product_summary', 'custom_rating_single_product_summary', 4 );
function custom_rating_single_product_summary() {
global $product;
if ( $product->get_rating_count() > 0 ) {
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_rating', 10 );
add_action( 'woocommerce_single_product_summary', 'replace_product_rating', 9 );
}
}
// For Shop and archicves pages
add_action( 'woocommerce_after_shop_loop_item_title', 'custom_rating_after_shop_loop_item_title', 4 );
function custom_rating_after_shop_loop_item_title() {
global $product;
if ( $product->get_rating_count() > 0 ) {
remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 5 );
add_action( 'woocommerce_after_shop_loop_item_title', 'replace_product_rating', 5 );
}
}
// Content function
function replace_product_rating() {
global $product;
$rating_count = $product->get_rating_count();
$review_count = $product->get_review_count();
$average = $product->get_average_rating();
echo '<div class="woocommerce-product-rating">'. __("XXX", "woocommerce") . '</div>';
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。
要完全替换它,您需要 return 要在网页上显示的 HTML 代码。
例如,我想用 Font Awesome 星号替换字符串“Rated %s out of 5”:
add_filter('woocommerce_get_star_rating_html', 'replace_star_ratings', 10, 2);
function replace_star_ratings($html, $rating) {
$html = ""; // Erase default HTML
for($i = 0; $i < 5; $i++) {
$html .= $i < $rating ? '<i class="fa fa-star"></i>' : '<i class="fa fa-star-o"></i>';
}
return $html;
}
此处无需使用echo
。