步骤 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 后台添加一个管理界面,用于插入和管理自定义数据。
-
在你的主题的
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 '
'; } else { $wpdb->insert($table_name, array( 'title' => $_POST['title'], 'content' => $_POST['content'] )); echo 'Data updated!
'; } } // 处理删除请求 if (isset($_GET['action']) && $_GET['action'] == 'delete' && isset($_GET['id'])) { $wpdb->delete($table_name, array('id' => $_GET['id'])); echo 'Data inserted!
'; } // 获取所有数据 $results = $wpdb->get_results("SELECT * FROM $table_name"); // 显示数据列表 ?>Data deleted!
步骤 3:使用 WP_List_Table 类创建自定义列表页面
为了使列表页面具有分页功能,并使用 WordPress 的内置表样式,我们将使用 WP_List_Table 类。
-
创建一个新的 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()) { // 处理批量删除动作 } } }
-
在你的主题的
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
步骤 4:自定义路由和输出数据
-
在你的主题的
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; } }
-
创建一个新的模板文件
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 中创建和管理自定义数据表,并在前端按自定义路由输出数据。总结如下:
-
创建数据库表:使用 SQL 查询在数据库中创建一个自定义表。
-
添加管理界面:在 WordPress 后台添加一个页面,用于插入和管理自定义数据。
-
使用 WP_List_Table 类创建自定义列表页面:添加分页功能,并使用 WordPress 的内置表样式。
-
自定义路由和输出数据:在前端显示自定义表中的数据。