wordpress 插件开发 - 自定义URL的问题

发布于 2022-09-02 01:52:35 字数 1955 浏览 16 评论 0

  1. 描述你的问题

我参考json-api这个插件的写法,想要自己实现一些数据接口,但是在自定义路由的时候一直不起作用。(我想自定义一个类似 '/api3/controlName' 这样的url接口)

  1. 贴上相关代码

<?php
/*
Plugin Name: My Plugin
Plugin URI: http://wordpress.org/plugins/my-plugin/
Description: A RESTful API for WordPress
Version: 1.1.1
Author: Dan Phiffer
Author URI: http://phiffer.org/
*/

$myPluginBase = 'api3';

function my_plugin_init() {
    global $wp_rewrite;
    add_filter('rewrite_rules_array', 'my_plugin_rewrites');
    add_action('template_redirect', 'my_plugin_template_rewrite');
    $wp_rewrite->flush_rules();
}

function my_plugin_template_rewrite(){
    global $myPluginBase;
    if( isset( $_REQUEST[ $myPluginBase ] ) ){
        echo $_REQUEST[ $myPluginBase ];
        exit;
    }
}

function my_plugin_activation() {
    // Add the rewrite rule on activation
    global $wp_rewrite;
    add_filter('rewrite_rules_array', 'my_plugin_rewrites');
    $wp_rewrite->flush_rules();
}

function my_plugin_deactivation() {
    // Remove the rewrite rule on deactivation
    global $wp_rewrite;
    $wp_rewrite->flush_rules();
}

function my_plugin_rewrites($wp_rules) {
    global $myPluginBase;
    if (empty($base)) {
        return $wp_rules;
    }
    $my_plugin_rules = array(
        "$myPluginBase\$" => "index.php?{$myPluginBase}=info",
        "$myPluginBase/(.+)\$" => "index.php?{$myPluginBase}=\$matches[1]"
    );
    return array_merge($my_plugin_rules, $wp_rules);
}

// Add initialization and activation hooks
add_action('init', 'my_plugin_init');
register_activation_hook( __FILE__, 'my_plugin_activation');
register_deactivation_hook( __FILE__, 'my_plugin_deactivation');

?>

template_redirect这个action应该是生效了,比如访问 /api3=hello 能正常返回 hello,但是如果尝试访问 /api3/hello 则总是返回首页。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

时光瘦了 2022-09-09 01:52:35

我的天哪,你的写的让我有点看不懂。
不过既然你提到你访问 /api3=hello可以正常返回hello 。首先请问它是一个什么类型的地址?

page?post?cat? 建议你先试试下面的代码

// 注册一个链接
add_action( 'init', 'api3_rewrites_init' );
function api3_rewrites_init(){
    add_rewrite_rule(
        'api3/(.+)\

你的代码,我有一行不太了解

"$myPluginBase/(.+)\$" => "index.php?{$myPluginBase}=\$matches[1]"
, 'index.php?&api3=$matches[1]', 'top' ); }

你的代码,我有一行不太了解

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文