WordPress как на ладони
Официальная конференция по WordPress в Moскве 18-19 августа, начало в 9:00 wordpress jino

wp_star_rating() WP 3.8.0

Выводит HTML рейтинга (звездочки) для указанного рейтинга.

Выводит HTML разметку со звездами от 0 до ... Понимает половины вроде 4.5 звезды...

stars

По умолчанию работает только в админ панели.

✈ 1 раз = 0.000057с = очень быстро | 50000 раз = 1.30с = быстро PHP 7.0.2, WP 4.4.2

Хуков нет.

Возвращает

Строку. HTML код.

Использование

wp_star_rating( $args );
$args(массив)

Массив аргументов для вывода звезд.

  • rating (int)
    Рейтинг который нужно вывести.

    Если в type = rating, то число будет считаться рейтингом и будет выведено количество звезд указанных в этом параметре.

    Если в type = percent, то число будет считаться процентом и будет показано 5 звезд заполненных в соответствии с указанным числом.
    По умолчанию: 0

  • type (string)
    Формат в котором указан параметр $rating. Может быть: rating или percent.
    По умолчанию: 'rating'

  • number (int)
    Число на основе скольки голосов показан результат, добавить в title атрибут тега. Отставьте 0 чтобы не показывать.
    По умолчанию: 0

  • echo (bool)
    Выводить или возвращать результат?
    По умолчанию: true

Примеры

#1 Вывод рейтинга (звезд)

Примеры

wp_star_rating( ['rating'=>7.5, 'type'=>'rating', 'number'=>0 ] );

/* Выведет:
<div class="star-rating" title="Рейтинг 7,5"><span class="screen-reader-text">Рейтинг 7,5</span>
	<div class="star star-full"></div>
	<div class="star star-full"></div>
	<div class="star star-full"></div>
	<div class="star star-full"></div>
	<div class="star star-full"></div>
	<div class="star star-full"></div>
	<div class="star star-full"></div>
	<div class="star star-half"></div>
</div>
*/
stars.2
wp_star_rating( ['rating'=>85, 'type'=>'percent', 'number'=>654 ] );

/* Выведет:
<div class="star-rating" title="Рейтинг 4,5 на основе 654 голосов"><span class="screen-reader-text">Рейтинг 4,5 на основе 654 голосов</span>
	<div class="star star-full"></div>
	<div class="star star-full"></div>
	<div class="star star-full"></div>
	<div class="star star-full"></div>
	<div class="star star-half"></div>
</div>
*/

Выглядит так:

stars

#2 Вывод во внешней части

Во фронт-энде функция не работает и там лучше сделать свою подобную функцию. Но если у вас подключаются шрифты 'dashicons', то есть смысл использовать эту функцию, для этого нужно подключить нужный файл и css стили:

// для фронта
require_once ABSPATH .'wp-admin/includes/template.php';

// подключим иконки
add_action('wp_enqueue_scripts', function(){    wp_enqueue_style('dashicons');    });

// Выводим HTML
wp_star_rating( array( 'rating'=>4.5, 'type'=>'rating', 'number'=>521, ) );

echo '
<style>
.screen-reader-text{ position: absolute; margin: -1px; padding: 0; height: 1px; width: 1px; overflow: hidden; clip: rect(0 0 0 0); border: 0; word-wrap: normal!important; }
.star-rating .star-full:before { content: "\f155"; }
.star-rating .star-half:before { content: "\f459"; }
.star-rating .star-empty:before { content: "\f154"; }
.star-rating .star {
	color: #0074A2;
	display: inline-block;
	font-family: dashicons;
	font-size: 20px;
	font-style: normal;
	font-weight: 400;
	height: 20px;
	line-height: 1;
	text-align: center;
	text-decoration: inherit;
	vertical-align: top;
	width: 20px;
}
</style>';

/* Получим:

<div class="star-rating" data-title="4,5 rating based on 521 ratings">
	<span class="screen-reader-text">4,5 rating based on 521 ratings</span>
	<div class="star star-full"></div>
	<div class="star star-full"></div>
	<div class="star star-full"></div>
	<div class="star star-full"></div>
	<div class="star star-half"></div>
</div>

*/

Код wp_star_rating: wp-admin/includes/template.php VER 4.9.8

<?php
function wp_star_rating( $args = array() ) {
	$defaults = array(
		'rating' => 0,
		'type'   => 'rating',
		'number' => 0,
		'echo'   => true,
	);
	$r = wp_parse_args( $args, $defaults );

	// Non-English decimal places when the $rating is coming from a string
	$rating = (float) str_replace( ',', '.', $r['rating'] );

	// Convert Percentage to star rating, 0..5 in .5 increments
	if ( 'percent' === $r['type'] ) {
		$rating = round( $rating / 10, 0 ) / 2;
	}

	// Calculate the number of each type of star needed
	$full_stars = floor( $rating );
	$half_stars = ceil( $rating - $full_stars );
	$empty_stars = 5 - $full_stars - $half_stars;

	if ( $r['number'] ) {
		/* translators: 1: The rating, 2: The number of ratings */
		$format = _n( '%1$s rating based on %2$s rating', '%1$s rating based on %2$s ratings', $r['number'] );
		$title = sprintf( $format, number_format_i18n( $rating, 1 ), number_format_i18n( $r['number'] ) );
	} else {
		/* translators: 1: The rating */
		$title = sprintf( __( '%s rating' ), number_format_i18n( $rating, 1 ) );
	}

	$output = '<div class="star-rating">';
	$output .= '<span class="screen-reader-text">' . $title . '</span>';
	$output .= str_repeat( '<div class="star star-full" aria-hidden="true"></div>', $full_stars );
	$output .= str_repeat( '<div class="star star-half" aria-hidden="true"></div>', $half_stars );
	$output .= str_repeat( '<div class="star star-empty" aria-hidden="true"></div>', $empty_stars );
	$output .= '</div>';

	if ( $r['echo'] ) {
		echo $output;
	}

	return $output;
}

Cвязанные функции

Из раздела: Без рубрики

10 комментов
  • Антон

    мне кажется эта функция не расчитана только на пятибальную систему оценки,
    $empty_stars = 5 - $full_stars - $half_stars; - эта строчка в коде как бы намекает на это

    Ответить1.7 год назад #
    • Kama6673

      "Рассчитана" вы хотели сказать? Так и есть!

      2
      Ответить1.7 год назад #
      • Антон

        Да, я опечатался, именно это я и имел в виду, хотя можно было бы дополнительным параметром передавать в эту функцию максимальный балл, что сделало бы ее более универсальной и удобной, по тому что не везде подходит пятибальная система оценки, например в моем случае нужно дать пользователю возможность более точной оценки записей

        3
        Ответить1.7 год назад #
  • @ Dmitrii

    Подскажите как найти звезды чтобы дать им свой цвет?

    Ответить1.4 год назад #
    • @ campusboy2946 cайт: www.youtube.com/c/wpplus

      Там же в коде в style есть атрибут color: #0074A2. Его и меняй.

      3
      Ответить1.3 год назад #
  • Alex

    Скажите где найти порядок вывода звезд? У меня выводятся вертикально, а хочу нормально горизонтально. В настройках нигде нет ничего подобного. в Стилях можете подсказать где именно искать. Спасибо

    1
    • @ campusboy2946 cайт: www.youtube.com/c/wpplus

      Это достигается средствами CSS, а не настройками функции и в примерах подобные стили написаны.

      2
  • пожалуйста подскажите, очень нужно, использую http протокол обычный без https - если вводить логин и пароль в стандартном WordPress окне ввода логине и пароль для входа в админку, то WordPress отправляет эти данные в зашифрованном виде или как ввел так и передал на сервер ? и кто то может по этому же логину и паролю зайти в мою админку на сервер ? или в зашифрованном виде типа md5 на подобии, и ни кто другой не войдет по этим же переданным логину и паролю ??

    • Что ввели в форму — то и передалось.

      и кто то может по этому же логину и паролю зайти в мою админку на сервер ?

      Тот, кто знает логин и пароль, войдет в админку и по HTTPS. mosking

      А вообще, WordPress генерирует качественные сложные пароли — пользуйтесь! Ну а если так сильно беспокоитесь о потенциальном взломе, то приобретайте сертификат.

      2
      • Спасибо большое за ответ, пожалуйста можно по точнее - если ввожу в поля окна WordPress логин и пароль - текст -> то этот же текст летит в сеть - или WordPress принимает этот текст в полях ввода логин и пароль - шифрует их и только потом передает в сеть на хостинг ? - или как ввел текст логин и пароль - так и передал этот же текст строки - логин и пароль как есть ??? типа negative смотрите все какой у меня логин и пароль от админки)) красавчик вообще. blush - https подключать дорого будит со второго года, пусть да же первый год бесплатно, все равно дорого и это не вариант. Пожалуйста ответе мне по больше ответов, интересно что и как происходит, за ранее большое спасибо.

Здравствуйте, !     Войти . Зарегистрироваться