立即注册 找回密码

QQ登录

只需一步,快速开始

查看: 1090|回复: 0

[Wordpress 通用教程] 开发一个自动生成目录树的WordPress插件的方法

[复制链接]
发表于 2023-11-20 09:27:38 | 显示全部楼层 |阅读模式
道勤网-数据www.daoqin.net

亲注册登录道勤网-可以查看更多帖子内容哦!(包涵精彩图片、文字详情等)请您及时注册登录-www.daoqin.net

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如何开发一个自动生成目录树的wordpress插件
随着WordPress网站的不断发展,网站内容的规模也越来越庞大。对于读者来说,能够快速导航和浏览网站的内容是非常重要的。目录树是一个非常实用的功能,可以帮助读者快速定位并浏览网站的不同部分。本文将教你如何开发一个自动生成目录树的WordPress插件。
在开始开发插件之前,我们需要了解一下WordPress插件的基本结构和原理。一个WordPress插件由一个主要的插件文件夹和一个或多个功能文件组成。主要文件夹包含插件的主要文件(通常是一个PHP文件)和其他所需的文件(如CSS和JavaScript文件)。功能文件则包含实现插件具体功能的代码。接下来,我们将一步一步地创建一个自动生成目录树的WordPress插件。
第一步:创建插件基本结构
首先,我们需要创建一个文件夹,作为我们插件的主文件夹。给它起一个有意义的名字,比如"table-of-contents"。在这个文件夹中,我们将创建一个名为"table-of-contents.php"的主要插件文件。
打开"table-of-contents.php"文件,并添加以下代码到文件中:
  1. <?php
  2. /**
  3. * Plugin Name: Table of Contents
  4. * Description: Automatically generates a table of contents for your WordPress posts and pages.
  5. * Version: 1.0.0
  6. * Author: Your Name
  7. * License: GPL2
  8. */

  9. // 插件代码将在这里添加
  10. ?>
复制代码
在上述代码中,我们定义了插件的基本信息,如名称、描述、版本、作者和许可证。
第二步:添加插件设置页面
现在,我们需要为插件添加一个设置页面,用于选择要在哪些页面或文章中显示目录树。在"table-of-contents.php"文件中,添加以下代码:
  1. // 激活插件时添加设置菜单
  2. function toc_add_settings_menu() {
  3.   add_options_page( 'Table of Contents Settings', 'Table of Contents', 'manage_options', 'table-of-contents-settings', 'toc_render_settings_page' );
  4. }
  5. add_action( 'admin_menu', 'toc_add_settings_menu' );

  6. // 渲染设置页面
  7. function toc_render_settings_page() {
  8.   ?>
  9.   <div class="wrap">
  10.     <h1>Table of Contents Settings</h1>
  11.     <form method="post" action="options.php">
  12.       <?php settings_fields( 'toc_settings_group' ); ?>
  13.       <?php do_settings_sections( 'toc_settings_page' ); ?>
  14.       <?php submit_button(); ?>
  15.     </form>
  16.   </div>
  17.   <?php
  18. }
复制代码
在上述代码中,我们使用WordPress提供的函数add_options_page()创建了一个设置页面,并将其链接添加到WordPress后台的"设置"菜单中。我们还创建了一个用于渲染设置页面内容的函数toc_render_settings_page()。
第三步:添加设置字段和保存功能
在上一步中,我们创建了一个设置页面,但页面上还没有任何设置字段。接下来,我们将添加一个多选框字段,用于选择要在哪些页面或文章中显示目录树。在"table-of-contents.php"文件中,添加以下代码:
  1. // 注册设置字段
  2. function toc_register_settings() {
  3.   register_setting( 'toc_settings_group', 'toc_display_options' );
  4.   add_settings_section( 'toc_general_section', 'General Settings', 'toc_general_section_callback', 'toc_settings_page' );
  5.   add_settings_field( 'toc_display_options_field', 'Display Options', 'toc_display_options_field_callback', 'toc_settings_page', 'toc_general_section' );
  6. }
  7. add_action( 'admin_init', 'toc_register_settings' );

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

  17. // 保存设置
  18. function toc_save_settings() {
  19.   if ( isset( $_POST['toc_display_options'] ) ) {
  20.     $options = array();
  21.     foreach ( $_POST['toc_display_options'] as $page_id => $title ) {
  22.       $options[$page_id] = $title;
  23.     }
  24.     update_option( 'toc_display_options', $options );
  25.   }
  26. }
  27. 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"文件中,添加以下代码:
  1. // 生成目录树
  2. function toc_generate_toc() {
  3.   $options = get_option( 'toc_display_options' );
  4.   if ( $options ) {
  5.     global $post;
  6.     if ( isset( $options[$post->ID] ) ) {
  7.       $content = apply_filters( 'the_content', $post->post_content );
  8.       $pattern = "/<h([1-6])>(.*?)</h[1-6]>/";
  9.       preg_match_all( $pattern, $content, $headings, PREG_SET_ORDER );
  10.       $tree = array();
  11.       foreach ( $headings as $heading ) {
  12.         $level = intval( $heading[1] );
  13.         $title = strip_tags( $heading[2] );
  14.         $tree[] = array(
  15.           'level' => $level,
  16.           'title' => $title
  17.         );
  18.       }
  19.       $toc_html = '<ul class="toc">';
  20.       $current_level = 0;
  21.       foreach ( $tree as $branch ) {
  22.         if ( $branch['level'] == $current_level ) {
  23.           $toc_html .= '</li><li>';
  24.         } elseif ( $branch['level'] > $current_level ) {
  25.           $toc_html .= '<ul>';
  26.         } elseif ( $branch['level'] < $current_level ) {
  27.           $toc_html .= '</li>';
  28.           for ( $i = $branch['level']; $i < $current_level; $i++ ) {
  29.             $toc_html .= '</ul></li>';
  30.           }
  31.           $toc_html .= '<li>';
  32.         }
  33.         $toc_html .= '<a href="#' . sanitize_title( $branch['title'] ) . '">' . esc_html( $branch['title'] ) . '</a>';
  34.         $current_level = $branch['level'];
  35.       }
  36.       $toc_html .= '</li>';
  37.       for ( $i = $current_level; $i > 0; $i-- ) {
  38.         $toc_html .= '</ul></li>';
  39.       }
  40.       $toc_html .= '</ul>';
  41.       return $toc_html;
  42.     }
  43.   }
  44. }
  45. add_shortcode( 'table_of_contents', 'toc_generate_toc' );
