当前位置: 首页 > 知识库问答 >
问题:

add_action在使用wordpress插件样板的插件activate()方法中不起作用

西门山
2023-03-14

我正在尝试添加自定义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

谢谢

共有1个答案

扈俊健
2023-03-14

在< 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)一起使用? 也许有更好的插件可以使用?