在Woocommerce的某些页面上通过产品ID添加星级评分

时间:2018-08-31 23:54:02

标签: php html wordpress woocommerce rating

是否可以在自定义位置的自定义页面上致电特定产品的星级?换句话说,例如,是否可以添加特定T恤的星级,使其出现在主页上T恤的图片下方?

我想我需要在编辑器中添加某种php,然后通过某种html对其进行调用。我看到了this answered thread,其中的一个答案似乎对人们有所帮助,但是,它只会为您提供必要的php,因此我不知道如何将其实际放在特定页面的特定位置上。我也不确定该答案是否解决了在自定义页面(而不只是woocommerce页面)上加星号的可能性。

该线程的另一个答案包含html。我尝试了一下,并能够加载星星,只是它们与产品页面上的实际星级不符。

我对已经存在类似的问题表示歉意,但是,它们似乎并不能直接满足我的需求,我也无能为力,无法使它们起作用:/。

1 个答案:

答案 0 :(得分:2)

对于特定的产品ID ,您可以使用一些专用的WC_Product方法:

// Get an instance of the WC_Product Object (from a product ID)
$product = wc_get_product( $product_id);

// The product rating count (number of reviews by rating )
$rating_count = $product->get_rating_counts(); // Multidimensional array

// The product average rating (or how many stars this product has)
$average_rating = $product->get_average_rating();

// Testing Output
echo '<p>Rating average: '.$average_rating.' stars</p>';

要显示产品“星级”的平均评分:

您可以将专用功能wc_get_rating_html()get_average_rating() WC_Product方法一起使用。因此,必要的代码将是:

// Get an instance of the WC_Product Object (from a product ID)
$product = wc_get_product( $product_id);

// The product average rating (or how many stars this product has)
$average_rating = $product->get_average_rating();

// The product stars average rating html formatted.
$average_rating_html = wc_get_rating_html($average_rating);

// Display stars average rating html
echo $average_rating_html;

经过测试,可以正常工作。

  

一个有趣的答案: Rating is showing numbers instead of stars


用于在任何地方显示产品星级的简码-2个代码版本

1)基于wc_get_rating_html()函数(适用于Woocommerce 3 +)的最佳方法

add_shortcode( 'product_rating', 'display_the_product_rating' );
function display_the_product_rating( $atts ) {
    // Shortcode attributes
    $atts = shortcode_atts( array(
        'id' => '',
    ), $atts, 'product_rating' );

    if ( isset($atts['id']) && $atts['id'] > 0 ):

    // Get an instance of the WC_Product Object
    $product = wc_get_product( $atts['id'] );

    // The product average rating (or how many stars this product has)
    $average = $product->get_average_rating();

    endif;

    if ( isset($average) ) :

    return wc_get_rating_html($average);

    endif;
}

2)旧方法(也适用):

add_shortcode( 'product_rating', 'display_the_product_rating' );
function display_the_product_rating( $atts ) {
    // Shortcode attributes
    $atts = shortcode_atts( array(
        'id' => '',
    ), $atts, 'product_rating' );

    if ( isset($atts['id']) && $atts['id'] > 0 ):

    // Get an instance of the WC_Product Object
    $product = wc_get_product( $atts['id'] );

    // The product average rating (or how many stars this product has)
    $average = $product->get_average_rating();

    // HERE the average width
    $average_width = $average * 16 . 'px';

    endif;

    if ( isset($average) ) :

    return '<div class="starwrapper" itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">
        <span class="star-rating" title="'.sprintf(__('Rated %s out of 5', 'woocommerce'), $average).'">
            <span style="width:'.$average_width.'">
                <span itemprop="ratingValue" class="rating">'.$average.'</span>
            </span>
        </span>
    </div><br clear="all">';

    endif;
}

代码进入活动子主题(或活动主题)的function.php文件中。经过测试,可以正常工作。


用法示例:

1)在WordPress页面或帖子文本编辑器(其中 37 是产品ID)

[product_rating id='37']

2)在php代码中:

echo do_shortcode( "[product_rating id='37']" );

3)在html标签之间:

<?php echo do_shortcode( "[product_rating id='37']" ); ?>

您将获得类似enter image description here

的信息