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

如何在wordpress自定义endpoint中调用类方法作为回调函数?

楚丰羽
2023-03-14

我有一个自定义endpoint,如下所示:

add_action( 'rest_api_init', function () {
    register_rest_route( 't2mchat/v2', '/get_curr_user_lang', array(
        'methods' => 'GET',
        'callback' => 'get_user_lang'
    ));
});

当回调函数不是基于类的方法时,我能够调用回调函数“get_user_lang”。但是一旦我将其转换为基于类的方法,我就无法调用它。

我的班级是这样的:

<?php
namespace T2mchat\TokenHandler;


class TokenHandler {
  function get_user_lang() {
    return "client_langs";
  }
}
?>

我的新endpoint如下所示:

$t2m = new T2mchat\TokenHandler\TokenHandler();
add_action( 'rest_api_init', function () {
    register_rest_route( 't2mchat/v2', '/get_curr_user_lang', array(
        'methods' => 'GET',
        'callback' => array($t2m, 'get_user_lang')
    ));
});

有人知道如何在WordPress Rest API自定义endpoint中调用基于类的方法吗?

共有3个答案

翟誉
2023-03-14

WordPress钩子中的类方法应通过二维数组设置。

add_action( 'rest_api_init', function () {
    register_rest_route( 't2mchat/v2', '/get_curr_user_lang', array(
        'methods' => 'GET',
        'callback' => array($class_object,'get_user_lang')
    ));
});
冯鸿光
2023-03-14

如果使用的是同一类的静态方法,则array()解决方案不起作用。我必须使用“魔术”常量<code>__CLASS_</code>:

'callback' => __CLASS__ . '::get_posts',

为了添加一个动作,使用这个自定义类和另一个静态方法作为回调,我必须使用这个符号:

require_once( get_template_directory() . "/inc/classes/Rest/Posts.php" );
add_action( 'rest_api_init', 'Custom\Namespace\Posts::register_routes');
上官高逸
2023-03-14

如果定义了self和yout回调方法,则在类中调用钩子:

add_action( 'rest_api_init', function () {
    register_rest_route( 't2mchat/v2', '/get_curr_user_lang', array(
        'methods' => 'GET',
        'callback' => array($this,'get_user_lang')
    ));
});

如果来自不同类别:

add_action( 'rest_api_init', function () {
    register_rest_route( 't2mchat/v2', '/get_curr_user_lang', array(
        'methods' => 'GET',
        'callback' => array(new className,'get_user_lang')
    ));
});

如果这个解决方案不起作用,你的问题的更多细节将有助于定义。

 类似资料:
  • 本文向大家介绍js自定义回调函数,包括了js自定义回调函数的使用技巧和注意事项,需要的朋友参考一下 背景分析 首先看一段js的代码,主要实现添加的时候首先通过异步请求判断是否存在,如果不存在的话,在进行添加操作: 当我添加一个数据的时候,我首先通过判断是否在数据库中存在(当然,如果前后台彻底分离的话,不应该前端进行业务逻辑的判断,前端只应该,用来展示数据),首先,isExited()的请求是aja

  • 免责声明,我只做了几个星期的WordPress/PHP,所以请随意为我真正分解东西。 我一直在为我的自定义Wordpress插件构建一个设置页面。我的插件的所有功能都存在于类中,因此我正在做如下事情: 而不是 我认为这是有效的,因为add_action的第二个参数接受数组或函数的字符串名称或匿名函数。 我目前的问题是,我的设置页面无法使用它。 守则: > 函数调用允许我传递数组($this,'fu

  • 目前,我的类型定义为: 我需要这样的东西: 但第二条不被接受。

  • 我目前正在从事一个需要WordPress网站和简单的REST api的项目。我发现WordPress有自己的REST api,并决定扩展其功能以满足我的需求。我需要做的就是拥有GET和POST请求的endpoint,这些endpoint可以从与WordPress没有直接关系的表(但在同一个数据库中)中检索/插入数据。我成功地实现了所有GET请求,但是,我正在努力让POST的工作。 我定义了这个路由

  • 问题内容: 大家好! 我有这样的电话: 是否可以将其包装在自定义函数中 但 保留回调? 就像是: 将是这样的: 问题答案: 编辑: 最近对此表示赞同,我不得不说我不再这样做。返回a,因此您可以直接使用promise以更一致和更可靠的方式执行我在这里所做的几乎所有工作。 然后用法如下: 当然,我一直都这样做。您可以在实际的成功Callack中执行回调,也可以将回调分配为成功回调: 用法如下所示:

  • $this->db->call_function(); 这个方法用于执行一些 CodeIgniter 中没有定义的 PHP 数据库函数,而且 使用了一种平台独立的方式。举个例子,假设你要调用 mysql_get_client_info() 函数,这个函数 CodeIgniter 并不是原生支持的,你可以这样做: $this->db->call_function('get_client_info')