纯代码给WordPress添加文章点赞功能

实现原理

通过自定义字段保存数量,通过cookies来禁止重复。

代码部署

将下面代码添加进function.php

add_action('wp_ajax_nopriv_bigfa_like', 'bigfa_like'); 
add_action('wp_ajax_bigfa_like', 'bigfa_like'); 
function bigfa_like(){ 
    global $wpdb,$post; 
    $id = $_POST["um_id"]; 
    $action = $_POST["um_action"]; 
    if ( $action == 'ding'){ 
    $bigfa_raters = get_post_meta($id,'bigfa_ding',true); 
    $expire = time() + 99999999; 
    $domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false; // make cookies work with localhost 
    setcookie('bigfa_ding_'.$id,$id,$expire,'/',$domain,false); 
    if (!$bigfa_raters || !is_numeric($bigfa_raters)) { 
        update_post_meta($id, 'bigfa_ding', 1); 
    }  
    else { 
            update_post_meta($id, 'bigfa_ding', ($bigfa_raters + 1)); 
        } 
    
    echo get_post_meta($id,'bigfa_ding',true); 
     
    }  
     
    die; 
}

将以下代码扔进footer.php文件

<script type="text/JavaScript"> 
$.fn.postLike = function() { 
    if ($(this).hasClass('done')) { 
        return false; 
    } else { 
        $(this).addClass('done'); 
        var id = $(this).data("id"), 
        action = $(this).data('action'), 
        rateHolder = $(this).children('.count'); 
        var ajax_data = { 
            action: "bigfa_like", 
            um_id: id, 
            um_action: action 
        }; 
        $.post("/wp-admin/admin-ajax.php", ajax_data, 
        function(data) { 
            $(rateHolder).html(data); 
        }); 
        return false; 
    } 
}; 
$(document).on("click", ".favorite", 
function() { 
    $(this).postLike(); 
}); 
</script>

然后打开你的single.php文件,搜索这段代码<?php the_content(); ?>,在这段代码后面添加以下代码

<div class="post-like"> 
         <a href="javascript:;" data-action="ding" data-id="<?php the_ID(); ?>" class="favorite<?php if(isset($_COOKIE['bigfa_ding_'.$post->ID])) echo ' done';?>">喜欢 <span class="count"> 
            <?php if( get_post_meta($post->ID,'bigfa_ding',true) ){             
                    echo get_post_meta($post->ID,'bigfa_ding',true); 
                 } else { 
                    echo '0'; 
                 }?></span> 
        </a> 
 </div>

现在是不是就已经好了??还没有呢,现在的效果还不好看,添加一段代码就好了,将这段代码扔进style.CSS文件,最底部就可以了

.post-like{text-align:center;padding:10px} 
.post-like a{ background-color:#21759B;border-radius: 3px;color: #FFFFFF;font-size: 12px;padding: 5px 10px;text-decoration: none;outline:none} 
.post-like a.done, .post-like a:hover{background-color:#eee;color:#21759B;}  
.post-like a.done{cursor:not-allowed}

具体效果


WordPress