Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为存储在自定义插件中的函数注册Wordpress REST路由和端点-如何指向现有插件函数和路径_Php_Wordpress_Wordpress Rest Api_Wordpress Plugin Creation - Fatal编程技术网

Php 为存储在自定义插件中的函数注册Wordpress REST路由和端点-如何指向现有插件函数和路径

Php 为存储在自定义插件中的函数注册Wordpress REST路由和端点-如何指向现有插件函数和路径,php,wordpress,wordpress-rest-api,wordpress-plugin-creation,Php,Wordpress,Wordpress Rest Api,Wordpress Plugin Creation,我一直在尝试为自定义插件函数注册REST路由,以使该函数可由javascript调用 示例显示了functions.php(如at)中注册脚本中嵌入的端点函数 但是,我的端点函数已经在自定义插件树中的PHP文件中 因此,我试图: 为我的端点注册路由,例如:www.example.com/test/v1/route\u function\u name 将其指向我的自定义函数名,例如name\u of_function 告诉它在哪里可以找到该函数,例如www.example.com/wp con

我一直在尝试为自定义插件函数注册REST路由,以使该函数可由javascript调用

示例显示了functions.php(如at)中注册脚本中嵌入的端点函数

但是,我的端点函数已经在自定义插件树中的PHP文件中

因此,我试图:

  • 为我的端点注册路由,例如:
    www.example.com/test/v1/route\u function\u name

  • 将其指向我的自定义函数名,例如
    name\u of_function

  • 告诉它在哪里可以找到该函数,例如
    www.example.com/wp content/plugins/custom plugin name/path tree stuff/public/plugin functions controller.php

  • 我被困在3号。问题是:

    a) 我应该把这个函数名引用放在哪里?我不想从那个文件中撕下我的功能代码,然后粘贴到路线注册代码中

    b) 我应该把函数文件的路径引用放在哪里?我所遵循的示例只是引用了“array,this”,而不是实际路径,因此不要指明如何注册到外部存储的端点的路由,该端点未封装在注册代码中

    c) 我错过什么了吗?看起来屏蔽JS中的实际函数php文件路径只会导致将其暴露在WP函数文件中

    《开发人员手册》中的示例似乎试图通过自定义路由而不是自定义函数来钩住wordpress函数

    有没有更适合我的例子?(我在自定义插件的自定义文件中有一个自定义函数,只需要注册一个REST路由并将其指向现有文件中的现有函数)

    到目前为止,我有以下明显不完整的信息:

    add_action(
        'rest_api_init',
        function () {
            register_rest_route(
                'test/v1',
                '/route_function_name',
                [
                    'methods' => 'POST',
                    'callback' => function (WP_REST_Request $request) {
    
                        // Need to somehow insert here a path to my function 
                        name_of_function;
    
                        // Reponse is sent back by the function, so need to trap it [
                            'return-param-1' => $return-param-1,
                            'return-param-2' => $return-param-2,
                            'return-param-3' => $return-param-3,
                        ];
                    },
                ]
            );
        }
    );
    
    尝试这样做的理由是:

    • 我已经有一个JS脚本在运行
    • 我需要它来调用我已经编写的PHP函数
    • 这很简单:只需将函数的路径编码到JS中
    • 然而,我正试图用正确的方法来代替(主要是出于安全原因,但也是为了安抚不合时宜的精神!)
    我假设:

    i) 注册REST路由的位置在活动子主题的functions.php中

    ii)自定义函数的位置位于现有自定义插件内的php文件中

    iii)注册休息路线的代码需要至少指定以下三项:

  • 新REST路由的URI
  • 要调用的php函数的名称
  • php函数的文件和路径可以在自定义插件路径中找到,相对于/var/www

  • 这些假设是否有错误?

    对于#3,如果它只是一个函数而不是一个类方法,您应该能够调用
    require_once WP#u PLUGIN_DIR/自定义插件名称/path-tree-stuff/public/plugin-functions-controller.php'以使其全局可用。理想情况下,您的REST路由将位于该插件内部,因为一个插件也依赖于另一个插件。这不是一个绝对的要求,但我现在正在一个10年的网站上工作,有很多跨DEP的插件,调试东西是一件非常痛苦的事情。如果它是一个类,它也可以工作,但那是你进入数组风格语法的时候了。谢谢@ChrisHaas,我将把
    register\u rest\u route
    与每个现有函数放在同一个文件中。我目前认为没有必要将它们封装在类中(封装除外),因为函数本身(这里称为“回调”)只是旧的skool过程例程;在OOP模型下,它们没有配置为CRUD函数或类方法语句,并且命名是相当冲突免疫的。然后,我将按照您的建议,在主插件文件中使用上面的
    require\u一次。