WordPress的向上/向下投票系统

时间:2013-05-19 作者:whiteletters in blankpapers

在所有带有关键词“投票系统,向上投票,向下投票”的帖子中,我都找不到一个令人满意的解决方案,除了接受一个可用的插件,花大量时间了解它,并尝试修改它的功能,使其符合要求。因此,我相信我会编写自己的代码,为Wordpress创建一个类似堆栈交换的投票系统。没有您的建议,我无法找到代码框架主要部分的起点。

我的实际做法:

创建两个自定义字段:第一个存储postpvotes的数量,第二个存储下行投票的数量。可以使用显示投票状态get_post_meta 函数,并使用update_post_meta.

If (user is logged in )
{
Show the upvote or downvote state already done by this user;
Allow voting ;
}
else 
{
don\'t allow voting;
}
My question is:如何解决第二个问题。有没有一种方法可以使用Wordpress PHP函数提供的自定义功能来实现它(不使用SQL查询,因为我不知道如何使用SQL)。我注意到所有的上/下投票插件都在代码中使用SQL查询,这让我非常害怕。我应该学习SQL来实现我的目标吗?

2 个回复
最合适的回答,由SO网友:Bainternet 整理而成

一个简单的用户元行可以为您处理这个问题(第二个问题),您可以将post id和投票(上/下)存储在一个数组中,这与post-meta-ex完全相同

/**
 * update user vote per post
 * @param  int $user_id 
 * @param  int $post_id 
 * @param  mixed $vote can be an integer 1 / -1 and can also be a string "up"/"down"
 * @return void
 */
function update_user_vote($user_id,$post_id,$vote){
    //get all saved user data    
    $user_votes = get_user_meta($user_id,\'updown_votes\',true);
    $user_votes[$post_id] = $vote;
    //update with the new vote
    update_user_meta($user_id,\'updown_votes\',$user_votes);
}

/**
 * get user vote of post
 * @param  int $user_id 
 * @param  int $post_id 
 * @return if user has voted the his vote will be returned , zero if no vote found for post by this user
 */
function get_user_vote($user_id,$post_id){
    //get all saved user data    
    $user_votes = get_user_meta($user_id,\'updown_votes\',true);
    return (isset($user_votes[$post_id])) ?  $user_votes[$post_id] : 0;
}
所有操作都是在没有SQL的情况下完成的:)

SO网友:s_ha_dum

是的,您可以使用内置函数来执行此操作。你有一个非常广泛的问题,一个可行的解决方案需要相当多的工作,但有几种方法可以用我认为可行的核心功能来处理这个问题。

将所有内容存储在post meta中

您可以仅使用您已经考虑的两个字段来完成此操作。保存一个用户数组,而不是保存计数器IDs、 要获得计数,只需对用户进行计数IDs、 带一个“;“向上投票”;数组和一个“;“被否决”;阵列,你有你需要的。

要告诉用户是否投票,只需检查用户的数组ID.

如果您需要查询投票,这将不是一个好的解决方案。也就是说,如果您需要查找特定用户投票的所有帖子,那么它将无法正常工作。如果你需要为所有的帖子或一些大的帖子找到所有的投票,那么它不会很好地工作。

使用post meta和user meta的组合,类似于上述内容,但您将使用*_user_meta 用于保存post的数组的函数IDs到usermeta 表中的计数器之外$wpdb->postmeta.

这意味着数据库写入量加倍,读取量加倍,但这会让您得到;由用户投票的所有帖子;相对容易。但是,与其他解决方案一样,如果您需要搜索该用户的元数据,这将无法正常工作。

如果阵列太大,这两个选项都可能存在性能问题。数据库列类型为longtext, 这将保存大量数据,但传输处理时间可能会成为一个问题。

我认为你应该能够使用评论元而不是帖子元,但我认为帖子元更合适。

如果我要对核心表和函数执行此操作,我会倾向于第二个选项,但如果我认真考虑这样的事情,我会非常认真地考虑一个专用表,我可以专门为此任务构建和索引。就您可以运行的查询类型而言,这将是最灵活、最有效的方法。如果你想得到最好的答案,在我看来,这需要学习SQL.

结束

相关推荐

使用HAPRoxy从MySQL集群运行WordPress

我正在尝试安装wordpress,其中DB将位于MySQL集群(Galera/Percona XtraDB集群)上,并通过HAProxy进行连接。Wordpress安装之外的一切似乎都很好。使用mysql客户端通过用户名和密码连接到数据库就可以了。Wordpress安装与HAProxy位于同一服务器上。在命令行中执行此操作时效果良好:mysql -u wordpress -p<password> -h <haproxy ip> -D wordpress 然而,从insta