在 WordPress 中使用 WordPress Dispatcher 创建自定义路由链接 URL

在 WordPress 中使用 WordPress Dispatcher 创建自定义路由链接 URL

在 WordPress 中使用 WordPress Dispatcher 创建自定义路由链接 URL

在 WordPress 中,按照官方的标准,如果需要使用 Ajax,我们需要通过注册 Ajax 动作到 admin_ajax 上,如果需要添加页面,我们直接在后台并添加页面就行了。有没有一种简单方便的办法,不用在页面管理处添加页面来实现自定义页面,也不用 admin_ajax 来实现 Ajax 操作呢?答案自然是有的。

为了实现这个目的,我们需要借助 WordPress Dispatcher PHP 库,我么可以把这个库下载下来,包含到我们的主题或插件中,也可以走捷径,通过 Composer 安装。

通过 Composer 安装 WordPress Dispatcher PHP 库

WordPress Dispatcher 已经提交到了 Composer 官方列表中,我们可以直接通过 Composer 安装管理这个库。

composer require thefold/wordpress-dispatcher

通过 Composer 生成的 autoload 文件自动加载 wordpress-dispatcher 类

Composer 安装后,会自动为我们创建包含了所有安装包的自动加载文件,我们只需要引入这个文件,就可以使用所安装的 PHP 库的所有功能。

// 加载 composer 安装的库
require_once( dirname( __FILE__ ) . '/../vendor/autoload.php' );

use \TheFold\WordPress\Dispatch;

使用 WordPress Dispatcher 创建 WordPress Url

拿我最近开发的一个项目中的在线充值功能为例吧,下面的代码中,online_charge就是我们创建的在线充值的 URL,我们通过 Ajax 把数据提交到/online_charge/URL中,该 URL 对应的函数就会自动执行,在本例中,该动作就是生成订单,并跳转到支付宝支付

// 在线充值
new Dispatch( [

 'online_charge' => function ( $request ) {

   $mount = trim( $_POST['mount'] );
   $tn = "p4" . order_no();

   # 计算总金额
   $total_fee = array_sum( $mount ); # 计算总金额

   // 创建订单数据, 可以是前台提交, 也可以是自动生成
   $options = [
     'out_trade_no' => $tn, //生成唯一订单号
     'subject' => '在线充值', //订单标题
     'total_fee' => $total_fee, //订单总金额
   ];

   // 获取支付网关
   $gateway = get_gate_way();

   $response = $gateway->purchase( $options )->send();

   // 直接跳转到支付宝支付
   $response->redirect();
 },

] );

使用自定义模板代替回调函数的具体功能

有时候,我们需要使用自定义页面模板来展示内容,这也很简单,直接在回调函数中包含需要使用的模板就可以了,页面的具体内容在模板中定义,URL 中的变量也可以直接在模板中使用。

new Dispatch( [

	'orders/([a-z]*)' => function ( $request, $status="all" ) {
		include( get_template_directory() . '/page-orders.php' );
	},

] );

路由对应类中的方法,这样可以更好的组织路由和类。

new Dispatch( [
    'checkout/' => array(new CheckoutController, 'index'),
    'checkout/([a-z]+)' => array(new CheckoutController, 'show'), array($request, $id), 
    // 后面的参数中,$request = checkout/([a-z]+); $id = ([a-z]+);
] );

通过 WordPress Dispatcher,我们把注册 Ajax 操作的动作直接绕过去了,在需要大量 Ajax 操作的主题或插件中,这无疑帮我们节省了很多代码,同时也让我们的代码逻辑更加清晰了。

本站提供 WordPress 主题定制开发服务

本站长期承接 WordPress 主题、插件、基于 WooCommerce 的商店商城开发业务。 我们有 8 年 WordPress 开发经验,如果你想 用 WordPress 开发网站, 请联系 QQ: 470266798,或邮箱: 4626395@gmail.com 咨询。

One thought on “在 WordPress 中使用 WordPress Dispatcher 创建自定义路由链接 URL

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*