复制代码
在上述代码中,我们首先获取用户选择的页面,并根据这些页面的内容生成目录树。我们使用了正则表达式来匹配页面中的标题标签,并将匹配到的标题存储在一个数组中。之后,我们使用循环将这些标题按层级和顺序组织成目录树。
我们还使用了一个短代码[table_of_contents]来调用toc_generate_toc()函数,并将生成的目录树作为内容返回。
第五步:添加样式和脚本
为了让目录树具有更好的外观和交互效果,我们需要添加一些样式和脚本。在"table-of-contents.php"文件中,添加以下代码:
  1. // 添加样式和脚本
  2. function toc_enqueue_scripts() {
  3.   wp_enqueue_style( 'toc-style', plugins_url( 'css/style.css', __FILE__ ) );
  4.   wp_enqueue_script( 'toc-script', plugins_url( 'js/script.js', __FILE__ ), array( 'jquery' ), '1.0.0', true );
  5. }
  6. add_action( 'wp_enqueue_scripts', 'toc_enqueue_scripts' );
复制代码
在上述代码中,我们使用了WordPress提供的函数wp_enqueue_style()和wp_enqueue_script()来加载插件所需的样式表和脚本文件。注意,我们需要将样式表和脚本文件放在插件文件夹的"css"和"js"子文件夹中,并为它们添加相应的文件名。
第六步:将目录树添加到页面或文章中
最后一步是将生成的目录树添加到要显示目录树的页面或文章中。在编辑页面或文章时,你可以使用短代码[table_of_contents]将目录树插入到页面的任意位置。请在"table-of-contents.php"文件中添加以下代码:
  1. <!-- 在编辑器中显示目录树短代码按钮 -->
  2. <script>
  3.   function add_toc_shortcode_button() {
  4.     if ( typeof wp !== 'undefined' && wp.hasOwnProperty( 'shortcode' ) ) {
  5.       wp.mce = wp.mce || {};
  6.       wp.mce.tinymce = wp.mce.tinymce || {};
  7.       wp.mce.views = wp.mce.views || {};

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

  9.       $( document ).on( 'click', 'a.add-toc-shortcode', function(e) {
  10.         e.preventDefault();
  11.         wp.mce.views.getParentWindow().send_to_editor('[table_of_contents]');
  12.       });
  13.     }
  14.   }
  15.   $(document).ready(function() {
  16.     add_toc_shortcode_button();
  17.   });
  18. </script>
复制代码
上述代码中,我们使用JavaScript代码为编辑器添加一个按钮,该按钮可以快速插入[table_of_contents]短代码到编辑器中。
通过以上六个步骤,我们已经开发出了一个自动生成目录树的WordPress插件。你可以根据自己的需求对插件进行进一步的修改和优化。希望这篇文章对你有所帮助,

道勤主机提供365天*24小时全年全天无休、实时在线、零等待的售后技术支持。竭力为您免费处理您在使用道勤主机过程中所遇到的一切问题! 如果您是道勤主机用户,那么您可以通过QQ【792472177】、售后QQ【59133755】、旺旺【诠释意念】、微信:q792472177免费电话、后台提交工单这些方式联系道勤主机客服! 如果您不是我们的客户也没问题,点击页面最右边的企业QQ在线咨询图标联系我们并购买后,我们为您免费进行无缝搬家服务,让您享受网站零访问延迟的迁移到道勤主机的服务!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

道勤网- 推荐内容!上一条 /2 下一条

!jz_fbzt! !jz_sgzt! !jz_xgzt! 快速回复 !jz_fhlb! !jz_lxwm! !jz_gfqqq!

关于我们|手机版|小黑屋|地图|【道勤网】-www.daoqin.net 软件视频自学教程|免费教程|自学电脑|3D教程|平面教程|影视动画教程|办公教程|机械设计教程|网站设计教程【道勤网】 ( 皖ICP备15000319号-1 )

GMT+8, 2024-5-8 08:40

Powered by DaoQin! X3.4 © 2016-2063 Dao Qin & 道勤科技

快速回复 返回顶部 返回列表