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

首頁 > CMS > Wordpress > 正文

使用PHP+AJAX讓WordPress動態加載文章的教程

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

這篇文章主要介紹了使用PHP+AJAX讓WordPress動態加載文章的教程,即不用手動刷新瀏覽器頁面即可讓加載好的文章顯示,需要的朋友可以參考下

為什么要動態加載文章?

1. 快速向訪客展示頁面

文章很容是包含大量文字和多媒體資源 (如: 圖片, 視頻, 音樂), 加載這些內容需要占用很多的時間. 如果你的頁面上存在大量文章, 當訪客發現頁面久久沒有加載完成就感到不耐煩. 這是動態加載文章的主要目的.

2. 讓文章列表化

使頁面上的文章成為一個列表, 減少頁面的空間占用, 訪客可以方便的移動到頁面下方, 提高舊文章被點擊的幾率. 并且你可以在頁面上放置更多的文章而不用擔心頁面過長.

為什么不動態加載文章?

1. 對搜索引擎不友好

搜索引擎優化的目的是將有價值的東西盡量多的向搜索爬蟲展示, 包括最新的文章內容. 只有標題的文章讓爬蟲只知道這個文章而不知其文章側重, 使用 JavaScript 輸出的文章內容未必可以被抓取和分析. 這些對 SEO 來說都是不好的.

后來發現, 如果你的網站有固定的文章類型, 沒有畢業在文章列表頁顯示太多文章內容, 表示影響不大.

2. 增加了請求次數

雖然將文章折疊起來, 我們一般還是會想辦法向訪客顯示前面的幾篇文章. 這樣對用戶是友好的, 但是要增加請求的次數和數據庫訪問的次數.

后來我有選擇地顯示部分文章內容, 而且不是通過異步加載的方式, 也就是說, 這個問題是可以通過簡單的修改解決掉的.

3. 一些插件失效

因為需要自定義方法抓取文章, 如果不添加特殊處理, 很可能令部分 WordPress 插件失效.

可以通過特殊處理解決掉, 以后文章中會提及.

動態加載文章的設計思路

1. 找到頁面上所有文章

為每個文章添加一個展開/折疊按鈕

2. 向文章添加展開/折疊按鈕

點擊按鈕, 如果文章內容沒有加載, 加載并展開文章內容.

點擊按鈕, 如果文章內容已經加載, 則展開/折疊文章內容.

3. 加載文章內容

將文章的 id 發往后臺, 在數據庫中找到相應的文章內容并進行格式化, 返回響應顯示在頁面上.

JavaScript 處理代碼分析

1. 找到頁面上所有文章

  1. / 在文檔加載完畢的時候遍歷所有匹配文章的元素 
  2. jQuery(document).ready(function(){ 
  3.  jQuery('div.post').each(function() { 
  4.  // 如果元素相應位置是文章 ID 
  5.  var id = jQuery(this).attr('id'); 
  6.  if(/^post/-[0-9]+$/.test(id)) { 
  7.   // 則為每個文章添加一個展開/折疊按鈕 
  8.   ... 
  9.  } 
  10.  }); 
  11. }); 

2. 向文章添加展開/折疊按鈕

  1. toggle.toggle(function() { // 展開 
  2.  // 如果文章內容為空, 加載文章內容 
  3.  if(jQuery('#' + id + ' .content').text() == '') { 
  4.  ... 
  5.  } 
  6.  // 顯示文章內容, 并切換按鈕樣式 
  7.  jQuery('#' + id + ' .content').slideDown(); 
  8.  jQuery(this).removeClass('collapse').addClass('expand'); 
  9. }, 
  10. function() { // 折疊 
  11.  // 隱藏文章內容, 并切換按鈕樣式 
  12.  jQuery('#' + id + ' .content').slideUp(); 
  13.  jQuery(this).removeClass('expand').addClass('collapse'); 
  14. // 將按鈕追加到文章標題前方 
  15. }).prependTo(jQuery('#' + id + ' h2')); 

