使用挂钩替换Woocommerce中的星级

时间:2018-12-21 20:17:22

标签: php wordpress woocommerce hook-woocommerce rating

启用后,每个woocommerce产品均具有星级。我有一些自定义代码,我想全部替换当前的星级(包括“#客户评论”部分。

当前,我使用的代码仅附加到星级,而不是完全替换它。以下是我看到的当前结果,以及已添加到functions.php中的代码。预先谢谢你。

enter image description here

代码:

add_filter( 'woocommerce_get_star_rating_html', 'replace_star_ratings' );

function replace_star_ratings( $variable ) {
    echo "XXX";
    return $variable;
}

3 个答案:

答案 0 :(得分:2)

要在不编辑模板的情况下完全替代产品上的星级评定,请使用以下命令:

// 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文件中。经过测试,可以正常工作。

答案 1 :(得分:0)

select()将是您想要的过滤器,但我认为即使对于您要执行的操作,它也不够广泛。您将必须覆盖rating.php模板才能进行所有更改。

woocommerce_product_get_rating_html 如果您在单个产品页面上执行此操作。如果您在循环中执行此操作,则上面的过滤器应该可以正常工作,但是无论如何这是模板位置 woocommerce/templates/single-product/rating.php

答案 2 :(得分:0)

要完全替换它,您需要返回要在网页上显示的HTML代码。

例如,我想用“真棒字体”替换字符串“ Rated%s of 5”(满分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