代码之家  ›  专栏  ›  技术社区  ›  grazdev

如何用post请求保存值数组?(wordpress应用程序接口)

  •  1
  • grazdev  · 技术社区  · 8 年前

    我正在尝试使用wordpress api通过post请求更新用户信息。信息存储在一个自定义json字段中,我是这样注册的:

    public function handle_user_info() {
        register_rest_field( 'user', 'personal_info', array(
            'get_callback' => array( $this, 'get_user_info_callback' ),
            'update_callback' => array( $this, 'post_user_info_callback' ),
            'schema' => null 
        ));        
    } 
    

    这里是get回调:

    public function get_user_info_callback( $user ) {  
        $userID = $user[ 'id' ]; 
        return array(
            'rcp_user_first' => get_user_meta( $userID, 'rcp_user_first', true ),
            'rcp_user_last' => get_user_meta( $userID, 'rcp_user_last', true ),
            'rcp_user_location' => get_user_meta( $userID, 'rcp_user_location', true ),
            'rcp_postal_address' => get_user_meta( $userID, 'rcp_postal_address', true ),
            'rcp_email' => get_userdata( $userID )->user_login
        );           
    }
    

    以上所有的工作都很好。当我发出get请求时,返回的内容如下(缩写版本):

    {
        "id": 1,
        "name": "John",
        "url": "http://example.com",
        "description": "",
        "slug": "admin",
    
        ...
    
        "personal_info": {
            "rcp_user_first": "John",
            "rcp_user_last": "Doe",
            "rcp_user_location": "EU",
            "rcp_postal_address": "101 Fake Street",
            "rcp_email": "admin@example.com"
        }
    
        ...
    
    }
    

    我的问题是回拨邮件。我不知道如何编写它来更新 personal_info 字段。我的猜测是这样的事情会奏效:

    public function post_user_info_callback( $value, $user, $fieldName ) { 
    
        return array(
            'rcp_user_first' => update_user_meta( 1, 'rcp_user_first', 'Mark' ),
            'rcp_user_last' => update_user_meta( 1, 'rcp_user_last', 'Smith' ),
            'rcp_user_location' => update_user_meta( 1, 'rcp_user_location', 'NON_EU' ),
            'rcp_postal_address' => update_user_meta( 1, 'rcp_postal_address', '202 Fantasy Street' )
        );           
    
    }
    

    但是这不起作用。顺便说一下,我现在只测试邮递员,这就是为什么我使用静态数据,所以这里的1代表用户id。

    有什么想法吗?

    1 回复  |  直到 8 年前
        1
  •  0
  •   Shibi    8 年前

    首先你要确保你在 personal_info 值,以便运行回调。

    例如,添加邮递员 personal_info[rcp_user_first] 有价值的。 现在将运行回调并更新静态数据。

    然后可以编写一些函数来动态更新每个用户密钥和值对。

    public function post_user_info_callback( $value, $user, $fieldName ) {
    
        $defaultKeys = [
            'rcp_user_first' => '',
            'rcp_user_last' => '',
            'rcp_user_location' => '',
            'rcp_postal_address' => ''
        ];
    
        // filter the value so that we get only our specific keys that we want to update
        $valueArray = array_filter( array_merge( $defaultKeys, array_intersect_key( $value, $defaultKeys ) ) );
    
        $updateArray = [];
        foreach($valueArray as $key=>$val) {
    
            // Here you can add another validation for values.
            $updateArray[$key] = update_user_meta($user->ID, $key, $val);
        }
    
        return $updateArray;
    
    }
    
    推荐文章