3. 加載文章內容

  1. // 取得文章 ID 
  2. var postId = id.slice(5); 
  3. // 使用 AJAX 獲取并處理文章內容 
  4. jQuery.ajax({ 
  5.  type:     'GET' 
  6.  ,url:     '?action=load_post&id=' + postId 
  7.  ,cache:    false 
  8.  ,dataType:  'html' 
  9.  ,contentType: 'application/json; charset=utf-8' 
  10.  // 取得返回內容之前顯示加載信息 
  11.  ,beforeSend: function(data){loadPostContent(id, '<p class="ajax-loader">Loading...</p>');} 
  12.  // 獲取文章內容成功, 更新文章內容 
  13.  ,success:   function(data){loadPostContent(id, data);} 
  14.  // 獲取文章內容失敗, 顯示出錯提示 
  15.  ,error:    function(data){loadPostContent(id, '<p>Oops, failed to load data.</p>');} 
  16. }); 

后臺處理

處理思路

從前臺傳到后臺的參數有兩個, 一個是 action ID, 用于確定使用的接口, 另一個是文章的 ID, 用于獲取文章對應的內容.

下面我們來分析一下wp-includes/post-template.php 的 get_the_content 方法.

  1. function get_the_content($more_link_text = null, $stripteaser = 0) { 
  2.  global $id$post$more$page$pages$multipage$preview
  3.  
  4.  // 設定 "查看全文" 的鏈接文案 
  5.  if ( null === $more_link_text ) 
  6.  $more_link_text = __( '(more...)' ); 
  7.  
  8.  // 返回內容 
  9.  $output = ''
  10.  
  11.  // More 標簽是否存在的標記位 
  12.  $hasTeaser = false; 
  13.  
  14.  // 如果文章要求輸入密碼, 并且在 Cookie 中找不到處理過的信息, 則返回要求輸入密碼的查看表單 
  15.  if ( post_password_required($post) ) { 
  16.  $output = get_the_password_form(); 
  17.  return $output
  18.  } 
  19.  
  20.  // 請求的文章片段對應的頁面大于最大頁數 (即文章片段不存在), 則返回最大頁碼的文章片段 
  21.  if ( $page > count($pages) ) 
  22.  $page = count($pages); 
  23.  
  24.  // 文章內容是最后分頁中的文章片段 
  25.  $content = $pages[$page-1]; 
  26.  // 如果文中有 More 標簽, 要求切斷文章并輸出 "查看全文" 鏈接, 則重定義文章內容, 標記 More 標簽存在 
  27.  if ( preg_match('/<!--more(.*?)?-->/'$content$matches) ) { 
  28.  $content = explode($matches[0], $content, 2); 
  29.  if ( !emptyempty($matches[1]) && !emptyempty($more_link_text) ) 
  30.   $more_link_text = strip_tags(wp_kses_no_null(trim($matches[1]))); 
  31.  
  32.  $hasTeaser = true; 
  33.  } else { 
  34.  $content = array($content); 
  35.  } 
  36.  
  37.  // 如果進行了文章切斷處理, 且不存在分頁要求,  
  38.  if ( (false !== strpos($post->post_content, '<!-- noteaser -->') && ((!$multipage) || ($page==1))) ) 
  39.  $stripteaser = 1; 
  40.  
  41.  // 獲取文章內容的第一部分; 如果在獨立文章存在 Read more 和切斷處理, 則文章內容為空 
  42.  $teaser = $content[0]; 
  43.  if ( ($more) && ($stripteaser) && ($hasTeaser) ) 
  44.  $teaser = ''
  45.  $output .= $teaser
  46.  
  47.  // 如果文章分為多個片段, 在獨立文章中拼接上第二部分, 摘要內容中顯示 "閱讀全文" 鏈接 
  48.  if ( count($content) > 1 ) { 
  49.  if ( $more ) { 
  50.   $output .= '<span id="more-' . $id . '"></span>' . $content[1]; 
  51.  } else { 
  52.   if ( ! emptyempty($more_link_text) ) 
  53.   $output .= apply_filters( 'the_content_more_link'' <a href="' . get_permalink() . "#more-$id/" class=/"more-link/">$more_link_text</a>"$more_link_text ); 
  54.   $output = force_balance_tags($output); 
  55.  } 
  56.  
  57.  } 
  58.  
  59.  if ( $preview ) // preview fix for javascript bug with foreign languages 
  60.  $output = preg_replace_callback('//%u([0-9A-F]{4})/', create_function('$match''return "&#" . base_convert($match[1], 16, 10) . ";";'), $output); 
  61.  
  62.  // 返回文章內容 
  63.  return $preview

你完全可以這樣想: 只要滿足一些傳入的參數, 去除一些不必要的, 更換一些可取代的, 將頁面返回改成輸出, 就是一個輸出文章內容的接口.

處理方法

如果我們暫時不考慮輸入密碼, 分頁等功能; 另外, 因為 More 和切斷功能不應該在展開文章內容中存在, 響應處理可以變得很簡單. 我們要做的事就這么幾個:

1. 做出 action 對應的接口

2. 獲取指定文章的內容

3. 格式化文章內容

4. 返回文章內容

多說無用, 直接上代碼, 加注釋:

  1. function load_post() { 
  2.  // 如果 action ID 是 load_post, 并且傳入的必須參數存在, 則執行響應方法 
  3.  if($_GET['action'] == 'load_post' && $_GET['id'] != '') { 
  4.  $id = $_GET["id"]; 
  5.  $output = ''
  6.  
  7.  // 獲取文章對象 
  8.  global $wpdb$post
  9.  $post = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->posts WHERE ID = %d LIMIT 1"$id)); 
  10.  
  11.  // 如果指定 ID 的文章存在, 則對他進行格式化 
  12.  if($post) { 
  13.   $content = $post->post_content; 
  14.   $output = balanceTags($content); 
  15.   $output = wpautop($output); 
  16.  } 
  17.  
  18.  // 打印文章內容并中斷后面的處理 
  19.  echo $output
  20.  die(); 
  21.  } 
  22. // 將接口加到 init 中 
  23. add_action('init''load_post');

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av高清不卡| 日韩av电影免费观看高清| 最近日韩中文字幕中文| 日韩精品在线观看一区| 国产精品久久久久久亚洲影视| 91免费看国产| 亚洲欧美一区二区三区四区| 欧美中文字幕在线| 亚洲国产精品推荐| 色先锋久久影院av| 欧美丰满片xxx777| 一区二区三区视频在线| 国产精品丝袜久久久久久高清| 美女精品久久久| 日韩va亚洲va欧洲va国产| 色综合天天综合网国产成人网| 欧美大片网站在线观看| 久久久久久久久电影| 91精品一区二区| 欧美在线视频免费| 成人乱人伦精品视频在线观看| 俺去啦;欧美日韩| 亚洲欧美在线一区| 久久精品国产v日韩v亚洲| 久久精品一偷一偷国产| 中文字幕最新精品| 国产精品激情av在线播放| 国产精品揄拍一区二区| 亚洲精品日韩丝袜精品| www.久久草.com| 美女撒尿一区二区三区| 亚洲人成绝费网站色www| 亚洲图片欧洲图片av| 高跟丝袜一区二区三区| 亚洲精品日韩激情在线电影| 久久国产精品网站| 亚洲午夜色婷婷在线| 日韩中文第一页| 欧美网站在线观看| 色婷婷综合成人| 久久久亚洲国产天美传媒修理工| 国产亚洲精品久久久久动| 伊人久久综合97精品| 日韩在线观看免费高清完整版| 日日噜噜噜夜夜爽亚洲精品| 亚洲网址你懂得| 北条麻妃99精品青青久久| 久久久亚洲国产| 美女视频黄免费的亚洲男人天堂| 日韩福利视频在线观看| 亚洲精品自拍视频| 成人免费视频xnxx.com| 午夜欧美不卡精品aaaaa| 久久久国产影院| 亚洲欧美三级伦理| 久久久91精品国产一区不卡| 91精品国产91久久久久| 最新69国产成人精品视频免费| 日韩在线观看免费全集电视剧网站| 日韩中文字幕在线视频| 精品视频—区二区三区免费| 欧美夜福利tv在线| 日韩在线免费观看视频| 久久久久久网址| 欧美性高潮在线| 性欧美激情精品| 亚洲国产精品系列| 久久亚洲精品小早川怜子66| 亚洲久久久久久久久久| 久久99久久久久久久噜噜| 亚洲精品在线视频| 91精品国产高清久久久久久| 亚洲电影免费在线观看| 91精品久久久久久久久不口人| 日韩在线视频导航| 欧美另类69精品久久久久9999| 国产亚洲欧美日韩一区二区| 亚洲自拍偷拍视频| 国产精品永久免费观看| 欧美激情久久久久久| 97精品国产97久久久久久春色| 岛国视频午夜一区免费在线观看| 最近更新的2019中文字幕| 国产一区二区三区毛片| 7777免费精品视频| 亚洲视频一区二区三区| 91sa在线看| 自拍偷拍亚洲欧美| 久久成人国产精品| 国产suv精品一区二区三区88区| 亚洲精品在线91| 欧美日韩中文字幕在线视频| 国产在线拍揄自揄视频不卡99| 国产99久久精品一区二区| 欧美电影免费播放| 国产日韩欧美91| 日韩成人av网址| 午夜精品蜜臀一区二区三区免费| 国产欧美久久一区二区| 在线看欧美日韩| 成人亚洲综合色就1024| 日韩亚洲精品视频| 91精品久久久久久| 国产日韩精品视频| 国产婷婷成人久久av免费高清| 日韩经典中文字幕在线观看| 精品欧美激情精品一区| 亚洲欧美制服中文字幕| 成人激情视频在线播放| 国产精品久久久久久一区二区| 亚洲成人av资源网| 亚洲综合日韩中文字幕v在线| 国产精品免费看久久久香蕉| 欧美性受xxxx白人性爽| 亚洲欧洲xxxx| 久久久精品视频成人| 欧美性受xxxx黑人猛交| 国产一区二区三区四区福利| 亚洲精品欧美日韩| 欧美激情按摩在线| 亚洲精品国产欧美| 久久久久久亚洲精品中文字幕| 九九热这里只有精品免费看| 91久久久久久| 午夜精品一区二区三区在线播放| 丝袜一区二区三区| 国产精品中文久久久久久久| 久久伊人精品一区二区三区| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲欧美日韩一区在线| 在线观看中文字幕亚洲| 日韩欧美福利视频| 欧美激情精品久久久久久大尺度| 欧美另类高清videos| 亚洲国内精品在线| 97精品伊人久久久大香线蕉| 欧美精品九九久久| 亚洲精品在线观看www| 欧美—级a级欧美特级ar全黄| 亚洲精品美女在线观看播放| 精品视频中文字幕| 欧美性猛交xxxx黑人| 成人黄色免费在线观看| 国产视频精品xxxx| 亚洲欧美日韩中文在线制服| 国产欧美精品一区二区三区介绍| 2021久久精品国产99国产精品| 国模叶桐国产精品一区| 国产精品成人一区二区| 欧美精品激情在线| 中文字幕日韩在线观看| 日韩在线国产精品| 久久综合免费视频影院| 日韩在线资源网| 57pao精品| 国内精品伊人久久| 国产精品久久久久久久app| 日韩av在线免费看| 亚洲国产欧美一区二区三区同亚洲| 欧美精品久久久久| 亚洲第一视频在线观看| 色综合色综合久久综合频道88| 欧美中文字幕在线| 欧美午夜激情视频|