建站教程

建站教程

Products

当前位置:首页 > 建站教程 >

wordpress评分插件wp-postratings修改5星投票图标(让wordpress文章按照评分进行排序的方法)

GG网络技术分享 2025-03-18 16:12 0


wordpress评分插件wp-postratings修改5星投票图标

博主前段时间针对wordpress评分插件wp-postratings这个插件,如何设置5星投票也发布了文章,但是按教程设置成功后,发现投票图标太小,总感觉不完美,由于博主有强迫症,想把他搞好,当然也请教了我会代码的朋友,后来按他的思路,一次一次测试直到搞好为止,测试前当然还是老规矩先备份相应的文件哈,好了下面说说博主按之前的教程成功设置了投票插件后,网站文章出现的两个问题按接下来说的方法都已解决。

问题一:电脑版访问文章可以5星投票,但是手机端访问文章时明明点的是5星投票却出现了4星,这样直接影响用户投票体验度了。

问题二:5星图片图标太小,同样影响用户投票体验度。

投票插件星星图片太小(未修改前星星图标太小)

下面是我直接测试成功的解决方法:

1.进入FTP里找到投票插件 wp-content/plugins/wp-postratings/images

找到stars_crystal和stars文件夹(建议先把2个文件下载到本地,设置出了问题也可以恢复)

然后再把1里的所有图片复制,上传到2文件夹里替换覆盖即可。1的图片不需要修改哦。

复制stars_crystal所有图片后,上传到stars里替换,stars_crystal里的图片不用修改哦

stars_crystal里所有图片尺寸为16剩16,因为stars里图片尺寸为12剩12,我们最终的目的就是把stars12的图片变成stars_crystal16的图片即可。

把1里所有图片替换到2里覆盖即可

下面是替换后刷新文章,后的投票星星效果图。明显高大上档次了。

修改后投票星星图标效果图

让wordpress文章按照评分进行排序的方法

我们在做wordpress网站的时候经常会用wp-postratings插件来给文章打分,这个插件会把评分存在字段为 ratings_average 的字段里面。

下面针对自定义字段atings_average 来进行自定义排序。

简单的方法就是在主题函数functions.php中加入下面代码:

functionsort_by_ratings($query){

if(($query->is_home()||$query->is_archive())&&$query->is_main_query()){

$query->set('meta_key','ratings_average');

$query->set('orderby','meta_value_num');

$query->set('order','DESC');

}

}

add_action('pre_get_posts','sort_by_ratings');

用这个方法会有一个错误出现,就是没有评分的文章会在列表中消失,要解决这个方法我们可以给没有评分的文章都创建这个字段,默认值为0就可以了。

在主题函数里面加入下面代码:

functionsort_by_ratings($query){

if(($query->is_home()||$query->is_archive())&&$query->is_main_query()){

add_filter('posts_fields','ratings_fields');

add_filter('posts_join','ratings_join');

add_filter('posts_where','ratings_where');

add_filter('posts_groupby','ratings_group');

add_filter('posts_orderby','ratings_orderby');

}

}

add_action('pre_get_posts','sort_by_ratings');

functionratings_fields($fields){

$order_key="mt1.meta_value";

return$fields.",$order_keyASavg";

}

functionratings_join($join){

global$wpdb;

$new_join="

INNERJOIN$wpdb->postmetaON$wpdb->posts.ID=$wpdb->postmeta.post_id

LEFTJOIN$wpdb->postmetaASmt1ON($wpdb->posts.ID=mt1.post_idANDmt1.meta_key='ratings_average')

";

return$join.''.$new_join;

}

functionratings_where($where){

global$wpdb;

$new_where="

AND($wpdb->postmeta.meta_key='ratings_average'

ORmt1.post_idISNULL)";

return$where.''.$new_where;

}

functionratings_group($group){

global$wpdb;

return"$wpdb->posts.ID";

}

functionratings_orderby($orderby){

global$wpdb;

return"ISNULL(avg),avg,$wpdb->posts.post_dateASC";

}

这样排序是分数由低到高,如果需要由高到低可以改成:

functionratings_fields($fields){

//只能升序排列,所以要降序排列时先做一次运算

$max_rating=5;

$order_key="$max_rating-mt1.meta_value";

return$fields.",$order_keyASavg";

}

这样我们就可以自定义wordpress评分排序了。

标签:

提交需求或反馈

Demand feedback