Chia sẻ code tăng số sao đánh giá cho kk Star Ratings

kk Star Ratings đã rất quen thuộc với người dùng WordPress, nó giúp thêm đánh giá sao cho bài viết, hiển thị sao đánh giá lên kết quả tìm kiếm google rất đẹp

Chuyện sẽ không có gì nếu đúng là người dùng đánh giá. Nhưng trong một số trường hợp bị đối thủ chơi xấu vào đánh giá toàn 1 sao… kết quả là hiển thị trên google rất xấu, ảnh hưởng rất lớn tới kết quả tìm kiếm

Trong bài này tôi sẽ chia sẻ cho các bạn đoạn code để đặt tự động các đánh giá dưới 4 sao thành 4>5 sao nhé. Mục đích không để 5 luôn mà để 4>5 để nhìn nó thật hơn 😀

Để duy trì blog nên mình có làm aff cho 1 số bên hosting. Nhưng dù aff mình cũng chọn 1 số nhà cung cấp uy tín về chất lượng và support nên các bạn cứ yên tâm nhé.

Nếu có mua hosting mà có trong list dưới đây các bạn click vào link trước khi mua để ủng hộ mình nhé. Mình cảm ơn nhiều

Nội dung chính:

Code tăng đánh giá sao thành 4>5 sao

Thêm code sau vào file functions.php trong wp-content/themes/[theme của bạn]/functions.php

/*
 * Đặt đánh giá sao thành 4>5 sao cho kk star rating
 * Author: levantoan.com
 * */
