ستاره دار کردن مطالب در وردپرس

وردپرس
(Erfan) #1

سلام

من سایتم هنوز به گوگل معرفی نشده تا ایندکس بشه.
چطور میتونم مطالب رو در نتایج گوگل ستاره دار کنم؟
وبسایت ها و افزونه های زیادی آموزش دادن ولی چون این انجمن بیشتر بحث تجربه است پرسیدم.

با تشکر

(حسین) #2

سلام خدمت شما
از افزونه kk star rating برای این منظور میتوانید استفاده کنید

در اکثر قالب ها برای ستاره دار کردن از این افزونه استفاده میکنم
البته از کد های استخراج شده افزونه استفاده میکنم که در پایین قرار میدهم

ابتدا کد زیر را به فانکشن قالب اضافه نمایید ؛

<?php
if (!class_exists('BhittaniPlugin')):
    class BhittaniPlugin
    {
        public $id;
        public $nick;
        public $ver;
        public $wpver;
        public function __construct($id, $nick, $ver)
        {
            $this->id   = $id;
            $this->nick = $nick;
            $this->ver  = $ver;
            global $wp_version;
            $this->wpver = $wp_version;
        }
        /** function/method
         * Usage: return file uri
         * Arg(1): string
         * Return: string
         */
        public static function file_uri($path)
        {
            return plugins_url($path, dirname(__FILE__));
        }
        /** function/method
         * Usage: return absoulte file path
         * Arg(1): string
         * Return: string
         */
        
        public static function file_path($path)
        {
            return dirname(dirname(__FILE__)) . '/' . $path;
        }
        
        protected function enqueue_js($slug, $file, $ver = false, $prerequisite = false, $params = false, $footer = false, $json = false)
        {
            if (is_array($params) && $json) {
?>
               <script type="text/javascript">
                    var <?php
                echo str_replace('-', '_', $this->id) . '_' . $slug;
?> = <?php
                echo json_encode($params);
?>;
                </script>
                <?php
            }
            wp_enqueue_script($this->id . ($slug ? ('_' . $slug) : ''), $file, is_array($prerequisite) ? $prerequisite : array(
                'jquery'
            ), $ver ? $ver : $this->ver, $footer);
            
            if (is_array($params) && !$json)
                wp_localize_script($this->id . ($slug ? ('_' . $slug) : ''), str_replace('-', '_', $this->id) . '_' . $slug, $params);
        }
        /** function/method
         * Usage: helper for hooking css scripts
         * Arg(3): slug (string), file (string), ver (string)[optional, default: '0.1']
         * Return: void
         */
        
    }
endif;

