在 WordPress 中创建自定义表并自定义路由和管理页面

步骤 1:创建数据库表

首先,使用适当的 SQL 查询在你的 WordPress 数据库中创建一个自定义表。例如:

CREATE TABLE wp_custom_data (
    id BIGINT(20) NOT NULL AUTO_INCREMENT,
    title VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    PRIMARY KEY (id)
);

步骤 2:添加管理界面

接下来,我们需要在 WordPress 后台添加一个管理界面,用于插入和管理自定义数据。

  1. 在你的主题的 functions.php 文件中添加以下代码:

    add_action('admin_menu', 'custom_data_menu');
    function custom_data_menu() {
        add_menu_page('Custom Data', 'Custom Data', 'manage_options', 'custom-data', 'custom_data_page');
    }
    
    function custom_data_page() {
        global $wpdb;
        $table_name = $wpdb->prefix . 'custom_data';
    
        // 处理表单提交(插入和更新)
        if (isset($_POST['submit'])) {
            if (isset($_POST['id']) && $_POST['id'] != '') {
                $wpdb->update($table_name, array(
                    'title' => $_POST['title'],
                    'content' => $_POST['content']
                ), array('id' => $_POST['id']));
                echo '

    Data updated!

    '; } else { $wpdb->insert($table_name, array( 'title' => $_POST['title'], 'content' => $_POST['content'] )); echo '

    Data inserted!

    '; } } // 处理删除请求 if (isset($_GET['action']) && $_GET['action'] == 'delete' && isset($_GET['id'])) { $wpdb->delete($table_name, array('id' => $_GET['id'])); echo '

    Data deleted!

    '; } // 获取所有数据 $results = $wpdb->get_results("SELECT * FROM $table_name"); // 显示数据列表 ?>

    Custom Data

    ID Title Content Actions
    id); ?> title); ?> content); ?> Edit | Delete
    get_row($wpdb->prepare("SELECT * FROM $table_name WHERE id = %d", $_GET['id'])); $id = $row->id; $title = $row->title; $content = $row->content; } ?>



步骤 3:使用 WP_List_Table 类创建自定义列表页面

为了使列表页面具有分页功能,并使用 WordPress 的内置表样式,我们将使用 WP_List_Table 类。

  1. 创建一个新的 PHP 文件 class-custom-data-list-table.php,并添加以下代码:

    if (!class_exists('WP_List_Table')) {
        require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
    }
    
    class Custom_Data_List_Table extends WP_List_Table {
        public function __construct() {
            parent::__construct(array(
                'singular' => __('Custom Data', 'sp'), // 单数形式
                'plural' => __('Custom Data', 'sp'), // 复数形式
                'ajax' => false // 是否支持AJAX
            ));
        }
    
        public function get_columns() {
            $columns = array(
                'cb' => '',
                'title' => __('Title', 'sp'),
                'content' => __('Content', 'sp')
            );
            return $columns;
        }
    
        public function prepare_items() {
            global $wpdb;
            $table_name = $wpdb->prefix . 'custom_data';
    
            $per_page = 10; // 每页显示的数据条数
            $current_page = $this->get_pagenum();
            $total_items = $wpdb->get_var("SELECT COUNT(id) FROM $table_name");
    
            $this->set_pagination_args(array(
                'total_items' => $total_items,
                'per_page' => $per_page
            ));
    
            $query = $wpdb->prepare("SELECT * FROM $table_name LIMIT %d OFFSET %d", $per_page, ($current_page - 1) * $per_page);
            $data = $wpdb->get_results($query, ARRAY_A);
    
            $columns = $this->get_columns();
            $hidden = array();
            $sortable = array();
            $this->_column_headers = array($columns, $hidden, $sortable);
    
            $this->items = $data;
        }
    
        public function column_default($item, $column_name) {
            switch ($column_name) {
                case 'title':
                case 'content':
                    return $item[$column_name];
                default:
                    return print_r($item, true);
            }
        }
    
        public function column_cb($item) {
            return sprintf('', $item['id']);
        }
    
        public function get_bulk_actions() {
            $actions = array(
                'delete' => 'Delete'
            );
            return $actions;
        }
    
        public function process_bulk_action() {
            if ('delete' === $this->current_action()) {
                // 处理批量删除动作
            }
        }
    }
  2. 在你的主题的 functions.php 文件中更新 custom_data_page 函数以使用 Custom_Data_List_Table 类:

    add_action('admin_menu', 'custom_data_menu');
    function custom_data_menu() {
        add_menu_page('Custom Data', 'Custom Data', 'manage_options', 'custom-data', 'custom_data_page');
    }
    
    function custom_data_page() {
        global $wpdb;
        $table_name = $wpdb->prefix . 'custom_data';
    
        // 引入自定义列表类
        require_once plugin_dir_path(__FILE__) . 'class-custom-data-list-table.php';
    
        // 创建自定义列表实例
        $custom_list_table = new Custom_Data_List_Table();
        $custom_list_table->prepare_items();
    
        // 显示数据列表
        ?>
        

    Custom Data

    display(); ?>

步骤 4:自定义路由和输出数据

  1. 在你的主题的 functions.php 文件中添加以下代码:

    add_action('init', 'custom_rewrite_rule');
    function custom_rewrite_rule() {
        add_rewrite_rule('^custom-data/', 'index.php?custom-data=1', 'top');
    }
    
    add_filter('query_vars', 'custom_query_vars');
    function custom_query_vars($vars) {
        $vars[] = 'custom-data';
        return $vars;
    }
    
    add_action('template_redirect', 'custom_template_redirect');
    function custom_template_redirect() {
        if (get_query_var('custom-data')) {
            include(get_template_directory() . '/custom-data.php');
            exit;
        }
    }
  2. 创建一个新的模板文件 custom-data.php,并添加以下代码,以在前端输出数据:

    prefix . 'custom_data';
    $results = $wpdb->get_results("SELECT * FROM $table_name");
    
    if ($results) {
        foreach ($results as $row) {
            echo '

    ' . esc_html($row->title) . '

    '; echo '

    ' . esc_html($row->content) . '

    '; } } else { echo '

    No data found.

    '; } get_footer(); ?>

以上是一个完整的步骤指南,用于在 WordPress 中创建和管理自定义数据表,并在前端按自定义路由输出数据。总结如下:

  1. 创建数据库表:使用 SQL 查询在数据库中创建一个自定义表。

  2. 添加管理界面:在 WordPress 后台添加一个页面,用于插入和管理自定义数据。

  3. 使用 WP_List_Table 类创建自定义列表页面:添加分页功能,并使用 WordPress 的内置表样式。

  4. 自定义路由和输出数据:在前端显示自定义表中的数据。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
Theme Argon By solstice23