refactor: rename the theme brand and every identifier from AKSRT to Jio
Full-project rename. `git grep -i aksrt` is now empty apart from the
DBMigrator 3.3.0 changelog note that documents the rename itself.
Code identifiers
- PHP namespace AKSRT\ -> Jio\ (composer PSR-4 + 378 declarations)
- global constants AKSRT_* -> JIO_* (VERSION/DIR/URI, PAY_TYPE_*, CAPTCHA_*)
- procedural functions, hooks, options, meta keys, table names,
cookies, query vars, ajax actions and nonces: aksrt_ -> jio_
- text domain aksrt -> jio; Theme Name -> Jio
- JS globals: aksrtData/aksrtAdminData/... -> jioData/jioAdminData/...,
window.AKSRTCaptcha & friends -> window.JioCaptcha, Aksrt* -> Jio*
- Vue components Aks*.vue -> Jio*.vue (15 files renamed + imports)
- CSS classes/data-attrs/custom properties: aksrt- -> jio-
- REST namespace aksrt/v1 -> jio/v1 (incl. payment gateway callbacks)
Storage layer
- DB tables {prefix}aksrt_* -> {prefix}jio_*; SCHEMA_VERSION 3.2.0 -> 3.3.0
so dbDelta creates the new names on install
- widget id_base aksrt_widget_* -> jio_widget_*
- uninstall.php drop list rebuilt from the actual migrator tables
(dropped 3 stale entries, added the 17 missing ones)
Removed
- hardcoded https://api.aksrt.com/version.json default update endpoint;
get_endpoint() now reads the 「更新端点」 setting and do_check() no-ops
when it is empty
Files renamed: inc/helpers/aksrt-*.php -> jio-*.php (54),
assets/admin/src/components/form/Aks*.vue -> Jio*.vue (15).
Build artifacts regenerated: assets/css/build, assets/js/runtime,
assets/admin/build.
Verified: audit-psr4-paths errors=0, audit-admin-contracts errors=0
(warnings=56, unchanged baseline), 813/813 widget-system tests,
44/44 phpunit, php -l clean across all PHP.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
5b16bc6e15
commit
35bb96e82f
997 files changed
+28216
-28188
No files matched your search
@@ -6,12 +6,12 @@
|
||||
* PSR-4 要求与宿主类同目录);这里保留入口、admin-post 处理器与两个视图共用的展示助手。
|
||||
* 页面样式在 assets/css/admin/orders.css,危险操作确认在 assets/js/admin-orders.js。
|
||||
*
|
||||
* @package AKSRT
|
||||
* @package Jio
|
||||
*/
|
||||
|
||||
namespace AKSRT\Admin\Native;
|
||||
namespace Jio\Admin\Native;
|
||||
|
||||
use AKSRT\Core\DomainModel;
|
||||
use Jio\Core\DomainModel;
|
||||
|
||||
defined('ABSPATH') || exit;
|
||||
|
||||
@@ -21,7 +21,7 @@ class PayOrders {
|
||||
use PayOrdersDetail;
|
||||
|
||||
public const CAPABILITY = 'manage_options';
|
||||
public const PAGE_SLUG = 'aksrt_orders';
|
||||
public const PAGE_SLUG = 'jio_orders';
|
||||
|
||||
private static $instance = null;
|
||||
|
||||
@@ -40,11 +40,11 @@ class PayOrders {
|
||||
return;
|
||||
}
|
||||
add_action('admin_enqueue_scripts', [$this, 'enqueue_assets']);
|
||||
add_action('admin_post_aksrt_pay_update_order_status', [$this, 'handle_update_order_status']);
|
||||
add_action('admin_post_aksrt_pay_update_order_note', [$this, 'handle_update_order_note']);
|
||||
add_action('admin_post_aksrt_pay_clear_closed_orders', [$this, 'handle_clear_closed_orders']);
|
||||
add_action('admin_post_aksrt_pay_delete_order', [$this, 'handle_delete_order']);
|
||||
add_action('admin_post_aksrt_pay_refund_order', [$this, 'handle_refund_order']);
|
||||
add_action('admin_post_jio_pay_update_order_status', [$this, 'handle_update_order_status']);
|
||||
add_action('admin_post_jio_pay_update_order_note', [$this, 'handle_update_order_note']);
|
||||
add_action('admin_post_jio_pay_clear_closed_orders', [$this, 'handle_clear_closed_orders']);
|
||||
add_action('admin_post_jio_pay_delete_order', [$this, 'handle_delete_order']);
|
||||
add_action('admin_post_jio_pay_refund_order', [$this, 'handle_refund_order']);
|
||||
}
|
||||
|
||||
public function enqueue_assets(): void {
|
||||
@@ -54,17 +54,17 @@ class PayOrders {
|
||||
}
|
||||
$css = '/assets/css/admin/orders.css';
|
||||
$js = '/assets/js/admin-orders.js';
|
||||
wp_enqueue_style('aksrt-admin-orders', AKSRT_URI . $css, [NativeUi::STYLE_HANDLE], (string) filemtime(AKSRT_DIR . $css));
|
||||
wp_enqueue_script('aksrt-admin-orders', AKSRT_URI . $js, [], (string) filemtime(AKSRT_DIR . $js), true);
|
||||
wp_enqueue_style('jio-admin-orders', JIO_URI . $css, [NativeUi::STYLE_HANDLE], (string) filemtime(JIO_DIR . $css));
|
||||
wp_enqueue_script('jio-admin-orders', JIO_URI . $js, [], (string) filemtime(JIO_DIR . $js), true);
|
||||
}
|
||||
|
||||
public function render_orders_page(): void {
|
||||
$this->ensure_cap();
|
||||
NativeUi::page_open('aksrt-orders-page');
|
||||
NativeUi::page_open('jio-orders-page');
|
||||
|
||||
if (!class_exists('\AKSRT\Payment\OrderRepository')) {
|
||||
NativeUi::header(__('订单明细', 'aksrt'), '', 'dashicons-list-view');
|
||||
echo '<div class="notice notice-error"><p>' . esc_html__('订单服务不可用。', 'aksrt') . '</p></div>';
|
||||
if (!class_exists('\Jio\Payment\OrderRepository')) {
|
||||
NativeUi::header(__('订单明细', 'jio'), '', 'dashicons-list-view');
|
||||
echo '<div class="notice notice-error"><p>' . esc_html__('订单服务不可用。', 'jio') . '</p></div>';
|
||||
NativeUi::page_close();
|
||||
return;
|
||||
}
|
||||
@@ -87,13 +87,13 @@ class PayOrders {
|
||||
$this->ensure_cap();
|
||||
$order_number = isset($_POST['order_number']) ? sanitize_text_field((string) wp_unslash($_POST['order_number'])) : '';
|
||||
$new_status = isset($_POST['new_status']) ? sanitize_key((string) wp_unslash($_POST['new_status'])) : '';
|
||||
check_admin_referer('aksrt_pay_update_order_status_' . $order_number);
|
||||
check_admin_referer('jio_pay_update_order_status_' . $order_number);
|
||||
|
||||
$ok = false;
|
||||
if ($order_number !== '' && $new_status !== '' && class_exists('\AKSRT\Payment\OrderRepository')) {
|
||||
$ok = \AKSRT\Payment\OrderRepository::get_instance()->update_status($order_number, $new_status);
|
||||
if ($order_number !== '' && $new_status !== '' && class_exists('\Jio\Payment\OrderRepository')) {
|
||||
$ok = \Jio\Payment\OrderRepository::get_instance()->update_status($order_number, $new_status);
|
||||
}
|
||||
$this->redirect_back(['aksrt_pay_msg' => $ok ? 'order_updated' : 'order_failed']);
|
||||
$this->redirect_back(['jio_pay_msg' => $ok ? 'order_updated' : 'order_failed']);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -105,11 +105,11 @@ class PayOrders {
|
||||
public function handle_refund_order(): void {
|
||||
$this->ensure_cap();
|
||||
$order_number = isset($_POST['order_number']) ? sanitize_text_field((string) wp_unslash($_POST['order_number'])) : '';
|
||||
check_admin_referer('aksrt_pay_refund_order_' . $order_number);
|
||||
check_admin_referer('jio_pay_refund_order_' . $order_number);
|
||||
|
||||
$code = 'order_refund_failed';
|
||||
if ($order_number !== '' && class_exists('\AKSRT\Payment\OrderRepository')) {
|
||||
$repo = \AKSRT\Payment\OrderRepository::get_instance();
|
||||
if ($order_number !== '' && class_exists('\Jio\Payment\OrderRepository')) {
|
||||
$repo = \Jio\Payment\OrderRepository::get_instance();
|
||||
$order = $repo->get($order_number);
|
||||
if (!is_array($order)) {
|
||||
$code = 'order_refund_missing';
|
||||
@@ -118,37 +118,37 @@ class PayOrders {
|
||||
} else {
|
||||
$ok = $repo->update_status($order_number, DomainModel::ORDER_STATUS_REFUNDED, [
|
||||
'allow_refund' => true,
|
||||
'note' => __('管理员在订单明细中标记退款', 'aksrt'),
|
||||
'note' => __('管理员在订单明细中标记退款', 'jio'),
|
||||
]);
|
||||
$code = $ok ? 'order_refunded' : 'order_refund_failed';
|
||||
}
|
||||
}
|
||||
$this->redirect_back(['aksrt_pay_msg' => $code]);
|
||||
$this->redirect_back(['jio_pay_msg' => $code]);
|
||||
}
|
||||
|
||||
public function handle_update_order_note(): void {
|
||||
$this->ensure_cap();
|
||||
$order_number = isset($_POST['order_number']) ? sanitize_text_field((string) wp_unslash($_POST['order_number'])) : '';
|
||||
$admin_note = isset($_POST['admin_note']) ? sanitize_textarea_field((string) wp_unslash($_POST['admin_note'])) : '';
|
||||
check_admin_referer('aksrt_pay_update_order_note_' . $order_number);
|
||||
check_admin_referer('jio_pay_update_order_note_' . $order_number);
|
||||
|
||||
$ok = false;
|
||||
if ($order_number !== '' && class_exists('\AKSRT\Payment\OrderRepository')) {
|
||||
$ok = \AKSRT\Payment\OrderRepository::get_instance()->update_admin_note($order_number, $admin_note);
|
||||
if ($order_number !== '' && class_exists('\Jio\Payment\OrderRepository')) {
|
||||
$ok = \Jio\Payment\OrderRepository::get_instance()->update_admin_note($order_number, $admin_note);
|
||||
}
|
||||
$this->redirect_back(['aksrt_pay_msg' => $ok ? 'order_note_updated' : 'order_note_failed']);
|
||||
$this->redirect_back(['jio_pay_msg' => $ok ? 'order_note_updated' : 'order_note_failed']);
|
||||
}
|
||||
|
||||
public function handle_clear_closed_orders(): void {
|
||||
$this->ensure_cap();
|
||||
check_admin_referer('aksrt_pay_clear_closed_orders');
|
||||
check_admin_referer('jio_pay_clear_closed_orders');
|
||||
$days = isset($_POST['days']) ? max(1, min(3650, (int) $_POST['days'])) : 14;
|
||||
$deleted = 0;
|
||||
if (class_exists('\AKSRT\Payment\OrderRepository')) {
|
||||
$deleted = \AKSRT\Payment\OrderRepository::get_instance()->clear_closed_orders($days);
|
||||
if (class_exists('\Jio\Payment\OrderRepository')) {
|
||||
$deleted = \Jio\Payment\OrderRepository::get_instance()->clear_closed_orders($days);
|
||||
}
|
||||
$this->redirect_back([
|
||||
'aksrt_pay_msg' => $deleted > 0 ? 'orders_cleared' : 'orders_clear_empty',
|
||||
'jio_pay_msg' => $deleted > 0 ? 'orders_cleared' : 'orders_clear_empty',
|
||||
'cleared' => $deleted,
|
||||
], true);
|
||||
}
|
||||
@@ -156,10 +156,10 @@ class PayOrders {
|
||||
public function handle_delete_order(): void {
|
||||
$this->ensure_cap();
|
||||
$order_number = isset($_POST['order_number']) ? sanitize_text_field((string) wp_unslash($_POST['order_number'])) : '';
|
||||
check_admin_referer('aksrt_pay_delete_order_' . $order_number);
|
||||
check_admin_referer('jio_pay_delete_order_' . $order_number);
|
||||
$ok = false;
|
||||
if ($order_number !== '' && class_exists('\AKSRT\Payment\OrderRepository')) {
|
||||
$repo = \AKSRT\Payment\OrderRepository::get_instance();
|
||||
if ($order_number !== '' && class_exists('\Jio\Payment\OrderRepository')) {
|
||||
$repo = \Jio\Payment\OrderRepository::get_instance();
|
||||
$order = $repo->get($order_number);
|
||||
// 只允许硬删已关闭订单。
|
||||
if (is_array($order) && (string) ($order['status'] ?? '') === DomainModel::ORDER_STATUS_CLOSED) {
|
||||
@@ -167,7 +167,7 @@ class PayOrders {
|
||||
}
|
||||
}
|
||||
// 删除成功后详情已不存在,回到列表;失败时留在原处。
|
||||
$this->redirect_back(['aksrt_pay_msg' => $ok ? 'order_deleted' : 'order_delete_failed'], $ok);
|
||||
$this->redirect_back(['jio_pay_msg' => $ok ? 'order_deleted' : 'order_delete_failed'], $ok);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -180,7 +180,7 @@ class PayOrders {
|
||||
if (is_string($referer) && $referer !== '') {
|
||||
parse_str((string) wp_parse_url($referer, PHP_URL_QUERY), $parsed);
|
||||
if (($parsed['page'] ?? '') === self::PAGE_SLUG) {
|
||||
unset($parsed['page'], $parsed['aksrt_pay_msg'], $parsed['cleared']);
|
||||
unset($parsed['page'], $parsed['jio_pay_msg'], $parsed['cleared']);
|
||||
if ($to_list) {
|
||||
unset($parsed['order']);
|
||||
}
|
||||
@@ -198,12 +198,12 @@ class PayOrders {
|
||||
/** 当前状态可执行的动作按钮;没有可执行动作时返回空串。 */
|
||||
private function order_actions_html(string $order_number, string $status, bool $small = true): string {
|
||||
$labels = [
|
||||
DomainModel::ORDER_STATUS_PAID => __('确认收款', 'aksrt'),
|
||||
DomainModel::ORDER_STATUS_CLOSED => __('关闭订单', 'aksrt'),
|
||||
DomainModel::ORDER_STATUS_PAID => __('确认收款', 'jio'),
|
||||
DomainModel::ORDER_STATUS_CLOSED => __('关闭订单', 'jio'),
|
||||
];
|
||||
$confirms = [
|
||||
DomainModel::ORDER_STATUS_PAID => __('确认将该订单标记为已支付?系统会立即为用户发放对应权益。', 'aksrt'),
|
||||
DomainModel::ORDER_STATUS_CLOSED => __('确认关闭该订单?关闭后用户无法继续支付。', 'aksrt'),
|
||||
DomainModel::ORDER_STATUS_PAID => __('确认将该订单标记为已支付?系统会立即为用户发放对应权益。', 'jio'),
|
||||
DomainModel::ORDER_STATUS_CLOSED => __('确认关闭该订单?关闭后用户无法继续支付。', 'jio'),
|
||||
];
|
||||
|
||||
$html = '';
|
||||
@@ -213,8 +213,8 @@ class PayOrders {
|
||||
continue;
|
||||
}
|
||||
$html .= $this->action_form(
|
||||
'aksrt_pay_update_order_status',
|
||||
'aksrt_pay_update_order_status_' . $order_number,
|
||||
'jio_pay_update_order_status',
|
||||
'jio_pay_update_order_status_' . $order_number,
|
||||
['order_number' => $order_number, 'new_status' => $target],
|
||||
$labels[$target],
|
||||
$confirms[$target],
|
||||
@@ -225,22 +225,22 @@ class PayOrders {
|
||||
// 已支付是已退款的唯一前置状态。
|
||||
if ($status === DomainModel::ORDER_STATUS_PAID) {
|
||||
$html .= $this->action_form(
|
||||
'aksrt_pay_refund_order',
|
||||
'aksrt_pay_refund_order_' . $order_number,
|
||||
'jio_pay_refund_order',
|
||||
'jio_pay_refund_order_' . $order_number,
|
||||
['order_number' => $order_number],
|
||||
__('标记退款', 'aksrt'),
|
||||
__('只会把订单标记为已退款,不会自动原路退回款项。确认继续?此操作不可撤销。', 'aksrt'),
|
||||
__('标记退款', 'jio'),
|
||||
__('只会把订单标记为已退款,不会自动原路退回款项。确认继续?此操作不可撤销。', 'jio'),
|
||||
true,
|
||||
$small
|
||||
);
|
||||
}
|
||||
if ($status === DomainModel::ORDER_STATUS_CLOSED) {
|
||||
$html .= $this->action_form(
|
||||
'aksrt_pay_delete_order',
|
||||
'aksrt_pay_delete_order_' . $order_number,
|
||||
'jio_pay_delete_order',
|
||||
'jio_pay_delete_order_' . $order_number,
|
||||
['order_number' => $order_number],
|
||||
__('删除', 'aksrt'),
|
||||
__('确认永久删除此订单?不可恢复。', 'aksrt'),
|
||||
__('删除', 'jio'),
|
||||
__('确认永久删除此订单?不可恢复。', 'jio'),
|
||||
true,
|
||||
$small
|
||||
);
|
||||
@@ -249,13 +249,13 @@ class PayOrders {
|
||||
}
|
||||
|
||||
/**
|
||||
* 单按钮 POST 表单。确认文案放在 data-aksrt-confirm,由 admin-orders.js 拦截提交。
|
||||
* 单按钮 POST 表单。确认文案放在 data-jio-confirm,由 admin-orders.js 拦截提交。
|
||||
*
|
||||
* @param array<string, string> $fields
|
||||
*/
|
||||
private function action_form(string $action, string $nonce_action, array $fields, string $label, string $confirm = '', bool $danger = false, bool $small = true): string {
|
||||
$html = '<form method="post" action="' . esc_url(admin_url('admin-post.php')) . '" class="aksrt-orders-action"'
|
||||
. ($confirm !== '' ? ' data-aksrt-confirm="' . esc_attr($confirm) . '"' : '') . '>';
|
||||
$html = '<form method="post" action="' . esc_url(admin_url('admin-post.php')) . '" class="jio-orders-action"'
|
||||
. ($confirm !== '' ? ' data-jio-confirm="' . esc_attr($confirm) . '"' : '') . '>';
|
||||
$html .= '<input type="hidden" name="action" value="' . esc_attr($action) . '" />';
|
||||
foreach ($fields as $name => $value) {
|
||||
$html .= '<input type="hidden" name="' . esc_attr($name) . '" value="' . esc_attr($value) . '" />';
|
||||
@@ -312,11 +312,11 @@ class PayOrders {
|
||||
private function payment_method_label(string $method): string {
|
||||
if ($this->payment_labels === null) {
|
||||
$this->payment_labels = [
|
||||
'points' => __('积分', 'aksrt'),
|
||||
'free' => __('免费', 'aksrt'),
|
||||
'points' => __('积分', 'jio'),
|
||||
'free' => __('免费', 'jio'),
|
||||
];
|
||||
if (class_exists('\AKSRT\Payment\Gateway')) {
|
||||
foreach (\AKSRT\Payment\Gateway::get_instance()->get_all() as $id => $gateway) {
|
||||
if (class_exists('\Jio\Payment\Gateway')) {
|
||||
foreach (\Jio\Payment\Gateway::get_instance()->get_all() as $id => $gateway) {
|
||||
$this->payment_labels[(string) $id] = $gateway->get_name();
|
||||
}
|
||||
}
|
||||
@@ -327,7 +327,7 @@ class PayOrders {
|
||||
/** @return string[] */
|
||||
private function third_party_gateway_ids(): array {
|
||||
return array_values(array_diff(
|
||||
array_keys(\AKSRT\Payment\Gateway::get_instance()->get_all()),
|
||||
array_keys(\Jio\Payment\Gateway::get_instance()->get_all()),
|
||||
['balance', 'points']
|
||||
));
|
||||
}
|
||||
@@ -340,7 +340,7 @@ class PayOrders {
|
||||
/** @param array<string,mixed> $order */
|
||||
private function order_amount(array $order): string {
|
||||
if ($this->is_points_order($order)) {
|
||||
return max(0, (int) ($order['amount'] ?? 0)) . ' ' . __('积分', 'aksrt');
|
||||
return max(0, (int) ($order['amount'] ?? 0)) . ' ' . __('积分', 'jio');
|
||||
}
|
||||
return $this->cash_amount((string) ($order['amount'] ?? '0'), (string) ($order['currency'] ?? ''));
|
||||
}
|
||||
@@ -351,35 +351,35 @@ class PayOrders {
|
||||
|
||||
private function cash_decimal(string $value): string {
|
||||
try {
|
||||
return \AKSRT\Ledger\AssetAmount::balance($value)->decimal();
|
||||
return \Jio\Ledger\AssetAmount::balance($value)->decimal();
|
||||
} catch (\InvalidArgumentException $e) {
|
||||
return '0.00';
|
||||
}
|
||||
}
|
||||
|
||||
private function render_flash(): void {
|
||||
if (empty($_GET['aksrt_pay_msg'])) {
|
||||
if (empty($_GET['jio_pay_msg'])) {
|
||||
return;
|
||||
}
|
||||
$code = sanitize_key((string) wp_unslash($_GET['aksrt_pay_msg']));
|
||||
$code = sanitize_key((string) wp_unslash($_GET['jio_pay_msg']));
|
||||
// 码 => [文案, 是否失败]
|
||||
$map = [
|
||||
'order_updated' => [__('订单状态已更新。', 'aksrt'), false],
|
||||
'order_failed' => [__('订单状态更新失败,订单可能已被其他操作改变,请刷新后重试。', 'aksrt'), true],
|
||||
'order_refunded' => [__('订单已标记为已退款。款项请在支付渠道后台原路退回。', 'aksrt'), false],
|
||||
'order_refund_failed' => [__('订单标记退款失败。', 'aksrt'), true],
|
||||
'order_refund_missing' => [__('订单不存在。', 'aksrt'), true],
|
||||
'order_refund_not_paid' => [__('仅已支付订单可以标记退款。', 'aksrt'), true],
|
||||
'order_note_updated' => [__('运营备注已保存。', 'aksrt'), false],
|
||||
'order_note_failed' => [__('运营备注保存失败。', 'aksrt'), true],
|
||||
'order_updated' => [__('订单状态已更新。', 'jio'), false],
|
||||
'order_failed' => [__('订单状态更新失败,订单可能已被其他操作改变,请刷新后重试。', 'jio'), true],
|
||||
'order_refunded' => [__('订单已标记为已退款。款项请在支付渠道后台原路退回。', 'jio'), false],
|
||||
'order_refund_failed' => [__('订单标记退款失败。', 'jio'), true],
|
||||
'order_refund_missing' => [__('订单不存在。', 'jio'), true],
|
||||
'order_refund_not_paid' => [__('仅已支付订单可以标记退款。', 'jio'), true],
|
||||
'order_note_updated' => [__('运营备注已保存。', 'jio'), false],
|
||||
'order_note_failed' => [__('运营备注保存失败。', 'jio'), true],
|
||||
'orders_cleared' => [sprintf(
|
||||
/* translators: %d deleted count */
|
||||
__('已清理 %d 条关闭订单。', 'aksrt'),
|
||||
__('已清理 %d 条关闭订单。', 'jio'),
|
||||
max(0, (int) ($_GET['cleared'] ?? 0))
|
||||
), false],
|
||||
'orders_clear_empty' => [__('没有可清理的关闭订单。', 'aksrt'), false],
|
||||
'order_deleted' => [__('订单已删除。', 'aksrt'), false],
|
||||
'order_delete_failed' => [__('订单删除失败(仅允许删除已关闭订单)。', 'aksrt'), true],
|
||||
'orders_clear_empty' => [__('没有可清理的关闭订单。', 'jio'), false],
|
||||
'order_deleted' => [__('订单已删除。', 'jio'), false],
|
||||
'order_delete_failed' => [__('订单删除失败(仅允许删除已关闭订单)。', 'jio'), true],
|
||||
];
|
||||
if (!isset($map[$code])) {
|
||||
return;
|
||||
@@ -390,7 +390,7 @@ class PayOrders {
|
||||
|
||||
private function ensure_cap(): void {
|
||||
if (!current_user_can(self::CAPABILITY)) {
|
||||
wp_die(esc_html__('您没有权限访问此页面。', 'aksrt'));
|
||||
wp_die(esc_html__('您没有权限访问此页面。', 'jio'));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user