目錄
Table of Contents Settings
首頁 CMS教程 &#&按 如何開發一個自動產生目錄樹的WordPress插件

如何開發一個自動產生目錄樹的WordPress插件

Sep 06, 2023 am 09:55 AM
wordpress外掛開發 (外掛程式開發)

如何開發一個自動產生目錄樹的WordPress插件

如何開發一個自動產生目錄樹的WordPress外掛程式

隨著WordPress網站的不斷發展,網站內容的規模也越來越龐大。對於讀者來說,能夠快速導航和瀏覽網站的內容是非常重要的。目錄樹是一個非常實用的功能,可以幫助讀者快速定位並瀏覽網站的不同部分。本文將教你如何開發一個自動產生目錄樹的WordPress外掛。

在開始開發外掛程式之前,我們需要先了解WordPress外掛的基本結構和原理。一個WordPress外掛程式由一個主要的外掛程式資料夾和一個或多個功能文件組成。主要資料夾包含插件的主要檔案(通常是一個PHP檔案)和其他所需的檔案(如CSS和JavaScript檔案)。功能檔案則包含實作插件特定功能的程式碼。接下來,我們將一步一步建立一個自動產生目錄樹的WordPress外掛。

第一步:建立外掛程式基本結構
首先,我們需要建立一個資料夾,作為我們外掛程式的主資料夾。給它一個有意義的名字,例如"table-of-contents"。在這個資料夾中,我們將建立一個名為"table-of-contents.php"的主要外掛程式檔案。

打開"table-of-contents.php"文件,並添加以下程式碼到文件中:

<?php
/**
 * Plugin Name: Table of Contents
 * Description: Automatically generates a table of contents for your WordPress posts and pages.
 * Version: 1.0.0
 * Author: Your Name
 * License: GPL2
 */

// 插件代码将在这里添加
?>
登入後複製

在上述程式碼中,我們定義了插件的基本信息,如名稱、描述、版本、作者和許可證。

第二步:新增外掛設定頁面
現在,我們需要為外掛程式新增一個設定頁面,用於選擇要在哪些頁面或文章中顯示目錄樹。在"table-of-contents.php"檔案中,加入以下程式碼:

// 激活插件时添加设置菜单
function toc_add_settings_menu() {
  add_options_page( 'Table of Contents Settings', 'Table of Contents', 'manage_options', 'table-of-contents-settings', 'toc_render_settings_page' );
}
add_action( 'admin_menu', 'toc_add_settings_menu' );

// 渲染设置页面
function toc_render_settings_page() {
  ?>
  <div class="wrap">
    <h1 id="Table-of-Contents-Settings">Table of Contents Settings</h1>
    <form method="post" action="options.php">
      <?php settings_fields( 'toc_settings_group' ); ?>
      <?php do_settings_sections( 'toc_settings_page' ); ?>
      <?php submit_button(); ?>
    </form>
  </div>
  <?php
}
登入後複製

在上述程式碼中,我們使用WordPress提供的函數add_options_page()建立了一個設定頁面,並將其連結新增至WordPress後台的"設定"選單中。我們也建立了一個用於渲染設定頁面內容的函數toc_render_settings_page()

第三步:新增設定欄位和儲存功能
在上一個步驟中,我們建立了一個設定頁面,但頁面上還沒有任何設定欄位。接下來,我們將新增一個多選框字段,用於選擇要在哪些頁面或文章中顯示目錄樹。在"table-of-contents.php"檔案中,加入以下程式碼:

// 注册设置字段
function toc_register_settings() {
  register_setting( 'toc_settings_group', 'toc_display_options' );
  add_settings_section( 'toc_general_section', 'General Settings', 'toc_general_section_callback', 'toc_settings_page' );
  add_settings_field( 'toc_display_options_field', 'Display Options', 'toc_display_options_field_callback', 'toc_settings_page', 'toc_general_section' );
}
add_action( 'admin_init', 'toc_register_settings' );

// 渲染字段
function toc_display_options_field_callback() {
  $options = get_option( 'toc_display_options' );
  $pages = get_pages();
  foreach ( $pages as $page ) {
    $checked = isset( $options[$page->ID] ) ? checked( $options[$page->ID], $page->post_title, false ) : '';
    echo '<input type="checkbox" name="toc_display_options[' . $page->ID . ']" value="' . esc_attr( $page->post_title ) . '" ' . $checked . '> ' . esc_html( $page->post_title ) . '<br>';
  }
}

