亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > CMS > Wordpress > 正文

WordPress實現文章按照自定義字段排序

2024-09-07 00:51:16
字體:
來源:轉載
供稿:網友

我們一起來看看WordPress實現文章按照自定義字段排序的方法,因為碰以一個朋友博客希望增加自定義字段之后再按這個字段排序了,下面是我整理了一個方法,希望能幫助到各位同學.

用Meta Query可以實現WordPress文章按照自定義排序,假設安裝了WP-PostRatings給文章打分,該插件會把文章平均分存成名叫ratings_average的自定義字段,現在就來按照這個字段排序.

簡潔優雅的方法,就是Meta Query,代碼放在主題的functions.php里,代碼如下:

  1. function sort_by_ratings( $query ){ 
  2.     if ( ( $query->is_home() || $query->is_archive() ) && $query->is_main_query() ) { 
  3.         $query->set( 'meta_key''ratings_average' ); 
  4.         $query->set( 'orderby''meta_value_num'); 
  5.         $query->set( 'order''DESC' ); 
  6.     } 
  7. add_action( 'pre_get_posts''sort_by_ratings' ); 

卻有個嚴重的問題,該插件只會給打過分的文章創建ratings_average字段,而Meta Query只會選擇帶有這個字段的文章,也就是說所有沒打過分的文章都會從blog首頁和存檔頁消失.

解決的方法呢,直接點就是給每篇文章都創建這個字段,值為0.

復雜點呢,stackoverflow上有對這個問題的討論,按照給出的方案改進了一下,找到一個暫時的解決方法如下,思路是直接修改sql語句,代碼如下:

  1. function sort_by_ratings( $query ){ 
  2.     if ( ( $query->is_home() || $query->is_archive() ) && $query->is_main_query() ) { 
  3.         add_filter( 'posts_fields''ratings_fields' ); 
  4.         add_filter( 'posts_join''ratings_join' ); 
  5.         add_filter( 'posts_where''ratings_where' );   
  6.         add_filter( 'posts_groupby''ratings_group' ); 
  7.         add_filter( 'posts_orderby''ratings_orderby' ); 
  8.     } 
  9. add_action( 'pre_get_posts''sort_by_ratings' ); 
  10. function ratings_fields($fields){ 
  11.     $order_key = "mt1.meta_value"
  12.     return $fields . ",$order_key AS avg"
  13. function ratings_join($join){ 
  14.     global $wpdb
  15.     $new_join = " 
  16.         INNER JOIN $wpdb->postmeta ON $wpdb->posts.ID = $wpdb->postmeta.post_id 
  17.         LEFT JOIN $wpdb->postmeta AS mt1 ON ($wpdb->posts.ID = mt1.post_id AND mt1.meta_key = 'ratings_average'
  18.     "; 
  19.     return $join . ' ' . $new_join
  20. function ratings_where($where){ 
  21.     global $wpdb
  22.     $new_where = " 
  23.         AND ($wpdb->postmeta.meta_key = 'ratings_average' 
  24.         OR  mt1.post_id IS NULL )"; 
  25.     return $where . ' ' . $new_where
  26. function ratings_group( $group ){ 
  27.     global $wpdb
  28.     return "$wpdb->posts.ID"
  29. //Vevb.com 
  30. function ratings_orderby( $orderby ){ 
  31.     global $wpdb
  32.     return "ISNULL(avg), avg,$wpdb->posts.post_date ASC"

生成的sql語句如下:

  1. SELECT SQL_CALC_FOUND_ROWS wp_posts.*,mt1.meta_value AS avg FROM wp_posts 
  2. INNER JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id 
  3. LEFT JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id AND mt1.meta_key = 'ratings_average'
  4. WHERE 1=1 
  5. AND wp_posts.post_type = 'post' 
  6. AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private'
  7. AND (wp_postmeta.meta_key = 'ratings_average' OR mt1.post_id IS NULL ) 
  8. GROUP BY wp_posts.ID 
  9. ORDER BY ISNULL(avg), avg,wp_posts.post_date ASC LIMIT 0, 10 

結果是分數按照從低分到高分排序,即使order by DESC也是升序排列,如果要讓高分上前面,只能用點奇怪的方法,比如最大分數是5,把posts_fields改成這樣,代碼如下:

  1. function ratings_fields($fields){ 
  2.     // 只能升序排列,所以要降序排列時先做一次運算 
  3.     $max_rating = 5; 
  4.     $order_key = "$max_rating - mt1.meta_value"
  5.     return $fields . ",$order_key AS avg"

如果還有更簡單的方法,歡迎留言指教.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人午夜高潮视频| 不卡av电影在线观看| 久久久人成影片一区二区三区| 久久久之久亚州精品露出| 久久影院中文字幕| 国产精品高潮呻吟久久av野狼| 日韩av在线看| 国产激情综合五月久久| 91九色国产社区在线观看| 欧美一区二粉嫩精品国产一线天| 亚洲精品国产品国语在线| 久久久久久久国产精品视频| 精品调教chinesegay| 青青精品视频播放| 欧洲成人在线视频| 社区色欧美激情 | 精品国偷自产在线视频99| 国模精品系列视频| 黑人欧美xxxx| 欧美视频裸体精品| 色妞欧美日韩在线| 国产精品视频免费在线| 九九精品在线播放| 日韩大片免费观看视频播放| 日韩美女视频免费看| 国产精品一久久香蕉国产线看观看| 国产又爽又黄的激情精品视频| 欧美日韩国产一区二区| 国产精品扒开腿做爽爽爽视频| 成人精品一区二区三区| 91大神在线播放精品| 欧美激情按摩在线| 亚洲欧美综合精品久久成人| 欧美成人手机在线| 欧美精品做受xxx性少妇| 69**夜色精品国产69乱| 日本成人在线视频网址| 国产视频观看一区| 国产精品美女在线观看| 欧美国产第一页| 91sa在线看| 中文字幕一区日韩电影| 欧美网站在线观看| 欧美性色视频在线| 中文字幕久久久| 国产成人综合精品| 最新91在线视频| 久久亚洲精品国产亚洲老地址| 日韩中文字幕视频| 在线精品视频视频中文字幕| 久久视频免费观看| 伊是香蕉大人久久| 欧美激情手机在线视频| 亚洲美女视频网| 91精品国产91久久久久| 日韩一区视频在线| 国产精品视频精品视频| 91精品国产综合久久香蕉的用户体验| 国产日韩欧美黄色| 美女啪啪无遮挡免费久久网站| 国产精品影院在线观看| 欧美精品午夜视频| 精品福利在线观看| 69**夜色精品国产69乱| 国产一区二区三区在线观看网站| 91久久精品久久国产性色也91| 国产精品自产拍高潮在线观看| 欧美性生交xxxxxdddd| 亚洲精品福利在线观看| 午夜免费在线观看精品视频| 日本精品中文字幕| 国产视频观看一区| 亚洲九九九在线观看| 91夜夜未满十八勿入爽爽影院| 2020久久国产精品| 国产午夜精品一区理论片飘花| 精品久久香蕉国产线看观看亚洲| 4438全国成人免费| 日韩av综合网站| 成人黄色午夜影院| 亚洲男人的天堂在线播放| 亚洲一区二区自拍| 日本久久久久久久久| 国产欧美在线视频| 精品国产1区2区| 久久久久久久激情视频| 日韩精品中文字幕有码专区| 欧美最猛性xxxxx亚洲精品| 日韩中文字幕网| 日韩欧美精品中文字幕| 欧美日韩在线影院| 亚洲www永久成人夜色| 奇米四色中文综合久久| 国产成人a亚洲精品| 亚洲成avwww人| 亚洲第一天堂无码专区| 亚洲成年人在线播放| 成人福利视频在线观看| 日韩av网站导航| 日韩69视频在线观看| www.xxxx精品| 久久久国产精彩视频美女艺术照福利| 91美女片黄在线观| 精品久久久久久久中文字幕| 色999日韩欧美国产| 欧美性少妇18aaaa视频| 国产成人av在线播放| 国产欧美日韩精品专区| 国产精品久久久久久av下载红粉| 精品国产拍在线观看| 国产精品国产三级国产aⅴ浪潮| yw.139尤物在线精品视频| 91九色国产视频| 亚洲娇小xxxx欧美娇小| 亚洲国产精品久久久久久| 国产专区精品视频| 午夜欧美大片免费观看| 欧美激情一区二区三区成人| 亚洲欧美中文字幕| 日韩人体视频一二区| 精品久久久视频| 国产婷婷色综合av蜜臀av| 久久亚洲春色中文字幕| 国产精品精品视频一区二区三区| 国产亚洲免费的视频看| 麻豆国产精品va在线观看不卡| 欧美猛少妇色xxxxx| 久久久免费观看| 国产精品福利网站| 久久久免费在线观看| 国产不卡一区二区在线播放| 日本高清不卡的在线| 欧美日韩在线观看视频| 北条麻妃99精品青青久久| 欧美一区二区大胆人体摄影专业网站| 日韩电影中文字幕在线| 亚洲在线免费视频| 国产日韩av在线| 富二代精品短视频| 久久久久久久国产精品视频| 欧美精品18videos性欧美| 亚洲精品视频久久| 中文字幕欧美日韩| 粗暴蹂躏中文一区二区三区| 欧美影院在线播放| 色婷婷久久一区二区| 亚洲香蕉av在线一区二区三区| 中文字幕免费国产精品| 国产在线a不卡| 精品久久久国产精品999| 91久久久久久久一区二区| 美女国内精品自产拍在线播放| 精品欧美一区二区三区| 日韩女优在线播放| 久久国内精品一国内精品| 国产精品久久久久久久久影视| 日韩中文av在线| 精品一区二区三区电影| 欧美亚洲另类在线| 欧美三级免费观看| 日韩欧美中文在线| 成人激情视频免费在线| 欧美成人精品激情在线观看| 亚洲一区二区三区乱码aⅴ|