如何在Wordpress自定义端点中将类方法作为回调函数调用?

时间:2019-04-17 05:34:13

标签: wordpress plugins wordpress-rest-api

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

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";
  }
}
?>

我的新端点如下:

$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自定义终结点中调用基于类的方法有任何想法吗?

3 个答案:

答案 0 :(得分:1)

如果在类if-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('className','get_user_lang')
    ));
});

如果此解决方案不起作用,则有关问题的更多详细信息将有助于进行定义。

答案 1 :(得分:1)

如果您使用的是同一类的静态方法,则array()解决方案将不起作用。我必须使用“魔术”常量__CLASS__

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

要使用此自定义类和另一个静态方法作为回调添加操作,我必须使用此表示法:

require_once( get_template_directory() . "/inc/classes/Rest/Posts.php" );
add_action( 'rest_api_init', 'Custom\Namespace\Posts::register_routes');

答案 2 :(得分:0)

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')
    ));
});