if (!class_exists('BhittaniPlugin_kkStarRatings')):
    class BhittaniPlugin_kkStarRatings extends BhittaniPlugin
    {
        private $_Menus;
        
        public function __construct($id, $nick, $ver)
        {
            parent::__construct($id, $nick, $ver);
            $this->_Menus = array();
        }
        /**
         * File uri
         *
         * @since 1.0 Initially defined
         *
         * @param string $path Path to file.
         *
         * @return string full uri.
         */
        public static function file_uri($path)
        {
            return get_theme_root_uri($path, __FILE__);
        }
        /**
         * File path
         *
         * @since 1.0 Initially defined
         *
         * @param string $path Path to file.
         *
         * @return string full path.
         */
        public static function file_path($path)
        {
            return dirname(__FILE__) . '/' . $path;
        }
        /** function/method
         * Usage: hook js frontend
         * Arg(0): null
         * Return: void
         */
        public function js()
        {
            $template_url        = get_stylesheet_directory_uri();
            $nonce               = wp_create_nonce($this->id);
            $Params              = array();
            $Params['nonce']     = $nonce; //for security
            $Params['grs']       = true;
            $Params['ajaxurl']   = admin_url('admin-ajax.php');
            $Params['func']      = 'kksr_ajax';
            $Params['msg']       = 'امتیاز دهید';
            $Params['fuelspeed'] = 400;
            $Params['thankyou']  = 'متشکريم';
            $Params['error_msg'] = 'خطا';
            $Params['tooltip']   = 1;
            $Params['tooltips']  = array(
                array(
                    'tip' => 'بد',
                    'color' => 'red'
                ),
                array(
                    'tip' => 'بد نبود',
                    'color' => 'brown'
                ),
                array(
                    'tip' => 'خوب',
                    'color' => 'orange'
                ),
                array(
                    'tip' => 'عالی',
                    'color' => 'blue'
                ),
                array(
                    'tip' => 'فوق العاده',
                    'color' => 'green'
                )
            );
            $this->enqueue_js('js', $template_url . '/js/script.js', $this->ver, array(), $Params, false, true);
        }
        /** function/method
         * Usage: hook admin scripts
         * Arg(0): null
         * Return: void
         */
        public function admin_scripts()
        {
            foreach ($this->_Menus as $menu) {
                add_action('admin_print_scripts-' . $menu, array(
                    &$this,
                    'js_admin'
                ));
            }
        }
        public function kksr_admin_reset_ajax()
        {
            header('content-type: application/json; charset=utf-8');
            check_ajax_referer($this->id);
            
            $Reset = $_POST['kksr_reset'];
            if (is_array($Reset)) {
                foreach ($Reset as $id => $val) {
                    if ($val == '1') {
                        delete_post_meta($id, '_kksr_ratings');
                        delete_post_meta($id, '_kksr_casts');
                        delete_post_meta($id, '_kksr_ips');
                        delete_post_meta($id, '_kksr_avg');
                    }
                }
            }
            
            $Response            = array();
            $Response['success'] = 'true';
            echo json_encode($Response);
            die();
        }
        public function kksr_ajax()
        {
            header('Content-type: application/json; charset=utf-8');
            check_ajax_referer($this->id);
            
            $Response = array();
            
            $total_stars = 5;
            
            $stars = is_numeric($_POST['stars']) && ((int) $_POST['stars'] > 0) && ((int) $_POST['stars'] <= $total_stars) ? $_POST['stars'] : 0;
            $ip    = $_SERVER['REMOTE_ADDR'];
            
            $Ids = explode(',', $_POST['id']);
            
            foreach ($Ids as $pid):
                $ratings = get_post_meta($pid, '_kksr_ratings', true) ? get_post_meta($pid, '_kksr_ratings', true) : 0;
                $casts   = get_post_meta($pid, '_kksr_casts', true) ? get_post_meta($pid, '_kksr_casts', true) : 0;
                if ($stars == 0 && $ratings == 0) {
                    $Response[$pid]['legend']  = 'بدون رای!';
                    $Response[$pid]['disable'] = 'false';
                    $Response[$pid]['fuel']    = '0';
                    do_action('kksr_init', $pid, false, false);
                } else {
                    $nratings                  = $ratings + ($stars / ($total_stars / 5));
                    $ncasts                    = $casts + ($stars > 0);
                    $avg                       = $nratings ? number_format((float) ($nratings / $ncasts), 2, '.', '') : 0;
                    $per                       = $nratings ? number_format((float) ((($nratings / $ncasts) / 5) * 100), 2, '.', '') : 0;
                    $Response[$pid]['disable'] = 'false';
                    if ($stars) {
					$Ips = get_post_meta($pid, '_kksr_ips', true) ? unserialize(base64_decode(get_post_meta($pid, '_kksr_ips', true))) : array();
                        if (!in_array($ip, $Ips)) {
                            $Ips[] = $ip;
                        }
                        $ips = base64_encode(serialize($Ips));
                        update_post_meta($pid, '_kksr_ratings', $nratings);
                        update_post_meta($pid, '_kksr_casts', $ncasts);
                        update_post_meta($pid, '_kksr_ips', $ips);
                        update_post_meta($pid, '_kksr_avg', $avg);
                        $Response[$pid]['disable'] = false;
                        do_action('kksr_rate', $pid, $stars, $ip);
                    } else {
                        do_action('kksr_init', $pid, number_format((float) ($avg * ($total_stars / 5)), 2, '.', '') . '/' . $total_stars, $ncasts);
                    }
                    // $legend = parent::get_options('kksr_legend');
                    // $legend = str_replace('[total]', $ncasts, $legend);
                    // $legend = str_replace('[avg]', number_format((float)($avg*($total_stars/5)), 2, '.', '').'/'.$total_stars, $legend);
                    // $legend = str_replace('[s]', $ncasts==1?'':'s', $legend);
                    // $Response[$pid]['legend'] = str_replace('[per]',$per.'%', $legend);
                    $Response[$pid]['legend'] = apply_filters('kksr_legend', '[avg] از [total] رای', $pid);
                    $Response[$pid]['fuel']   = $per;
                }
                $Response[$pid]['success'] = true;
            endforeach;
            
            echo json_encode($Response);
            die();
        }
        protected function trim_csv_cb($value)
        {
            if (trim($value) != "")
                return true;
            return false;
        }
        
        public function markup($id = false)
        {
            $id = !$id ? get_the_ID() : $id;
            
            
            $disabled = false;
            if (get_post_meta($id, '_kksr_ips', true)) {
                $Ips = unserialize(base64_decode(get_post_meta($id, '_kksr_ips', true)));
                $ip  = $_SERVER['REMOTE_ADDR'];
                if (in_array($ip, $Ips)) {
                    $disabled = false;
                }
            }
            $pos = array(
                array(
                    'top',
                    'بالا'
                ),
                array(
                    'bottom',
                    'پایین'
                )
            );
            
            $markup      = '


            <div class="kk-star-ratings ' . ($disabled) . $pos . ($pos == 'top' || $pos == 'bottom' ? ' rgt' : ' lft') . '" data-id="' . $id . '">
		<div class="text"><i class="fa fa-lg fa-star"></i>امتیاز : </div>
			  <div class="kksr-stars kksr-star gray">
                    <div class="kksr-fuel kksr-star ' . ($disabled ? 'orange' : 'yellow') . '" style="width:0%;"></div>
                    <!-- kksr-fuel -->';
            $total_stars = 5;
            for ($ts = 1; $ts <= $total_stars; $ts++) {
                $markup .= '<a href="#' . $ts . '"></a>';
            }
            $markup .= '
                </div>
                <!-- kksr-stars -->
                <div class="kksr-legend">';
            
            $markup .= apply_filters('kksr_legend', '[avg] از [total] رای', $id);
            
            $markup .= '</div>
                <!-- kksr-legend -->
            </div>
            <!-- kk-star-ratings -->

            ';
            return $markup;
        }
        public function manual($atts)
        {
            extract(shortcode_atts(array(
                'id' => false
            ), $atts));
            if (!is_admin()) {
                if (is_front_page() || is_home() || is_archive())
                    return $this->markup($id);
                else if (is_single() || is_page())
                    return $this->markup($id);
            } else {
                remove_shortcode('kkratings');
                remove_shortcode('kkstarratings');
            }
            return '';
        }
        public function kk_star_rating($pid = false)
        {
            return $this->markup($pid);
            return '';
        }
        public function kk_star_ratings_get($total = 5, $cat = false)
        {
            global $wpdb;
            $table = $wpdb->prefix . 'postmeta';
            if (!$cat)
                $rated_posts = $wpdb->get_results("SELECT a.ID, a.post_title, b.meta_value AS 'ratings' FROM " . $wpdb->posts . " a, $table b, $table c WHERE a.post_status='publish' AND a.ID=b.post_id AND a.ID=c.post_id AND b.meta_key='_kksr_avg' AND c.meta_key='_kksr_casts' ORDER BY b.meta_value DESC, c.meta_value DESC LIMIT $total");
            else {
                $table2      = $wpdb->prefix . 'term_taxonomy';
                $table3      = $wpdb->prefix . 'term_relationships';
                $rated_posts = $wpdb->get_results("SELECT a.ID, a.post_title, b.meta_value AS 'ratings' FROM " . $wpdb->posts . " a, $table b, $table2 c, $table3 d, $table e WHERE c.term_taxonomy_id=d.term_taxonomy_id AND c.term_id=$cat AND d.object_id=a.ID AND a.post_status='publish' AND a.ID=b.post_id AND a.ID=e.post_id AND b.meta_key='_kksr_avg' AND e.meta_key='_kksr_casts' ORDER BY b.meta_value DESC, e.meta_value DESC LIMIT $total");
            }
            
            return $rated_posts;
        }
        public function grs_legend($legend, $id)
        {
            
            $title = get_the_title($id);
            
            $best  = 5;
            $score = get_post_meta($id, '_kksr_ratings', true) ? get_post_meta($id, '_kksr_ratings', true) : 0;
            
            if ($score) {
                $votes = get_post_meta($id, '_kksr_casts', true) ? get_post_meta($id, '_kksr_casts', true) : 0;
                $avg   = $score ? round((float) (($score / $votes) * ($best / 5)), 2) : 0;
                $per   = $score ? round((float) ((($score / $votes) / 5) * 100), 2) : 0;
                
                $leg = str_replace('[total]', '<span property="ratingCount">' . $votes . '</span>', $legend);
                $leg = str_replace('[avg]', '<span property="ratingValue">' . $avg . '</span>', $leg);
                $leg = str_replace('[per]', $per . '%', $leg);
                $leg = str_replace('[s]', $votes == 1 ? '' : 's', $leg);
                
                $snippet = '<div vocab="http://schema.org/" typeof="Blog">';
                $snippet .= '    <div property="name" class="kksr-title">' . $title . '</div>';
                $snippet .= '    <div property="aggregateRating" typeof="AggregateRating">';
                $snippet .= $leg;
                $snippet .= '            <meta property="bestRating" content="' . $best . '"/>';
                $snippet .= '            <meta property="worstRating" content="1"/>';
                $snippet .= '    </div>';
                $snippet .= '</div>';
            } else {
                $snippet = 'بدون رای!';
            }
            
            return $snippet;
            
            return $legend;
        }
    }
    
    $kkStarRatings_obj = new BhittaniPlugin_kkStarRatings('bhittani_plugin_kksr', 'رای گیری ستاره', '2.5.1');
    
    // Setup
    register_activation_hook(__FILE__, array(
        $kkStarRatings_obj,
        'activate'
    ));
    
    // Scripts
    add_action('wp_enqueue_scripts', array(
        $kkStarRatings_obj,
        'js'
    ));
    
    // AJAX
    add_action('wp_ajax_kksr_admin_reset_ajax', array(
        $kkStarRatings_obj,
        'kksr_admin_reset_ajax'
    ));
    add_action('wp_ajax_kksr_ajax', array(
        $kkStarRatings_obj,
        'kksr_ajax'
    ));
    add_action('wp_ajax_nopriv_kksr_ajax', array(
        $kkStarRatings_obj,
        'kksr_ajax'
    ));
    
    
    // Google Rich Snippets
    add_filter('kksr_legend', array(
        $kkStarRatings_obj,
        'grs_legend'
    ), 1, 2);
    // For use in themes
    if (!function_exists('kk_star_ratings')) {
        function kk_star_ratings($pid = false)
        {
            global $kkStarRatings_obj;
            return $kkStarRatings_obj->kk_star_rating($pid);
        }
    }
    if (!function_exists('kk_star_ratings_get')) {
        function kk_star_ratings_get($lim = 5, $cat = false)
        {
            global $kkStarRatings_obj;
            return $kkStarRatings_obj->kk_star_ratings_get($lim, $cat);
        }
    }
