Star Rating Shortcode – jednoduchý WordPress plugin

Pro gsklub.cz jsem nedávno napsal jednoduchý WordPress plugin, který umožňuje po zadání shortcodu zobrazit hodnocení ve formě hvězdiček.

Shortcode je ve tvaru:

[wp_star_rating stars_no="5" rating="3.5" star_width="30"]

Parametry shortcodu jsou:

stars_no: počet hvězdiček
rating: hodnocení
star_width: velikost hvězdičky

Hodnocení se pak zobrazí takto:

 

Plugin si můžete zdarma stáhnout, nebo se níže podívat na kód, který takovou funkcionalitu zařídí.

<?php
/*
Plugin Name: Star Rating
Description: Simple star rating shortcode
Author: Václav Greif
Author URI: https://wp-programator.cz/
Version: 1.0
*/

namespace WPProgramator\StarRatingShortcode;

final class Init {
  /**
   * Private ctor so nobody else can instance it
   */
  private function __construct() {
    $this->require_classes();
    $this->add_actions();
  }

  /**
   * Require classes
   */
  public function require_classes() {
  }

  /**
   * Add actions
   */
  public function add_actions() {
    add_shortcode( 'wp_star_rating', array( $this, 'render_star_rating' ) );
    add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_frontend_scripts' ) );
    add_action( 'wp_footer', array( $this, 'initialize_rating' ) );
  }

  /**
   * Call this method to get singleton
   * @return Init
   */
  public static function instance() {
    static $inst = null;
    if ( null === $inst ) {
      $inst = new Init();
    }

    return $inst;
  }

  /**
   * Render the shortcode
   *
   * @param $atts
   *
   * @return false|string
   */
  public function render_star_rating( $atts ) {
    $a = shortcode_atts(
      array(
        'stars_no'   => 5,
        'rating'     => 0,
        'star_width' => 20,
      ),
      $atts
    );

    ob_start(); ?>
        <div data-rateyo-num-stars="<?php echo $a['stars_no']; ?>" data-rateyo-rating="<?php echo floatval( $a['rating'] ); ?>" data-rateyo-read-only="true" data-rateyo-star-width="<?php echo $a['star_width'] ?>px" class="stars"></div>
    <?php
    return ob_get_clean();
  }

  /**
   * Enqueue frontend scripts
   */
  public function enqueue_frontend_scripts() {
    wp_enqueue_style( 'rate-yo', 'https://cdnjs.cloudflare.com/ajax/libs/rateYo/2.3.2/jquery.rateyo.min.css', [], 1 );
    wp_enqueue_script( 'rate-yo', 'https://cdnjs.cloudflare.com/ajax/libs/rateYo/2.3.2/jquery.rateyo.min.js', array( 'jquery' ), 1, true);

  }

  /**
   * Initialize Star rating
   */
  function initialize_rating() { ?>
        <script type="text/javascript">
            jQuery(document).ready(function ($) {
                $(".stars").rateYo();
            });
        </script>
  <?php }

}

Init::instance();

 

Do nového roku přeji všem hodně štěstí a spoustu zábavy!

Přidat komentář