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

首頁 > 語言 > PHP > 正文

php中get_adjacent_post函數PHP源碼閱讀筆記

2024-09-04 11:49:21
字體:
來源:轉載
供稿:網友

這個函數是wordpress里的一個函數,作用是獲取相鄰的POST文章。

函數并不大,有效代碼大概只有70行左右,但是里面包含的知識不少,所以專門用一篇文章來解釋一下。

get_adjacent_post函數的源碼位于wp-includes/link-template.php中。

我會通過“//roc:”在引出源碼閱讀筆記。

  1. /** 
  2.  * Retrieve adjacent post. 
  3.  * 
  4.  * Can either be next or previous post. 
  5.  * 
  6.  * @since 2.5.0 
  7.  * 
  8.  * @param bool $in_same_cat Optional. Whether post should be in a same category. 
  9.  * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs. 
  10.  * @param bool $previous Optional. Whether to retrieve previous post.                                                              
  11.  * @return mixed Post object if successful. Null if global $post is not set. Empty string if no corresponding post exists. 
  12.  */ 

【筆記】

上面這一段是函數的介紹信息,這個函數包括三個參數:

1 $in_same_cat參數,表示是否需要在同一category中,默認為false。

2 $excluded_categories參數,用于設置忽略哪些category中的post??梢詫ategory ID組成array或comma-separated list的方式來賦值。

3 $previous參數,表示是否提取前一篇post。默認為true。如果希望提取后一篇post,需則設置為false。

此函數的返回值也有三種情況:

1 返回post object,則表明成功;

2 返回NULL,則表明全局$post未設置;

3 返回空字符串,則表明相應的post不存在。