// 保存设置
function toc_save_settings() {
  if ( isset( $_POST['toc_display_options'] ) ) {
    $options = array();
    foreach ( $_POST['toc_display_options'] as $page_id => $title ) {
      $options[$page_id] = $title;
    }
    update_option( 'toc_display_options', $options );
  }
}
add_action( 'admin_post_save_toc_settings', 'toc_save_settings' );
登入後複製

上述程式碼中,我們使用了register_setting()函數來註冊一個設定字段,使用add_settings_section()函數建立了一個設定欄位的群組,使用add_settings_field()函數建立了一個多選框欄位。

我們也定義了一個渲染設定欄位的回呼函數toc_display_options_field_callback(),該函數將所有頁面顯示為多選框欄位。我們也定義了一個儲存設定的函數toc_save_settings(),在該函數中,我們使用update_option()函數將使用者選擇的頁面儲存到WordPress資料庫中。

第四步:產生目錄樹
現在,我們已經設定了外掛程式的基本結構和設定頁面,接下來我們將加入生成目錄樹的功能。在"table-of-contents.php"檔案中,加入以下程式碼:

// 生成目录树
function toc_generate_toc() {
  $options = get_option( 'toc_display_options' );
  if ( $options ) {
    global $post;
    if ( isset( $options[$post->ID] ) ) {
      $content = apply_filters( 'the_content', $post->post_content );
      $pattern = "/<h([1-6])>(.*?)</h[1-6]>/";
      preg_match_all( $pattern, $content, $headings, PREG_SET_ORDER );
      $tree = array();
      foreach ( $headings as $heading ) {
        $level = intval( $heading[1] );
        $title = strip_tags( $heading[2] );
        $tree[] = array(
          'level' => $level,
          'title' => $title
        );
      }
      $toc_html = '<ul class="toc">';
      $current_level = 0;
      foreach ( $tree as $branch ) {
        if ( $branch['level'] == $current_level ) {
          $toc_html .= '</li><li>';
        } elseif ( $branch['level'] > $current_level ) {
          $toc_html .= '<ul>';
        } elseif ( $branch['level'] < $current_level ) {
          $toc_html .= '</li>';
          for ( $i = $branch['level']; $i < $current_level; $i++ ) {
            $toc_html .= '</ul></li>';
          }
          $toc_html .= '<li>';
        }
        $toc_html .= '<a href="#' . sanitize_title( $branch['title'] ) . '">' . esc_html( $branch['title'] ) . '</a>';
        $current_level = $branch['level'];
      }
      $toc_html .= '</li>';
      for ( $i = $current_level; $i > 0; $i-- ) {
        $toc_html .= '</ul></li>';
      }
      $toc_html .= '</ul>';
      return $toc_html;
    }
  }
}
add_shortcode( 'table_of_contents', 'toc_generate_toc' );
登入後複製

在上述程式碼中,我們首先取得使用者選擇的頁面,並根據這些頁面的內容產生目錄樹。我們使用了正規表示式來匹配頁面中的標題標籤,並將匹配到的標題儲存在一個陣列中。之後,我們使用循環將這些標題按層級和順序組織成目錄樹。

我們也使用了一個短程式碼[table_of_contents]來呼叫toc_generate_toc()函數,並將產生的目錄樹傳回為內容。

第五步:新增樣式和腳本
為了讓目錄樹有更好的外觀和互動效果,我們需要加入一些樣式和腳本。在"table-of-contents.php"檔案中,加入以下程式碼:

// 添加样式和脚本
function toc_enqueue_scripts() {
  wp_enqueue_style( 'toc-style', plugins_url( 'css/style.css', __FILE__ ) );
  wp_enqueue_script( 'toc-script', plugins_url( 'js/script.js', __FILE__ ), array( 'jquery' ), '1.0.0', true );
}
add_action( 'wp_enqueue_scripts', 'toc_enqueue_scripts' );
登入後複製

在上述程式碼中,我們使用了WordPress提供的函數wp_enqueue_style()wp_enqueue_script ()來載入外掛程式所需的樣式表和腳本檔。注意,我們需要將樣式表和腳本檔案放在外掛程式資料夾的"css"和"js"子資料夾中,並為它們添加相應的檔案名稱。

第六步:將目錄樹加入頁面或文章中
最後一步是將產生的目錄樹加入要顯示目錄樹的頁面或文章中。編輯頁面或文章時,你可以使用短代碼[table_of_contents]將目錄樹插入到頁面的任意位置。請在"table-of-contents.php"檔案中新增以下程式碼:

<!-- 在编辑器中显示目录树短代码按钮 -->
<script>
  function add_toc_shortcode_button() {
    if ( typeof wp !== 'undefined' && wp.hasOwnProperty( 'shortcode' ) ) {
      wp.mce = wp.mce || {};
      wp.mce.tinymce = wp.mce.tinymce || {};
      wp.mce.views = wp.mce.views || {};

      wp.mce.tinymce.Template = Backbone.Marionette.ItemView.extend({});

      $( document ).on( 'click', 'a.add-toc-shortcode', function(e) {
        e.preventDefault();
        wp.mce.views.getParentWindow().send_to_editor('[table_of_contents]');
      });
    }
  }
  $(document).ready(function() {
    add_toc_shortcode_button();
  });
</script>
登入後複製

上述程式碼中,我們使用JavaScript程式碼為編輯器新增一個按鈕,可以快速插入[table_of_contents] 短代碼到編輯器中。

透過以上六個步驟,我們已經開發了一個自動產生目錄樹的WordPress外掛。你可以根據自己的需求對插件進行進一步的修改和最佳化。希望這篇文章對你有幫助,祝你開發順利!

以上是如何開發一個自動產生目錄樹的WordPress插件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

對於初學者來說,WordPress容易嗎? 對於初學者來說,WordPress容易嗎? Apr 03, 2025 am 12:02 AM

WordPress對初學者來說容易上手。 1.登錄後台後,用戶界面直觀,簡潔的儀表板提供所有必要功能鏈接。 2.基本操作包括創建和編輯內容,所見即所得的編輯器簡化了內容創建。 3.初學者可以通過插件和主題擴展網站功能,學習曲線存在但可以通過實踐掌握。

WordPress有什麼用? WordPress有什麼用? Apr 07, 2025 am 12:06 AM

wordpressgood forvortalyanewebprojectDuetoItsAsatilityAsacms.itexcelsin:1)用戶友好性,允許Aeserywebsitesetup; 2)sexibility andcustomized andcustomization and numerthemesandplugins; 3)seoop timigimization; and4)and4)

我可以在3天內學習WordPress嗎? 我可以在3天內學習WordPress嗎? Apr 09, 2025 am 12:16 AM

能在三天內學會WordPress。 1.掌握基礎知識,如主題、插件等。 2.理解核心功能,包括安裝和工作原理。 3.通過示例學習基本和高級用法。 4.了解調試技巧和性能優化建議。

我應該使用Wix或WordPress嗎? 我應該使用Wix或WordPress嗎? Apr 06, 2025 am 12:11 AM

Wix適合沒有編程經驗的用戶,WordPress適合希望有更多控制和擴展能力的用戶。 1)Wix提供拖放式編輯器和豐富模板,易於快速搭建網站。 2)WordPress作為開源CMS,擁有龐大社區和插件生態,支持深度自定義和擴展。

WordPress的成本是多少? WordPress的成本是多少? Apr 05, 2025 am 12:13 AM

WordPress本身免費,但使用需額外費用:1.WordPress.com提供從免費到付費的套餐,價格從每月幾美元到幾十美元不等;2.WordPress.org需購買域名(每年10-20美元)和託管服務(每月5-50美元);3.插件和主題多數免費,付費的價格在幾十到幾百美元之間;通過選擇合適的託管服務、合理使用插件和主題、定期維護和優化,可以有效控制和優化WordPress的成本。

為什麼有人會使用WordPress? 為什麼有人會使用WordPress? Apr 02, 2025 pm 02:57 PM

人們選擇使用WordPress是因為其強大和靈活性。 1)WordPress是一個開源的CMS,易用性和可擴展性強,適合各種網站需求。 2)它有豐富的主題和插件,生態系統龐大,社區支持強大。 3)WordPress的工作原理基於主題、插件和核心功能,使用PHP和MySQL處理數據,支持性能優化。

WordPress是CMS嗎? WordPress是CMS嗎? Apr 08, 2025 am 12:02 AM

WordPress是內容管理系統(CMS)。它提供內容管理、用戶管理、主題和插件功能,支持創建和管理網站內容。其工作原理包括數據庫管理、模板系統和插件架構,適用於從博客到企業網站的各種需求。

WordPress仍然免費嗎? WordPress仍然免費嗎? Apr 04, 2025 am 12:06 AM

WordPress核心版本是免費的,但使用過程中可能產生其他費用。 1.域名和託管服務需要付費。 2.高級主題和插件可能需要付費。 3.專業服務和高級功能可能需要付費。

See all articles