//require_once 'widget.php';
endif;

?>

سپس کد جیکوئری زیر را کپی کرده و در یک فایل جاوااسکریپت قرار دهید و آنزا در فوتر قالب فراخوانی کنید ؛

function sidr(t){return"status"===t?sidrStatus:methods[t]?methods[t].apply(this,Array.prototype.slice.call(arguments,1)):"function"!=typeof t&&"string"!=typeof t&&t?void $.error("Method "+t+" does not exist on jQuery.sidr"):methods.toggle.apply(this,arguments)}function fnSidr(t){helper.transitions,$$3.extend({name:"sidr",speed:200,side:"left",source:null,renaming:!0,body:"body",displace:!0,timing:"ease",method:"toggle",bind:"touchstart click",onOpen:function(){},onClose:function(){},onOpenEnd:function(){},onCloseEnd:function(){}},t)}!function(t,i,e,s){t.fn.kkstarratings=function(i){t.fn.kkstarratings.options=t.extend({ajaxurl:null,nonce:null,func:null,grs:!1,msg:"امتیاز دهید",fuelspeed:400,thankyou:"متشکریم",error_msg:"خطا",tooltip:!0,tooltips:{0:{tip:"افتضاح",color:"red"},1:{tip:"بد",color:"brown"},2:{tip:"متوسط",color:"orange"},3:{tip:"خوب",color:"blue"},4:{tip:"عالي",color:"green"}}},t.fn.kkstarratings.options,i||{});var e=[];return this.each(function(){e.push(t(this))}),t.fn.kkstarratings.fetch(e,0,"0%",t.fn.kkstarratings.options.msg,!0),this.each(function(){})},t.fn.kkstarratings.animate=function(i){if(i.hasClass("disabled"))t(".kksr-stars a",i).unbind("click").click(function(){return!1});else{var e=t(".kksr-legend",i).html(),s=t(".kksr-fuel",i).css("width");t(".kksr-stars a",i).hover(function(){var s=t(this).attr("href").split("#")[1];0!=t.fn.kkstarratings.options.tooltip&&(null!=t.fn.kkstarratings.options.tooltips[s-1]?t(".kksr-legend",i).html('<span style="color:'+t.fn.kkstarratings.options.tooltips[s-1].color+'">'+t.fn.kkstarratings.options.tooltips[s-1].tip+"</span>"):t(".kksr-legend",i).html(e)),t(".kksr-fuel",i).stop(!0,!0).css("width","0%"),t(".kksr-stars a",i).each(function(e,n){var r=t(this),o=r.attr("href").split("#")[1];parseInt(o)<=parseInt(s)&&(t(".kksr-stars a",i).stop(!0,!0),r.hide().addClass("kksr-star").addClass("orange").fadeIn("fast"))})},function(){t(".kksr-stars a",i).removeClass("kksr-star").removeClass("orange"),0!=t.fn.kkstarratings.options.tooltip&&t(".kksr-legend",i).html(e),t(".kksr-fuel",i).stop(!0,!0).animate({width:s},t.fn.kkstarratings.options.fuelspeed)}).unbind("click").click(function(){return t.fn.kkstarratings.click(i,t(this).attr("href").split("#")[1])})}},t.fn.kkstarratings.update=function(i,e,s,n,r){"true"==n&&t(".kksr-fuel",i).removeClass("yellow").addClass("orange"),t(".kksr-fuel",i).stop(!0,!0).animate({width:e},t.fn.kkstarratings.options.fuelspeed,"linear",function(){"true"==n&&(i.addClass("disabled"),t(".kksr-stars a",i).unbind("hover")),t.fn.kkstarratings.options.grs&&r?t.fn.kkstarratings.animate(i):t(".kksr-legend",i).stop(!0,!0).hide().html(s||t.fn.kkstarratings.options.msg).fadeIn("slow",function(){t.fn.kkstarratings.animate(i)})})},t.fn.kkstarratings.click=function(i,e){t(".kksr-stars a",i).unbind("hover").unbind("click").removeClass("kksr-star").removeClass("orange").click(function(){return!1});var s=t(".kksr-legend",i).html(),n=t(".kksr-fuel",i).css("width");return t.fn.kkstarratings.fetch(i,e,n,s,!1),!1},t.fn.kkstarratings.fetch=function(i,e,s,n,r){var o=[];t.each(i,function(){o.push(t(this).attr("data-id"))}),t.ajax({url:t.fn.kkstarratings.options.ajaxurl,data:"action="+t.fn.kkstarratings.options.func+"&id="+o+"&stars="+e+"&_wpnonce="+t.fn.kkstarratings.options.nonce,type:"post",dataType:"json",beforeSend:function(){t(".kksr-fuel",i).animate({width:"0%"},t.fn.kkstarratings.options.fuelspeed),e&&t(".kksr-legend",i).fadeOut("fast",function(){t(".kksr-legend",i).html('<span style="color: green">'+t.fn.kkstarratings.options.thankyou+"</span>")}).fadeIn("slow")},success:function(e){t.each(i,function(){var i=t(this),o=i.attr("data-id");e[o].success?t.fn.kkstarratings.update(i,e[o].fuel+"%",e[o].legend,e[o].disable,r):t.fn.kkstarratings.update(i,s,n,!1,r)})},complete:function(){},error:function(e){t(".kksr-legend",i).fadeOut("fast",function(){t(".kksr-legend",i).html('<span style="color: red">'+t.fn.kkstarratings.options.error_msg+"</span>")}).fadeIn("slow",function(){t.fn.kkstarratings.update(i,s,n,!1,r)})}})},t.fn.kkstarratings.options={ajaxurl:bhittani_plugin_kksr_js.ajaxurl,func:bhittani_plugin_kksr_js.func,nonce:bhittani_plugin_kksr_js.nonce,grs:bhittani_plugin_kksr_js.grs,tooltip:bhittani_plugin_kksr_js.tooltip,tooltips:bhittani_plugin_kksr_js.tooltips,msg:bhittani_plugin_kksr_js.msg,fuelspeed:bhittani_plugin_kksr_js.fuelspeed,thankyou:bhittani_plugin_kksr_js.thankyou,error_msg:bhittani_plugin_kksr_js.error_msg}}(jQuery,window,document),jQuery(document).ready(function(t){t(".kk-star-ratings").kkstarratings()});

