/** * Plugin Name: 饭饭肚肚饿饿小程序 * Plugin URI: https://www.zhizhuosama.com/ * Description: 饭饭肚肚饿饿微信小程序后端 API 支持 * Version: 1.0.1 * Author: 執著 * Author URI: https://www.zhizhuosama.com/ * License: GPL v2 or later * License URI: https://www.gnu.org/licenses/gpl-2.0.html * Text Domain: ffddee-miniapp * Domain Path: /languages */ if (!defined('ABSPATH')) { exit; } define('FFDEE_VERSION', '1.0.1'); define('FFDEE_PLUGIN_DIR', plugin_dir_path(__FILE__)); define('FFDEE_PLUGIN_URL', plugin_dir_url(__FILE__)); class FFDEE_MiniApp { public function __construct() { register_activation_hook(__FILE__, array($this, 'activate')); register_deactivation_hook(__FILE__, array($this, 'deactivate')); add_action('init', array($this, 'register_rest_routes')); add_action('admin_menu', array($this, 'add_admin_menu')); add_action('wp_enqueue_scripts', array($this, 'enqueue_scripts')); add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_scripts')); } // 激活插件 public function activate() { global $wpdb; $charset_collate = $wpdb->get_charset_collate(); // 创建订单表 $orders_table = $wpdb->prefix . 'ffddee_orders'; $sql_orders = "CREATE TABLE IF NOT EXISTS $orders_table ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, order_id VARCHAR(50) NOT NULL UNIQUE, user_id BIGINT UNSIGNED NOT NULL, total_price DECIMAL(10, 2) NOT NULL, status VARCHAR(20) NOT NULL DEFAULT 'pending', items LONGTEXT NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX (user_id), INDEX (status), INDEX (created_at) ) $charset_collate;"; // 创建用户表 $users_table = $wpdb->prefix . 'ffddee_users'; $sql_users = "CREATE TABLE IF NOT EXISTS $users_table ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, openid VARCHAR(100) NOT NULL UNIQUE, phone VARCHAR(20), nickname VARCHAR(100), avatar_url LONGTEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX (phone) ) $charset_collate;"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql_orders); dbDelta($sql_users); } // 停用插件 public function deactivate() { // 清理资源 } // 注册 REST 路由 public function register_rest_routes() { // 订单相关 register_rest_route('ffddee/v1', '/orders', array( 'methods' => 'POST', 'callback' => array($this, 'create_order'), 'permission_callback' => '__return_true' )); register_rest_route('ffddee/v1', '/orders/(?P\d+)', array( 'methods' => 'GET', 'callback' => array($this, 'get_order'), 'permission_callback' => '__return_true' )); register_rest_route('ffddee/v1', '/orders/(?P\d+)', array( 'methods' => 'PUT', 'callback' => array($this, 'update_order'), 'permission_callback' => '__return_true' )); // 用户相关 register_rest_route('ffddee/v1', '/users', array( 'methods' => 'POST', 'callback' => array($this, 'create_user'), 'permission_callback' => '__return_true' )); register_rest_route('ffddee/v1', '/users/(?P[^/]+)', array( 'methods' => 'GET', 'callback' => array($this, 'get_user'), 'permission_callback' => '__return_true' )); register_rest_route('ffddee/v1', '/users/(?P[^/]+)', array( 'methods' => 'PUT', 'callback' => array($this, 'update_user'), 'permission_callback' => '__return_true' )); } // 创建订单 public function create_order($request) { global $wpdb; $params = $request->get_json_params(); $order_data = array( 'order_id' => sanitize_text_field($params['order_id']), 'user_id' => intval($params['user_id']), 'total_price' => floatval($params['total_price']), 'status' => 'pending', 'items' => json_encode($params['items']), ); $table = $wpdb->prefix . 'ffddee_orders'; $inserted = $wpdb->insert($table, $order_data); if ($inserted) { return new WP_REST_Response(array('success' => true, 'id' => $wpdb->insert_id), 200); } return new WP_REST_Response(array('success' => false), 400); } // 获取订单 public function get_order($request) { global $wpdb; $order_id = $request['order_id']; $table = $wpdb->prefix . 'ffddee_orders'; $result = $wpdb->get_row($wpdb->prepare("SELECT * FROM $table WHERE id = %d", $order_id)); if ($result) { $result->items = json_decode($result->items); return new WP_REST_Response($result, 200); } return new WP_REST_Response(array('error' => '订单不存在'), 404); } // 更新订单 public function update_order($request) { global $wpdb; $order_id = $request['order_id']; $params = $request->get_json_params(); $table = $wpdb->prefix . 'ffddee_orders'; $updated = $wpdb->update($table, array('status' => $params['status']), array('id' => $order_id)); if ($updated !== false) { return new WP_REST_Response(array('success' => true), 200); } return new WP_REST_Response(array('success' => false), 400); } // 创建用户 public function create_user($request) { global $wpdb; $params = $request->get_json_params(); $user_data = array( 'openid' => sanitize_text_field($params['openid']), 'phone' => isset($params['phone']) ? sanitize_text_field($params['phone']) : '', 'nickname' => isset($params['nickname']) ? sanitize_text_field($params['nickname']) : '', 'avatar_url' => isset($params['avatar_url']) ? esc_url_raw($params['avatar_url']) : '', ); $table = $wpdb->prefix . 'ffddee_users'; $inserted = $wpdb->insert($table, $user_data); if ($inserted) { return new WP_REST_Response(array('success' => true, 'id' => $wpdb->insert_id), 200); } return new WP_REST_Response(array('success' => false), 400); } // 获取用户 public function get_user($request) { global $wpdb; $openid = $request['openid']; $table = $wpdb->prefix . 'ffddee_users'; $result = $wpdb->get_row($wpdb->prepare("SELECT * FROM $table WHERE openid = %s", $openid)); if ($result) { return new WP_REST_Response($result, 200); } return new WP_REST_Response(array('error' => '用户不存在'), 404); } // 更新用户 public function update_user($request) { global $wpdb; $openid = $request['openid']; $params = $request->get_json_params(); $user_data = array(); if (isset($params['phone'])) { $user_data['phone'] = sanitize_text_field($params['phone']); } if (isset($params['nickname'])) { $user_data['nickname'] = sanitize_text_field($params['nickname']); } if (isset($params['avatar_url'])) { $user_data['avatar_url'] = esc_url_raw($params['avatar_url']); } $table = $wpdb->prefix . 'ffddee_users'; $updated = $wpdb->update($table, $user_data, array('openid' => $openid)); if ($updated !== false) { return new WP_REST_Response(array('success' => true), 200); } return new WP_REST_Response(array('success' => false), 400); } // 添加后台菜单 public function add_admin_menu() { add_menu_page( '饭饭肚肚饿饿', '饭饭肚肚饿饿', 'manage_options', 'ffddee-miniapp', array($this, 'admin_page'), 'assets/images/icons/執著_32500.png', 30 ); add_submenu_page( 'ffddee-miniapp', '仪表板', '仪表板', 'manage_options', 'ffddee-miniapp', array($this, 'admin_page') ); add_submenu_page( 'ffddee-miniapp', '订单管理', '订单管理', 'manage_options', 'ffddee-miniapp-orders', array($this, 'orders_page') ); add_submenu_page( 'ffddee-miniapp', '用户统计', '用户统计', 'manage_options', 'ffddee-miniapp-stats', array($this, 'stats_page') ); } // 后台主页面 public function admin_page() { if (file_exists(FFDEE_PLUGIN_DIR . 'admin/views/dashboard.php')) { include FFDEE_PLUGIN_DIR . 'admin/views/dashboard.php'; } else { echo '

饭饭肚肚饿饿小程序管理

欢迎使用饭饭肚肚饿饿小程序后端插件

'; } } // 订单页面 public function orders_page() { if (file_exists(FFDEE_PLUGIN_DIR . 'admin/views/orders.php')) { include FFDEE_PLUGIN_DIR . 'admin/views/orders.php'; } else { echo '

订单管理

订单管理页面

'; } } // 统计页面 public function stats_page() { if (file_exists(FFDEE_PLUGIN_DIR . 'admin/views/stats.php')) { include FFDEE_PLUGIN_DIR . 'admin/views/stats.php'; } else { echo '

用户统计

用户统计页面

'; } } // 前台脚本加载 public function enqueue_scripts() { // wp_enqueue_script('ffddee-app', FFDEE_PLUGIN_URL . 'assets/js/app.js', array(), FFDEE_VERSION); // wp_enqueue_style('ffddee-style', FFDEE_PLUGIN_URL . 'assets/css/style.css', array(), FFDEE_VERSION); } // 后台脚本加载 public function admin_enqueue_scripts() { wp_enqueue_script('ffddee-admin', FFDEE_PLUGIN_URL . 'admin/js/admin.js', array('jquery'), FFDEE_VERSION); wp_enqueue_style('ffddee-admin', FFDEE_PLUGIN_URL . 'admin/css/admin.css', array(), FFDEE_VERSION); } } // 初始化插件 $ffddee = new FFDEE_MiniApp();