Добавьте звездный рейтинг по идентификатору продукта на некоторых страницах в Woocommerce - PullRequest
0 голосов
/ 01 сентября 2018

Есть ли способ вызвать звездный рейтинг определенного продукта на пользовательской странице, в пользовательских местах? Другими словами, могу ли я добавить оценку звезды конкретной футболки, например, под изображением футболки на моей домашней странице?

Я полагаю, мне нужно добавить какой-то php в мой редактор, а затем вызвать его с помощью какого-то html. Я видел эту ветку с ответом , в которой один из ответов, похоже, помог людям, однако он дает вам только необходимый php, так что я не знаю, как на самом деле поставить это на определенном месте на конкретной странице. Я также не уверен, что этот ответ касается возможности добавления звездочек на пользовательских страницах, а не только на страницах woocommerce.

Еще один из ответов в этой теме содержит html. Я попробовал это, и я смог загрузить звезды, за исключением того, что они не соответствуют фактическому рейтингу звезд на странице продукта.

Я прошу прощения за тот факт, что подобные вопросы уже существуют, однако, они, кажется, не решают мои проблемы напрямую, и я слишком некомпетентен, чтобы заставить их работать: /.

1 Ответ

0 голосов
/ 01 сентября 2018

Для конкретного идентификатора продукта вы можете использовать несколько выделенных 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;

Проверено и работает.

Интересный ответ: Рейтинг показывает цифры вместо звезд


Короткий код для повсеместного отображения рейтинга продукта - 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 - идентификатор продукта) :

[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

...