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

如何注册基于REST路线中现有值的自定义字段

姜博
2023-03-14

Iam 注册一个 rest 路由(请参阅代码 1),其中路由的内容将等于wpso_messages数据库的结果。

对定制路由的get请求的结果JSON如下。(参见#合成Json)

我想在Rest路线中注册2个额外的自定义字段,它们是:

我知道我可能必须使用register rest字段函数(参见示例代码2),但是它似乎没有连接到注册的自定义rest路由,而且,我需要访问现有api回调中的user_from列。

有什么建议吗?

#代码1:注册Rest路线

<?php

 function get_wp_query() {
    global $wpdb;
      $row = $wpdb->get_results("SELECT * FROM wpso_messages");
      return $row;
      };
add_action( 'rest_api_init', function () {
    register_rest_route( 'wp/v2', 'messages', array(
        'methods' => 'GET',
        'callback' => 'get_wp_query'
        ) );
    } );

#结果JSON

{"id":"1","user_from":"82","user_to":"1","created_at":"2022-01-07 10:25:56","消息":"我有兴趣出价","listing_id":"22775","看到":"1"}

代码2:

function get_custom_fields() {
    return 'our awesome endpoint';
}
add_action( 'rest_api_init', 'add_custom_fields' );

function add_custom_fields() {
    register_rest_field(
        'messages', 
        'custom_fields', //New Field Name in JSON RESPONSEs
        array(
            'get_callback'    => 'get_custom_fields', // custom function name 
            'update_callback' => null,
            'schema'          => null,
            )
        );
    }

共有2个答案

邹毅
2023-03-14

基于Nawaz提案的解决方案:

function get_wp_query() {
    global $wpdb;
    $rows = $wpdb->get_results("SELECT * FROM wpso_messages");
    foreach( $rows as $index => $row ) {
    
           $user_from_id = $rows[$index]->user_from; 
           $user_to_id = $rows[$index]->user_to; 
           $rows[$index]->username_from = get_user_by('id', $user_from_id)->display_name;
           $rows[$index]->username_to = get_user_by('id', $user_to_id)->display_name;
    }
    return $rows;
};


add_action( 'rest_api_init', function () {
    register_rest_route( 'wp/v2', 'messages', array(
        'methods' => 'GET',
        'callback' => 'get_wp_query'
        ) );
    } );
钮誉
2023-03-14

在get_wp_query() 函数中,不要立即返回结果。首先,遍历它们并从那里添加必填字段。

对于您的情况:

function get_wp_query() {
   global $wpdb;
   $rows = $wpdb->get_results("SELECT * FROM wpso_messages");

   foreach( $rows as $index => $row ) {
        $rows[$index]->username_from = get_user_by('id', $row.user_from)->display_name;
        $rows[$index]->username_to = get_user_by('id', $row.user_to)->display_name;
   }
   return $rows;
};
    < li>get_user_by()函数引用
 类似资料:
  • 问题内容: 我想在定义类时注册一个类的实例。理想情况下,以下代码可以解决问题。 不幸的是,此代码生成错误。 发生的事情是在我尝试实例化a的行上,但装饰器尚未返回,因此它不存在。 是否使用元类解决了这个问题? 问题答案: 是的,元类可以做到这一点。元类的方法返回该类,因此只需在返回之前注册该类。 前面的示例在Python 2.x中有效。在Python 3.x中,的定义略有不同(虽然未更改,但未显示-

  • 我有一个使用Node.js和Express构建的web应用程序。现在我想列出所有注册的路线及其适当的方法。 例如,如果我执行了 我想检索一个对象(或与之相当的东西),例如: 这可能吗?如果可能,如何实现? 更新:同时,我创建了一个名为get-routes的npm包,它从给定的应用程序中提取路由,解决了这个问题。目前,只支持Express4.x,但我想现在这是可以的。只是通知一下。

  • 问题内容: 我有一个使用Node.js和Express构建的Web应用程序。现在,我想用适当的方法列出所有已注册的路由。 例如,如果我执行过 我想检索一个对象(或等效的东西),例如: 这可能吗?如果可以,怎么办? 更新: 同时,我创建了一个名为get-routes的npm软件包,该软件包从给定的应用程序中提取路由,从而解决了此问题。当前,仅支持Express 4.x,但我想现在可以了。仅供参考。

  • 考虑一个案例,我有2个对象映射器实例。我希望必须从序列化中排除使用某些自定义注释注释的字段,而其他映射器包含(忽略注释) 就像类有3个字段a,b,c和c用一些注释注释(比如@IgnoreField)(它们的n个类,每个类都有它们不应该被序列化的字段) 现在,第一个对象映射器 o1 必须仅序列化 a 和 b。而第二个对象映射器o2可以序列化a,b和c。 任何具有不同字段的类都可能发生这种情况,其中一

  • 我想基于自定义布尔值设置表单元素的有效性。考虑下面的密码字段: 如果重复的密码与原始密码匹配,我想标记第二个输入字段有效。类似的东西: 为此,我找不到任何角度指示。有什么想法吗?也许我可以为此制定自己的指令?不幸的是,我不是一个角度专家。。。应该是这样的: 谢谢

  • 问题内容: 我有以下Java代码- 我得到的错误是 如何正确访问注释字段? 问题答案: 默认情况下,注释在运行时不可用。您需要添加到注释定义以使其可用于运行时处理。例如: 在实践中,还应在实际尝试从字段中删除注释之前,检查该字段是否确实具有给定的注释。 另外,指定注释所属的元素类型也是一种好习惯。因此,您的示例将是: