Не используйте функцию
extract() (работает по аналогии с
array_merge). Считается плохим стилем и ее использование устарело даже для ядра Wordpress. Это небезопасно, часто создает много конфликтов, а также перезаписывает некоторые данные. Вполне вероятно, что проблема в этом. Лучше так:
$args = shortcode_atts(
array(
'rating' => 5,
'type' => 'rating',
'number' => 0,
),
$atts
);
В wp_star_rating есть последний элемент в массиве 'echo', он по умолчанию
true. Я не тестировал эти функции, но можно попробовать его сделать
false.
И еще - по идее wp_star_rating() это встроенная функция. Может быть вместо того, чтобы переопределять функцию wp_star_rating(), просто использовать встроенную функцию?
Для того, чтобы использовать эту функцию ваш шаблон должен включать файл
wp-admin/includes/template.php. В
документации есть примеры.