add_action( 'wp_ajax_update_kk_star_rating', 'devvn_update_kk_star_rating_func' );
function devvn_update_kk_star_rating_func() {

    global $wpdb;

    $posts_with_low_avg = $wpdb->get_results("
        SELECT post_id, meta_value as avg_rating 
        FROM $wpdb->postmeta 
        WHERE meta_key = '_kksr_avg' 
        AND CAST(meta_value AS DECIMAL(3,2)) < 4
    ");

    $posts_with_low_avg_table = array();

    if (!empty($posts_with_low_avg)) {
        foreach ($posts_with_low_avg as $post) {
            $post_id = $post->post_id;

            $count = (int) get_post_meta($post_id, '_kksr_count_default', true);
            $old_avg = (float) get_post_meta($post_id, '_kksr_avg_default', true);

            $random_rating = mt_rand(40, 50) / 10;

            $new_ratings = $count * $random_rating;

            $new_avg = $new_ratings / $count;

            update_post_meta($post_id, '_kksr_ratings_default', $new_ratings);
            update_post_meta($post_id, '_kksr_ratings', $new_ratings);

            update_post_meta($post_id, '_kksr_count_default', $count);
            update_post_meta($post_id, '_kksr_casts', $count);

            update_post_meta($post_id, '_kksr_avg_default', $new_avg);
            update_post_meta($post_id, '_kksr_avg', $new_avg);

            $posts_with_low_avg_table[] = compact('post_id', 'old_avg', 'new_avg');

        }

        $mess = '<span style="color: red;">Đã cập nhật đánh giá.</span>';

    } else {
        $mess = '<span style="color: green;">Không có bài viết nào cần cập nhật.</span>';
    }

    ?>
    <!DOCTYPE html>
    <html lang="vi">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>Đặt điểm đánh giá thủ công cho kk star rating</title>
        <style>
            * {
                margin: 0;
                padding: 0;
                border: 0;
                font-size: 100%;
                font: inherit;
                vertical-align: baseline;
                line-height: 1;
                box-sizing: border-box;
                -moz-box-sizing: border-box;
                -webkit-box-sizing: border-box;
            }
            body {
                font-size: 14px;
            }
            .container{
                padding: 20px;
                max-width: 900px;
                width: 100%;
                margin: 0 auto;
            }
            table {
                width: 100%;
                border: 1px solid #ddd;
                border-collapse: collapse;
                border-spacing: 0;
            }
            table td, table th {
                padding: 5px;
                text-align: center;
                border: 1px solid #ddd;
            }
            h1 {
                font-size: 20px;
                text-align: center;
                margin-bottom: 20px;
            }
        </style>
    </head>
    <body>

    <div class="container">
        <h1><?php echo $mess;?></h1>
        <?php
        if($posts_with_low_avg_table){
            ?>
            <table>
                <thead>
                <tr>
                    <td>ID</td>
                    <td>Tên bài</td>
                    <td>Điểm đánh giá cũ</td>
                    <td>Điểm đánh giá mới</td>
                    <td>Link tới bài viết</td>
                </tr>
                </thead>
                <tbody>
                <?php
                foreach ($posts_with_low_avg_table as $item){
                    extract($item);
                    ?>
                    <tr>
                        <td><?php echo $post_id;?></td>
                        <td><?php echo get_the_title($post_id);?></td>
                        <td><?php echo $old_avg;?></td>
                        <td><?php echo $new_avg;?></td>
                        <td><a href="<?php echo get_the_permalink($post_id);?>" title="Xem bài viết" target="_blank">Xem bài viết</a> </td>
                    </tr>
                    <?php
                }
                ?>
                </tbody>
            </table>
            <?php
        }
        ?>
    </div>
    </body>
    </html>

    <?php

    die();
}

sau đó các bạn mở trình duyệt và truy cập vào đường dẫn sau trong khi đang đăng nhập tài khoản vào web là được. Nghĩa là bạn phải đăng nhập admin mới chạy được đường dẫn này

https://[tên-miền-của-bạn]/wp-admin/admin-ajax.php?action=update_kk_star_rating

Ví dụ như site tôi là levantoan.com thì tôi sẽ vào https://levantoan.com/wp-admin/admin-ajax.php?action=update_kk_star_rating

Kết quả sẽ như hình

Css để chặn đánh giá thấp sao

Ngoài ra đối với những bài viết mới bạn không muốn khách ấn dc đánh giá 1,2,3 sao mà chỉ ấn dc 4 hoặc 5 sao thì hãy thêm css sau vào web nhé. Nếu bạn không chuyên có thể thêm vào menu Giao diện > tuỳ chỉnh > css bổ sung nha

.kk-star-ratings .kksr-stars > div > div:nth-child(1),
.kk-star-ratings .kksr-stars > div > div:nth-child(2),
.kk-star-ratings .kksr-stars > div > div:nth-child(3) {
	pointer-events: none;
}

Code tăng đánh giá sao và đánh giá cho các bài viết chưa có đánh giá

Code này là code nâng cao hơn. Với code bên trên chỉ giúp tăng đánh giá đã có. Còn code bên dưới đây sẽ giúp bạn vừa tăng vừa đánh giá cho các bài viết chưa có đánh giá sao luôn nha

Nếu bạn dùng code này thì bỏ code trên đi. Thay thế bằng code này nhé

/*
 * Đặt đánh giá sao thành 4>5 sao cho kk star rating
 * Code này đã kèm thêm đánh giá các bài viết chưa được đánh giá
 * Author: levantoan.com
 * */
add_action( 'wp_ajax_update_kk_star_rating', 'devvn_update_kk_star_rating_func' );
function devvn_update_kk_star_rating_func() {

    global $wpdb;

    $posts_with_low_avg = $wpdb->get_results("
        SELECT p.ID as post_id, pm.meta_value as avg_rating
        FROM $wpdb->posts p
        LEFT JOIN $wpdb->postmeta pm
        ON p.ID = pm.post_id 
        AND pm.meta_key = '_kksr_avg'
        WHERE (pm.meta_value IS NULL OR CAST(pm.meta_value AS DECIMAL(3,2)) < 4)
        AND p.post_type IN ('post')
        AND p.post_status = 'publish'
    ");

    $posts_with_low_avg_table = array();

    if (!empty($posts_with_low_avg)) {
        foreach ($posts_with_low_avg as $post) {
            $post_id = $post->post_id;

            $count = (int) get_post_meta($post_id, '_kksr_count_default', true);
            $old_avg = (float) get_post_meta($post_id, '_kksr_avg_default', true);

            if(!$count) $count = rand(10,50); //chỗ này là lấy rand tổng số lần đánh giá nếu chưa có đánh giá nào. có thể thay đổi cho nhiều hơn

            $random_rating = mt_rand(40, 50) / 10; //chỗ này là số sao mong muốn. ví dụ muốn từ 4.5 đến 5 sao thì đổi thành mt_rand(45, 50) / 10

            $new_ratings = $count * $random_rating;

            $new_avg = $new_ratings / $count;

            update_post_meta($post_id, '_kksr_ratings_default', $new_ratings);
            update_post_meta($post_id, '_kksr_ratings', $new_ratings);

            update_post_meta($post_id, '_kksr_count_default', $count);
            update_post_meta($post_id, '_kksr_casts', $count);

            update_post_meta($post_id, '_kksr_avg_default', $new_avg);
            update_post_meta($post_id, '_kksr_avg', $new_avg);

            $posts_with_low_avg_table[] = compact('post_id', 'old_avg', 'new_avg');

        }

        $mess = '<span style="color: red;">Đã cập nhật đánh giá.</span>';

    } else {
        $mess = '<span style="color: green;">Không có bài viết nào cần cập nhật.</span>';
    }

    ?>
    <!DOCTYPE html>
    <html lang="vi">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>Đặt điểm đánh giá thủ công cho kk star rating</title>
        <style>
            * {
                margin: 0;
                padding: 0;
                border: 0;
                font-size: 100%;
                font: inherit;
                vertical-align: baseline;
                line-height: 1;
                box-sizing: border-box;
                -moz-box-sizing: border-box;
                -webkit-box-sizing: border-box;
            }
            body {
                font-size: 14px;
            }
            .container{
                padding: 20px;
                max-width: 900px;
                width: 100%;
                margin: 0 auto;
            }
            table {
                width: 100%;
                border: 1px solid #ddd;
                border-collapse: collapse;
                border-spacing: 0;
            }
            table td, table th {
                padding: 5px;
                text-align: center;
                border: 1px solid #ddd;
            }
            h1 {
                font-size: 20px;
                text-align: center;
                margin-bottom: 20px;
            }
        </style>
    </head>
    <body>

    <div class="container">
        <h1><?php echo $mess;?></h1>
        <?php
        if($posts_with_low_avg_table){
            ?>
            <table>
                <thead>
                <tr>
                    <td>ID</td>
                    <td>Tên bài</td>
                    <td>Điểm đánh giá cũ</td>
                    <td>Điểm đánh giá mới</td>
                    <td>Link tới bài viết</td>
                </tr>
                </thead>
                <tbody>
                <?php
                foreach ($posts_with_low_avg_table as $item){
                    extract($item);
                    ?>
                    <tr>
                        <td><?php echo $post_id;?></td>
                        <td><?php echo get_the_title($post_id);?></td>
                        <td><?php echo $old_avg;?></td>
                        <td><?php echo $new_avg;?></td>
                        <td><a href="<?php echo get_the_permalink($post_id);?>" title="Xem bài viết" target="_blank">Xem bài viết</a> </td>
                    </tr>
                    <?php
                }
                ?>
                </tbody>
            </table>
            <?php
        }
        ?>
    </div>
    </body>
    </html>

    <?php

    die();
}

Trong code trên có đoạn AND p.post_type IN (‘post’) cái này là chỉ áp dụng cho các bài viết. Nếu bạn muốn áp dụng cho các post type khác ví dụ thêm ‘page’ nữa thì ĐỔI dòng đó thành AND p.post_type IN (‘post’, ‘page’) nha

Vậy là okie rồi nhé!

Chú ý:

– code trên chạy xong rồi có thể xoá đi
– hoặc để đó luôn thi thoảng lại chạy cũng được
– Nếu có quá nhiều bài viết cần tăng sao thì có thể đơ. Hãy đợi tới lúc nó chạy xong rồi F5 lại cho tới khi thông báo không còn bài nào thì thôi nhé

4.6/5 - (16 votes)
Từ khóa:
  • Bình luận
Sản phẩm nổi bật của Toản
x