function get_adjacent_post( $in_same_cat = false, $excluded_categories = "", $previous = true ) {

global $wpdb;

【筆記】

這里聲明了$wpdb全局變量,這個變量其實很有來頭的,它是wordpress自身為開發者提供的公有全局變量,開發者們可以直接利用這個函數來對數據庫進行操作,包括新建、刪除、添加、更新等等。

需要注意的是,如果想使用這個“萬能鑰匙”,需要在自己的函數中向上面這樣聲明一下這個變量。

另外,在正常情況下,$wpdb變量只有權限訪問博客所對應的一個數據庫,對其他數據庫是沒有權限的。

比如想查詢數據庫中的表內容,那么可以這樣:

  1. if ( ! $post = get_post() )        return null; 
  2.     $current_post_date = $post->post_date; 
  3.  
  4.     $join = ""
  5.     $posts_in_ex_cats_sql = ""
  6.     if ( $in_same_cat || ! emptyempty$excluded_categories ) ) { 
  7.         $join = " INNER JOIN $wpdb->term_relationships AS tr ON p.ID = tr.object_id INNER JOIN $wpdb->term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id"
  8.  
  9.         if ( $in_same_cat ) { 
  10.             if ( ! is_object_in_taxonomy( $post->post_type, "category" ) ) 
  11.                 return ""
  12.             $cat_array = wp_get_object_terms($post->ID, "category"array("fields" => "ids")); 
  13.             if ( ! $cat_array || is_wp_error( $cat_array ) ) 
  14.                 return ""
  15.             $join .= " AND tt.taxonomy = "category" AND tt.term_id IN (" . implode(","$cat_array) . ")";  
  16.         }    
  17.  
  18.         $posts_in_ex_cats_sql = "AND tt.taxonomy = "category""
  19.         if ( ! emptyempty$excluded_categories ) ) { 
  20.             if ( ! is_array$excluded_categories ) ) { 
  21.                 // back-compat, $excluded_categories used to be IDs separated by " and " 
  22.                 if ( strpos$excluded_categories" and " ) !== false ) { 
  23.                     _deprecated_argument( __FUNCTION__"3.3", sprintf( __( "Use commas instead of %s to separate excluded categories." ), ""and"" ) ); 
  24.                     $excluded_categories = explode" and "$excluded_categories ); 
  25.                 } else { 
  26.                     $excluded_categories = explode","$excluded_categories ); 
  27.                 } 
  28.             } 
  29.  
  30.             $excluded_categories = array_map"intval"$excluded_categories ); 
  31.  
  32.             if ( ! emptyempty$cat_array ) ) { 
  33.                 $excluded_categories = array_diff($excluded_categories$cat_array); 
  34.                 $posts_in_ex_cats_sql = ""
  35.             } 
  36.  
  37.             if ( !emptyempty($excluded_categories) ) { 
  38.                 $posts_in_ex_cats_sql = " AND tt.taxonomy = "category" AND tt.term_id NOT IN (" . implode($excluded_categories",") . ")"
  39.             } 
  40.         } 
  41.     } 
  42.  
  43.     $adjacent = $previous ? "previous" : "next"
  44.     $op = $previous ? "<" : ">"
  45.     $order = $previous ? "DESC" : "ASC"
  46.  
  47.     $join  = apply_filters( "get_{$adjacent}_post_join"$join$in_same_cat$excluded_categories ); 
  48.     $where = apply_filters( "get_{$adjacent}_post_where"$wpdb->prepare("WHERE p.post_date $op %s AND p.post_type = %s AND p.post_status = "publish" $posts_in_ex_cats_sql"$current_post_date$post->post_type), $in_same_cat$excluded_categories ); 
  49.     $sort  = apply_filters( "get_{$adjacent}_post_sort""ORDER BY p.post_date $order LIMIT 1" ); 
  50.  
  51.     $query = "SELECT p.id FROM $wpdb->posts AS p $join $where $sort"
  52.     $query_key = "adjacent_post_" . md5($query); 
  53.     $result = wp_cache_get($query_key"counts"); 
  54.     if ( false !== $result ) { 
  55.         if ( $result ) 
  56.             $result = get_post( $result ); 
  57.         return $result
  58.     } 
  59.  
  60.     $result = $wpdb->get_var( $query ); 
  61.     if ( null === $result ) 
  62.         $result = ""
  63.  
  64.     wp_cache_set($query_key$result"counts"); 
  65.     //Vevb.com 
  66.     if ( $result ) 
  67.         $result = get_post( $result ); 
  68.  
  69.     return $result

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲免费电影一区| 国产精品大陆在线观看| 欧美福利在线观看| 午夜剧场成人观在线视频免费观看| 91久久综合亚洲鲁鲁五月天| 欧美日韩一区二区在线播放| 91精品久久久久久久久久久| 91九色在线视频| 久久精品视频99| 国产成人97精品免费看片| 国产伦精品免费视频| 久久久精品999| 欧美日韩国产色| 成人疯狂猛交xxx| 国产日韩欧美在线播放| 欧美精品一区在线播放| 中文字幕免费精品一区高清| 久久婷婷国产麻豆91天堂| 91精品国产色综合久久不卡98| www.xxxx精品| 国产欧美亚洲精品| 亚洲国产免费av| 国产91精品高潮白浆喷水| 亚洲精品456在线播放狼人| 欧美激情xxxx性bbbb| 欧美极品少妇xxxxⅹ喷水| 欧美床上激情在线观看| 国产999精品久久久影片官网| 国产97在线亚洲| 亚洲一品av免费观看| 久久久久久久一区二区三区| 亚洲无亚洲人成网站77777| 欧美一级淫片丝袜脚交| 国产精品免费一区豆花| 欧美性高潮床叫视频| 91精品国产乱码久久久久久久久| 精品久久久久久亚洲国产300| 国产日韩在线视频| 国外色69视频在线观看| 日本欧美中文字幕| 91爱视频在线| 一区二区三区www| 深夜精品寂寞黄网站在线观看| 羞羞色国产精品| 国产精品偷伦一区二区| 欧美精品午夜视频| 蜜臀久久99精品久久久久久宅男| 久久久久九九九九| 久久精品亚洲94久久精品| 国产精品免费视频xxxx| 5252色成人免费视频| 青草青草久热精品视频在线网站| 亚洲精品动漫久久久久| 成人亚洲欧美一区二区三区| 国产亚洲视频在线| 亚洲欧美中文字幕在线一区| 亚洲色图av在线| 国产精品入口尤物| 欧美黑人极品猛少妇色xxxxx| 777午夜精品福利在线观看| 97久久精品视频| 国产精品第2页| 91色琪琪电影亚洲精品久久| 97超碰色婷婷| 欧美丰满片xxx777| 国产精品久久99久久| 欧美极品少妇全裸体| 国产精品亚洲网站| 亚洲色无码播放| 日韩中文字幕欧美| 97超级碰碰碰久久久| 日本精品在线视频| 国产成人免费91av在线| 精品久久久久久久中文字幕| 亚洲福利精品在线| 久久综合国产精品台湾中文娱乐网| 国产成人在线亚洲欧美| 深夜精品寂寞黄网站在线观看| 伊人伊成久久人综合网小说| 久久久久北条麻妃免费看| 欧美日韩国产精品专区| 国产亚洲一区二区在线| 国产99久久久欧美黑人| 久久亚洲国产精品成人av秋霞| 91最新在线免费观看| 日韩av影院在线观看| 国产福利视频一区二区| 国产欧美 在线欧美| 国产午夜一区二区| 日韩av中文字幕在线播放| 精品久久久视频| 日韩经典第一页| 久久国产精品久久久久| 日韩国产精品视频| …久久精品99久久香蕉国产| 国产国语videosex另类| 91午夜在线播放| 欧美日韩国产综合新一区| 亚洲欧美激情四射在线日| 亚洲自拍另类欧美丝袜| 国产精品网站入口| 色琪琪综合男人的天堂aⅴ视频| 黄色成人在线免费| 久久久亚洲福利精品午夜| 亚洲精品国产福利| 91爱爱小视频k| 国色天香2019中文字幕在线观看| 久久精品国产96久久久香蕉| 欧美中文字幕在线播放| 国产精品永久免费在线| 久久理论片午夜琪琪电影网| 色悠悠久久88| 91中文在线视频| 91日本在线观看| 国自产精品手机在线观看视频| 麻豆国产精品va在线观看不卡| 精品亚洲一区二区三区在线观看| 久热在线中文字幕色999舞| 欧美一级在线播放| 岛国视频午夜一区免费在线观看| 国产精品免费久久久| 亚洲第一精品夜夜躁人人躁| 国产日韩欧美夫妻视频在线观看| 国产精品欧美在线| www亚洲欧美| 青青久久aⅴ北条麻妃| 91亚洲国产精品| 亚洲精品99久久久久中文字幕| 正在播放亚洲1区| 国a精品视频大全| 一区二区三区动漫| 成人中文字幕在线观看| 97**国产露脸精品国产| 国产欧美精品日韩精品| 国产97在线|日韩| 欧美日韩另类在线| 国产日韩亚洲欧美| 亚洲精品国产品国语在线| 亚洲激情久久久| 欧美韩国理论所午夜片917电影| 一本色道久久88综合日韩精品| 欧美日韩亚洲天堂| 欧美日韩亚洲一区二区三区| 国产精品美女主播在线观看纯欲| 国产成人激情小视频| 尤物99国产成人精品视频| 中文字幕亚洲精品| 成人性生交大片免费看小说| 欧美日韩综合视频网址| 亚洲社区在线观看| 亚洲成人激情在线观看| 午夜精品福利在线观看| 亚洲深夜福利网站| 国产精品亚洲自拍| 色噜噜狠狠色综合网图区| 国产日韩精品电影| 精品无人区乱码1区2区3区在线| 亚洲国产精品免费| 久久久噜久噜久久综合| 久久久久日韩精品久久久男男| 欧美一级淫片videoshd| 在线观看久久久久久| 国产精品一区久久| 日韩欧美国产黄色|