久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

WordPress AJAX 加載文章內(nèi)容 - 后臺(tái)處理

 歪SIR 2011-06-22

關(guān)于 WordPress 動(dòng)態(tài)加載文章的原因, 利弊, 思路, 以及前臺(tái) JavaScript 的實(shí)現(xiàn), 我已經(jīng)在以前的文章中很具體地講解過了. 可以轉(zhuǎn)跳《動(dòng)態(tài)加載文章內(nèi)容》一文了解相關(guān)內(nèi)容.

因?yàn)闀r(shí)間問題, 自己的沒有做得很滿意, 所以沒有說明如何處理后臺(tái)響應(yīng), 出了那么一個(gè)不完整的教程. 直到昨天有人來公司面試跟我提起這個(gè), 覺得還是可以說說的. 本文將會(huì)對(duì)此進(jìn)行具體的講解.

處理思路

從前臺(tái)傳到后臺(tái)的參數(shù)有兩個(gè), 一個(gè)是 action ID, 用于確定使用的接口, 另一個(gè)是文章的 ID, 用于獲取文章對(duì)應(yīng)的內(nèi)容.

《動(dòng)態(tài)加載文章內(nèi)容》一文中我提示過, 可以參考 wp-includes/post-template.php 的 get_the_content 方法, 通過文章 ID 獲取文章內(nèi)容. 下面我們來分析一下這個(gè)方法.

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

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

處理方法

如果我們暫時(shí)不考慮輸入密碼, 分頁等功能; 另外, 因?yàn)?More 和切斷功能不應(yīng)該在展開文章內(nèi)容中存在, 響應(yīng)處理可以變得很簡單. 我們要做的事就這么幾個(gè):
1. 做出 action 對(duì)應(yīng)的接口
2. 獲取指定文章的內(nèi)容
3. 格式化文章內(nèi)容
4. 返回文章內(nèi)容

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

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

看完這段代碼, 是不是感到相當(dāng)?shù)暮唵蚊髁? 因?yàn)檫@是最基本的操作, 很多功能并沒考慮在內(nèi). Okay, 這樣就引出多個(gè)問題:
1. 如果存在某個(gè)插件, 會(huì)對(duì)文章內(nèi)容進(jìn)行特殊處理 (如: WP-Polls), 響應(yīng)處理需要特殊處理嗎? 如何操作?
2. 如果有加密文章, 如何向用戶呈現(xiàn)? 前后臺(tái)又該如何配合?
3. 如果存在文章分頁, 當(dāng)用戶點(diǎn)擊翻頁鏈接時(shí)會(huì)發(fā)生什么事情? 怎樣處理體驗(yàn)更好?

這些問題作為后面的話題我會(huì)逐一講解并解決掉, 但再此之前, 你是否已經(jīng)想到解決辦法了?

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多