步骤 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 的内置表样式。
-
自定义路由和输出数据:在前端显示自定义表中的数据。