美工学习 发表于 2023-12-4 20:38:55

如何开发一个自动生成目录树的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>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
}上述代码中,我们使用了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()>(.*?)</h>/";
      preg_match_all( $pattern, $content, $headings, PREG_SET_ORDER );
      $tree = array();
      foreach ( $headings as $heading ) {
      $level = intval( $heading );
      $title = strip_tags( $heading );
      $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' );在上述代码中,我们首先获取用户选择的页面,并根据这些页面的内容生成目录树。我们使用了正则表达式来匹配页面中的标题标签,并将匹配到的标题存储在一个数组中。之后,我们使用循环将这些标题按层级和顺序组织成目录树。我们还使用了一个短代码来调用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.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('');
      });
    }
}
$(document).ready(function() {
    add_toc_shortcode_button();
});
</script>上述代码中,我们使用JavaScript代码为编辑器添加一个按钮,该按钮可以快速插入短代码到编辑器中。通过以上六个步骤,我们已经开发出了一个自动生成目录树的WordPress插件。你可以根据自己的需求对插件进行进一步的修改和优化。希望这篇文章对你有所帮助,祝你开发顺利!
页: [1]
查看完整版本: 如何开发一个自动生成目录树的WordPress插件的方法