我正在尝试添加自定义endpoint(自定义endpoint”是指一个不被WP识别为标准URL的任意URL,如permalink等。)我用的是WordPress插件样板“https://github . com/DevinVinson/WordPress-Plugin-Boilerplate”。
我想在自定义endpoint上发送一个API请求。我创建了一个新的类文件来注册endpoint,并将这个类文件包含在插件activate方法中,并调用add_action钩子,但是它不起作用。
创建新的类rigal自定义endpoint。包含文件夹中的php文件。
<?php
class Rigal_custom_Endpoint {
private static $initiated = false;
public static function init() {
if ( ! self::$initiated ) {
self::init_hooks();
}
}
public static function init_hooks() {
self::$initiated = true;
add_action('init', 'add_endpoint');
}
/**
*
* @description Create a independent endpoint
*/
public static function endpoint() {
global $wp;
$endpoint_vars = $wp->query_vars;
// if endpoint
if ($wp->request == 'exercise/test') {
// Your own function to process endpoint
exit;
}
}
}
在我将这个类文件包括在插件激活方法中之后。(类rigal插件activator.php)
public static function activate() {
require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-rigal-custom-endpoint.php';
add_action( 'init', array( 'Rigal_custom_Endpoint', 'init' ) );
add_action( 'parse_request', array( 'Rigal_custom_Endpoint', 'endpoint' ) , 0);
}
当我激活插件并在URL中添加“练习/测试”时,但它不起作用。您能否提出解决上述问题的解决方案?
环境PHP:7.4 Wordpress:5.4操作系统:Mac:10.15.1浏览器:Chrome:81.0.4044.122
谢谢
在< code>load_dependencies方法的< code > class-plugin-name . PHP 中,添加您的类,例如:
require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-rigal-custom-endpoint.php';
在<code>define_public_hooks<code>中,添加您的操作
$this->loader->add_action( 'parse_request', 'Rigal_custom_Endpoint', 'endpoint' );
这将起作用,但请注意,您没有以标准方式注册终端节点 API。您应该查看WP REST API文档:
https://developer.wordpress.org/rest-api/extending-the-rest-api/adding-custom-endpoints/
<?php
/*
Plugin Name: Add WP Custom endpoint
Author: Robin Ferrari
Version: 1.0
*/
class MYPLUGIN_Api_Endpoint{
public function init(){
add_action( 'rest_api_init', array($this, 'register_rest_routes'));
}
public function register_rest_routes(){
register_rest_route( 'myplugin/v1', '/exercise/test', array(
'methods' => 'GET',
'callback' => array($this, 'exercise_test'),
));
}
/**
* Your custom route callback
*/
public function exercise_test(){
$error = false;
// do what you whant
if($error){
return new WP_Error(500, "KO");
}
return new WP_Rest_Response(array(
'status' => 200,
'message' => "OK",
));
}
}
$api = new MYPLUGIN_Api_Endpoint();
$api->init();
然后,您的终端节点可从以下位置访问:
https://example.com/wp-json/myplugin/v1/exercise/test
越来越多的插件开始使用AJAX 技术。我个人并没有在大多数的插件中看到过AJAX,但是使用AJAX 来完成某个任务对你的插件来说可能是必要的。这篇文章将像你展示怎样在你的插件中使用AJAX。 这篇文章将在上一篇文章《在插件中添加js 和css》的基础上继续。 建立新的PHP文件 Devlounge Plugin Series 插件已经有了如下的目录结构了: devloung-plugin-seri
问题内容: 当我在带有选项create emulator的Jenkins上运行测试时,出现以下问题: [android]无法创建Android模拟器:无法运行AVD创建命令 当我以现有仿真器为目标时,会遇到以下问题: 致命:C:\ Windows \ system32 \ config \ systemprofile.android \ avd \ AVD_2.2.ini(系统找不到指定的路径)j
将会有这么一种情况,你将有一个主要的管理面板,但是希望能够让独立的用户设定他们自己的偏好。在Devlounge PluginSeries 这个例子中,我们添加了一个是否把文字添加到文章末尾的选项。然而假如一个登录用户不希望看到这段文字呢?为什么不给他们一个选择,而且不影响到所有其他的用户呢? 这篇文章将会涉及到这个问题,让你可以添加你自己的用户面板。 命名你的选项 class DevloungeP
问题内容: 我有一个带有2个下拉框的Wordpress网站。当我在第一个下拉框中选择一个选项时,我希望第二个选项被PHP函数中的数据刷新。为此,我需要ajax。但是我正在努力将Ajax绑定到Wordpress中。 HTML看起来像这样: 现在,例如,当用户选择“销售”时,我希望第二个选择标签重新加载来自PHP数组的匹配价格。 PHP函数如下所示: 我将jQuery Ajax调用保存在单独的.js文
现今的许多插件对javascript 和层叠样式表依赖更多了。将你插件中的javascript 和css 放置到分离的文件中是非常重要的,那样做会使插件维护起来更加容易。此系列中的这个部分将介绍怎样在你的插件中加载javascript 和CSS 文件。 添加你的JavaScript 你的插件可能需要装载prototype 类库,或者一个自定义的脚本。这一节将向你展示几个WordPress 函数,它
我想将视图渲染为pdf,并尝试使用Grails渲染插件2.0.3 我尝试了最简单的gsp-file开始: 在控制器中: 最后是: 我错过了什么?或者它不应该与这个版本的grails(3.2.4)一起使用? 也许有更好的插件可以使用?