Typecho教程 – 如何免插件為主題集成文章目錄功能

    通過這個目錄也能讓訪客大概的知道這篇文章的主要內容,大大提升了訪客的體驗。那么這一次的Typecho教程就教大家如何實現這個有趣的功能吧

    一些Typecho主題集成了文章目錄功能,能在文章旁邊列出一級級的目錄,方便訪客閱讀比較長的文章,而且,通過這個目錄也能讓訪客大概的知道這篇文章的主要內容,大大提升了訪客的體驗。那么這一次的Typecho教程就教大家如何實現這個有趣的功能吧。

    Typecho教程 - 如何免插件為主題集成文章目錄功能
    背景圖片
    • 代碼來源: https://www.offodd.com/76.html

    代碼內容

    不過畢竟是WP下的東西,要移植到Typecho還是要改一改的,下面直接放出修改后的代碼吧,使用方法繼續往下看。

    function createCatalog($obj) {    //為文章標題添加錨點
        global $catalog;
        global $catalog_count;
        $catalog = array();
        $catalog_count = 0;
        $obj = preg_replace_callback('/<h([1-6])(.*?)>(.*?)<\/h\1>/i', function($obj) {
            global $catalog;
            global $catalog_count;
            $catalog_count ++;
            $catalog[] = array('text' => trim(strip_tags($obj[3])), 'depth' => $obj[1], 'count' => $catalog_count);
            return '<h'.$obj[1].$obj[2].'><a name="cl-'.$catalog_count.'"></a>'.$obj[3].'</h'.$obj[1].'>';
        }, $obj);
        return $obj;
    }
    
    function getCatalog() {    //輸出文章目錄容器
        global $catalog;
        $index = '';
        if ($catalog) {
            $index = '<ul>'."\n";
            $prev_depth = '';
            $to_depth = 0;
            foreach($catalog as $catalog_item) {
                $catalog_depth = $catalog_item['depth'];
                if ($prev_depth) {
                    if ($catalog_depth == $prev_depth) {
                        $index .= '</li>'."\n";
                    } elseif ($catalog_depth > $prev_depth) {
                        $to_depth++;
                        $index .= '<ul>'."\n";
                    } else {
                        $to_depth2 = ($to_depth > ($prev_depth - $catalog_depth)) ? ($prev_depth - $catalog_depth) : $to_depth;
                        if ($to_depth2) {
                            for ($i=0; $i<$to_depth2; $i++) {
                                $index .= '</li>'."\n".'</ul>'."\n";
                                $to_depth--;
                            }
                        }
                        $index .= '</li>';
                    }
                }
                $index .= '<li><a href="#cl-'.$catalog_item['count'].'">'.$catalog_item['text'].'</a>';
                $prev_depth = $catalog_item['depth'];
            }
            for ($i=0; $i<=$to_depth; $i++) {
                $index .= '</li>'."\n".'</ul>'."\n";
            }
        $index = '<div id="toc-container">'."\n".'<div id="toc">'."\n".'<strong>文章目錄</strong>'."\n".$index.'</div>'."\n".'</div>'."\n";
        }
        echo $index;
    }

    使用方法

    1. 把上面的代碼放到主題文件functions.php最后一行之前

    2. 繼續在functions.php內搜索關鍵詞function themeInit

    如果有themeInit這個函數,則在themeInit這個函數內添加下面的代碼

    if ($archive->is('single')) {
        $archive->content = createCatalog($archive->content);
    }

    如果沒有themeInit這個函數,則在functions.php最后一行之前添加下面的代碼

    function themeInit($archive) {
        if ($archive->is('single')) {
            $archive->content = createCatalog($archive->content);
        }
    }

    3. 最后在需要輸出文章目錄的位置調用<?php getCatalog(); ?>即可

    這是通用的方法,具體到每個人使用時,可以根據自己的需求修改,不再贅述。

    除了給主題增加功能,希望這一篇Typecho教程也能幫助到您:

    Typecho教程 – 如何開啟偽靜態并隱藏index.php?

    給TA贊賞
    共{{data.count}}人
    人已贊賞
    ??
    Npcink上的部份代碼及教程來源于互聯網,僅供網友學習交流,若您喜歡本文可附上原文鏈接隨意轉載。
    無意侵害您的權益,請發送郵件至 1355471563#qq.com 或點擊右側 私信:Muze 反饋,我們將盡快處理。
    ?
    購物車
    優惠劵
    搜索
    主站蜘蛛池模板: 日韩免费一区二区三区在线播放| 色婷婷AV一区二区三区浪潮| 国产一区二区三区小向美奈子| 亚洲乱码国产一区网址| 丰满人妻一区二区三区免费视频| 亚洲熟妇av一区二区三区| 亚洲中文字幕久久久一区| 亚洲一区无码中文字幕| 国产主播在线一区| 日韩精品无码一区二区三区| 亚洲一区二区高清| 精品中文字幕一区二区三区四区| 一区二区三区四区免费视频| 国产成人精品无码一区二区| 成人免费一区二区三区| 亚洲av无码天堂一区二区三区 | 国产精品一区二区三区久久 | 久久精品一区二区三区不卡| 久久综合精品国产一区二区三区| 无码国产精品一区二区高潮 | 少妇无码一区二区三区| 久久91精品国产一区二区| 久久久久99人妻一区二区三区| 中文字幕一区二区三区免费视频| 在线观看精品一区| 一区二区无码免费视频网站| 亚洲另类无码一区二区三区| 亚拍精品一区二区三区| 亚洲av无码一区二区三区四区 | 成人午夜视频精品一区| 色综合视频一区二区三区| 久久精品无码一区二区日韩AV | 麻豆AV一区二区三区久久| 亚洲福利视频一区| 亚洲综合av一区二区三区| 国产精品综合一区二区| 国产乱码精品一区二区三区四川| 国产成人无码精品一区不卡| 日本中文一区二区三区亚洲| 久久精品无码一区二区app| 国产AV午夜精品一区二区入口|