Skip to main content
Fix typo
Source Link
Sharky
  • 146
  • 2

Speaking strictly about the code and not the approach in general.

Use array destructuring to get nicer, more readable variables:

[$whole, $decimal] = explode('.', $rating);

Some syntactic sugar to replace if/else:

$rate_emp = ($decimal ? 4 : 5) - $whole;

Loops can be replaced by str_repeat(). Optionally, you can check if repeat count is less than 1 and avoid the function call if it is. If there's a chance that rating could be above 5.0, this is necessary to avoid errors.

echo str_repeat('<i class="fa-star fas awb-stars-rating-filled-icon"></i>', $whole);

Generating and catching the output seems unnecessary, especially since you're doing it using PHP syntax. Write to string directly:

function show_star_rating_review()
{
    global $post;

    $rating = $rating  = get_field('rating', $post);
    [$whole, $decimal] = explode('.', $rating);

    $rate_emp = ($decimal ? 4 : 5) - $whole;

    $output = '<div class="awb-stars-rating awb-stars-rating-1 awb-stars-rating-no-text" aria-label="Rating: ' . $rating . ' out of 5">'
    . '<style>.awb-stars-rating-1 .awb-stars-rating-filled-icon{margin-right:2px;color:#ffd041;}.awb-stars-rating-1 .awb-stars-rating-empty-icon,.awb-stars-rating-1 .awb-stars-rating-partial-icon-wrapper{margin-right:2px;}.awb-stars-rating-1 .awb-stars-rating-partial-icon{color:#ffd041;}.awb-stars-rating-1 .awb-stars-rating-icons-wrapper{color:#dbdbdb;font-size:23px;}</style>'
    . '<div class="awb-stars-rating-icons-wrapper">'
    . str_repeat('<i class="fa-star fas awb-stars-rating-filled-icon"></i>', $whole);

    if ($decimal) {
      $output .= '<i class="fa-star fas awb-stars-rating-partial-icon-wrapper"><i class="fa-star fas awb-stars-rating-partial-icon" style="width:' . $decimal . '0%;"></i></i>';
    }

    $output .= str_repeat('<i class="fa-star fas awb-stars-rating-empty-icon"></i>', $rate_emp)
    . '</div>'
    . '</div>';

    return $output;
}

Speaking strictly about the code and not the approach in general.

Use array destructuring to get nicer, more readable variables:

[$whole, $decimal] = explode('.', $rating);

Some syntactic sugar to replace if/else:

$rate_emp = ($decimal ? 4 : 5) - $whole;

Loops can be replaced by str_repeat(). Optionally, you can check if repeat count is less than 1 and avoid the function call if it is. If there's a chance that rating could be above 5.0, this is necessary to avoid errors.

echo str_repeat('<i class="fa-star fas awb-stars-rating-filled-icon"></i>', $whole);

Generating and catching the output seems unnecessary, especially since you're doing it using PHP syntax. Write to string directly:

function show_star_rating_review()
{
    global $post;

    $rating = $rating  = get_field('rating', $post);
    [$whole, $decimal] = explode('.', $rating);

    $rate_emp = ($decimal ? 4 : 5) - $whole;

    $output = '<div class="awb-stars-rating awb-stars-rating-1 awb-stars-rating-no-text" aria-label="Rating: ' . $rating . ' out of 5">'
    . '<style>.awb-stars-rating-1 .awb-stars-rating-filled-icon{margin-right:2px;color:#ffd041;}.awb-stars-rating-1 .awb-stars-rating-empty-icon,.awb-stars-rating-1 .awb-stars-rating-partial-icon-wrapper{margin-right:2px;}.awb-stars-rating-1 .awb-stars-rating-partial-icon{color:#ffd041;}.awb-stars-rating-1 .awb-stars-rating-icons-wrapper{color:#dbdbdb;font-size:23px;}</style>'
    . '<div class="awb-stars-rating-icons-wrapper">'
    . str_repeat('<i class="fa-star fas awb-stars-rating-filled-icon"></i>', $whole);

    if ($decimal) {
      $output .= '<i class="fa-star fas awb-stars-rating-partial-icon-wrapper"><i class="fa-star fas awb-stars-rating-partial-icon" style="width:' . $decimal . '0%;"></i></i>';
    }

    $output .= str_repeat('<i class="fa-star fas awb-stars-rating-empty-icon"></i>', $rate_emp)
    . '</div>'
    . '</div>';

    return $output;
}

