n, 4=>n, ...] * @type array $criteria میانگین هر معیار [key => avg] * @type int $max حداکثر ستاره * } */ function omoreviews_get_stats( $post_id = null ) { $post_id = $post_id ? (int) $post_id : get_the_ID(); if ( ! $post_id ) { return array( 'count' => 0, 'average' => 0, 'dist' => array(), 'criteria' => array(), 'max' => 5 ); } $agg = OmoRev_Data::aggregates( $post_id ); $agg['max'] = (int) OmoRev_Settings::get( 'max_stars', 5 ); return $agg; } /** * تعداد نظرات یک پست. * * @param int|null $post_id * @return int */ function omoreviews_get_count( $post_id = null ) { $stats = omoreviews_get_stats( $post_id ); return (int) $stats['count']; } /** * میانگین امتیاز یک پست (عدد اعشاری، مثلاً 4.5). * * @param int|null $post_id * @return float */ function omoreviews_get_average( $post_id = null ) { $stats = omoreviews_get_stats( $post_id ); return (float) $stats['average']; } /** * میانگین یک معیار خاص (مثلاً 'price' یا 'quality'). * * @param string $criterion_key کلید معیار * @param int|null $post_id * @return float */ function omoreviews_get_criteria_average( $criterion_key, $post_id = null ) { $stats = omoreviews_get_stats( $post_id ); return isset( $stats['criteria'][ $criterion_key ] ) ? (float) $stats['criteria'][ $criterion_key ] : 0.0; } /** * HTML ستاره‌های یک امتیاز را برمی‌گرداند (برای نمایش سریع). * * @param float $value امتیاز * @param int|null $max حداکثر ستاره (پیش‌فرض از تنظیمات) * @return string */ function omoreviews_get_stars_html( $value, $max = null ) { $max = $max ? (int) $max : (int) OmoRev_Settings::get( 'max_stars', 5 ); return OmoRev_Public::stars_html( (float) $value, $max ); } /** * بلوک کامل نظرات یک پست را برمی‌گرداند (همان چیزی که شورت‌کد می‌سازد). * * @param int|null $post_id * @return string */ function omoreviews_get_reviews_html( $post_id = null ) { $post_id = $post_id ? (int) $post_id : get_the_ID(); if ( ! $post_id ) { return ''; } return OmoRev_Public::render( $post_id ); } /** * بلوک کامل نظرات را مستقیم چاپ می‌کند. * * @param int|null $post_id */ function omoreviews_the_reviews( $post_id = null ) { echo wp_kses( omoreviews_get_reviews_html( $post_id ), OmoRev_Public::allowed_block_html() ); } /** * یک خلاصه فشرده (میانگین + تعداد + ستاره) را به‌صورت HTML برمی‌گرداند. * برای نمایش در کارت‌های لیست، آرشیو، ویجت و... مناسب است. * * @param int|null $post_id * @param array $args { * @type bool $show_count نمایش تعداد نظرات (پیش‌فرض true) * @type bool $show_stars نمایش ستاره‌ها (پیش‌فرض true) * @type bool $show_average نمایش عدد میانگین (پیش‌فرض true) * } * @return string */ function omoreviews_get_rating_badge( $post_id = null, $args = array() ) { $post_id = $post_id ? (int) $post_id : get_the_ID(); if ( ! $post_id ) { return ''; } // اطمینان از بارگذاری استایل حتی وقتی badge خارج از بلوک اصلی استفاده می‌شود if ( wp_style_is( 'omorev', 'registered' ) && ! wp_style_is( 'omorev', 'enqueued' ) ) { wp_enqueue_style( 'omorev' ); } $args = wp_parse_args( $args, array( 'show_count' => true, 'show_stars' => true, 'show_average' => true, ) ); $stats = omoreviews_get_stats( $post_id ); if ( $stats['count'] < 1 ) { return '' . esc_html( OmoRev_Settings::text( 'empty' ) ) . ''; } $out = ''; if ( $args['show_average'] ) { $out .= '' . esc_html( number_format_i18n( $stats['average'], 1 ) ) . ''; } if ( $args['show_stars'] ) { $out .= OmoRev_Public::stars_html( $stats['average'], $stats['max'] ); } if ( $args['show_count'] ) { $out .= '(' . esc_html( number_format_i18n( $stats['count'] ) ) . ' ' . esc_html( OmoRev_Settings::text( 'count_suffix' ) ) . ')'; } $out .= ''; return $out; } /** * خلاصه امتیاز را مستقیم چاپ می‌کند. * * @param int|null $post_id * @param array $args */ function omoreviews_the_rating_badge( $post_id = null, $args = array() ) { echo wp_kses( omoreviews_get_rating_badge( $post_id, $args ), OmoRev_Public::allowed_block_html() ); }