و کد های css زیر را در فایل استایل قالبتون کپی کنید ؛

.kk-star-ratings{float:left;height:auto;width:100%;overflow:hidden;position:relative;padding:10px 0 10px 0;border-bottom:1px solid #f2f2f2;}
.kk-star-ratings .text{float:right;color: #908e8e;font-size: 12px;font-weight:700}
.kk-star-ratings .text i {margin-left: 6px;}
.kksr-stars{height:25px;position:relative}
.kksr-star{background-position:0 0;width:125px;float:left}
.kksr-star.gray{background-image:url(img/gray.png)}
.kksr-star.yellow{background-image:url(img/yellow.png)}
.kksr-star.orange{background-image:url(img/orange.png); opacity:1!important;}
.kksr-stars .kksr-fuel{height:25px;position:absolute;top:0;left:0;z-index:0}
.kksr-stars a{width:25px;height:25px;float:left;position:relative;z-index:1;text-decoration:none;border:0}
.kksr-stars a:focus{text-decoration:none;border:0;outline:0}
.kksr-legend{opacity:1!important;color: #999;line-height: 35px;position: absolute;left: 0;top: 4px;font-size: 9px;right: 22px;width: 125px;text-align: center;}
.kksr-legend .kksr-title{display:none}
.kksr-stars,.kk-star-ratings .kksr-stars .kksr-fuel,.kk-star-ratings .kksr-stars a{background-color:transparent !important}

کدنویسی افزونه امتیاز دهی تموم شد
فقط برای امتیاز های این افزونه از تصاویری استفاده شده که باید حتما وجود داشته باشند
تصویر مورد نیاز را فشرده کردم و در پایین قرار میئم
شما در پوشه قالبتون پوشه ای با نام img بسازید و تصاویر را قرار دهید

img.zip

در پایان با قطعه کد زیر میتوانید هر کجای قالب که نیاز بود سیستم امتیاز دهی را فراخوانی نمایید ؛

<?php if(function_exists("kk_star_ratings")) : echo kk_star_ratings($pid); endif; ?>

7 Likes
(Erfan) #3

ممنون
با این جواب عالی متوجه شدم.

موفق باشید

3 Likes