Speaking strictly about the code and not the approach in general.

Use array destructuring to get nicer, more readable variables:

[$whole, $decimal] = explode('.', $rating);

Some syntactic sugar to replace if/else:

$rate_emp = ($decimal ? 4 : 5) - $whole;

Loops can be replaced by str_repeat(). Optionally, you can check if repeat count is less than 1 and avoid the function call if it is. If there's a chance that rating could be above 5.0, this is necessary to avoid errors.

echo str_repeat('<i class="fa-star fas awb-stars-rating-filled-icon"></i>', $whole);

Generating and catching the output seems unnecessary, especially since you're doing it using PHP syntax. Write to string directly:

function show_star_rating_review()
{
    global $post;

    $rating = get_field('rating', $post);
    [$whole, $decimal] = explode('.', $rating);

    $rate_emp = ($decimal ? 4 : 5) - $whole;

    $output = '<div class="awb-stars-rating awb-stars-rating-1 awb-stars-rating-no-text" aria-label="Rating: ' . $rating . ' out of 5">'
    . '<style>.awb-stars-rating-1 .awb-stars-rating-filled-icon{margin-right:2px;color:#ffd041;}.awb-stars-rating-1 .awb-stars-rating-empty-icon,.awb-stars-rating-1 .awb-stars-rating-partial-icon-wrapper{margin-right:2px;}.awb-stars-rating-1 .awb-stars-rating-partial-icon{color:#ffd041;}.awb-stars-rating-1 .awb-stars-rating-icons-wrapper{color:#dbdbdb;font-size:23px;}</style>'
    . '<div class="awb-stars-rating-icons-wrapper">'
    . str_repeat('<i class="fa-star fas awb-stars-rating-filled-icon"></i>', $whole);

    if ($decimal) {
      $output .= '<i class="fa-star fas awb-stars-rating-partial-icon-wrapper"><i class="fa-star fas awb-stars-rating-partial-icon" style="width:' . $decimal . '0%;"></i></i>';
    }

    $output .= str_repeat('<i class="fa-star fas awb-stars-rating-empty-icon"></i>', $rate_emp)
    . '</div>'
    . '</div>';

    return $output;
}
Source Link
Sharky
  • 146
  • 2

Speaking strictly about the code and not the approach in general.

Use array destructuring to get nicer, more readable variables:

[$whole, $decimal] = explode('.', $rating);

Some syntactic sugar to replace if/else:

$rate_emp = ($decimal ? 4 : 5) - $whole;

Loops can be replaced by str_repeat(). Optionally, you can check if repeat count is less than 1 and avoid the function call if it is. If there's a chance that rating could be above 5.0, this is necessary to avoid errors.

echo str_repeat('<i class="fa-star fas awb-stars-rating-filled-icon"></i>', $whole);

Generating and catching the output seems unnecessary, especially since you're doing it using PHP syntax. Write to string directly:

function show_star_rating_review()
{
    global $post;

    $rating = $rating  = get_field('rating', $post);
    [$whole, $decimal] = explode('.', $rating);

    $rate_emp = ($decimal ? 4 : 5) - $whole;

    $output = '<div class="awb-stars-rating awb-stars-rating-1 awb-stars-rating-no-text" aria-label="Rating: ' . $rating . ' out of 5">'
    . '<style>.awb-stars-rating-1 .awb-stars-rating-filled-icon{margin-right:2px;color:#ffd041;}.awb-stars-rating-1 .awb-stars-rating-empty-icon,.awb-stars-rating-1 .awb-stars-rating-partial-icon-wrapper{margin-right:2px;}.awb-stars-rating-1 .awb-stars-rating-partial-icon{color:#ffd041;}.awb-stars-rating-1 .awb-stars-rating-icons-wrapper{color:#dbdbdb;font-size:23px;}</style>'
    . '<div class="awb-stars-rating-icons-wrapper">'
    . str_repeat('<i class="fa-star fas awb-stars-rating-filled-icon"></i>', $whole);

    if ($decimal) {
      $output .= '<i class="fa-star fas awb-stars-rating-partial-icon-wrapper"><i class="fa-star fas awb-stars-rating-partial-icon" style="width:' . $decimal . '0%;"></i></i>';
    }

    $output .= str_repeat('<i class="fa-star fas awb-stars-rating-empty-icon"></i>', $rate_emp)
    . '</div>'
    . '</div>';

    return $output;
}