Products
GG网络技术分享 2025-03-18 16:12 0
博主前段时间针对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网站的时候经常会用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