Custom rest api in WordPress

add_action( 'rest_api_init', function () {
  register_rest_route( 'codetot/v1', '/update_post/(?P<post_id>\d+)', array(
    'methods'               => 'POST',
    'callback'              => 'ct_update_post_callback',
    'permission_callback'   => 'ct_permission_update_callback',
    'args'                  => [
        'post_id' => [
            'required' => true,
            'validate_callback' => function ($param) {
                return is_numeric(absint($param));
            },
            'sanitize_callback' => 'absint'
        ]
    ]
  ));
});

function ct_permission_update_callback( $request ) {
    $headers        = $request->get_headers();
    $authorization  =  $headers['authorization'][0];

    if ( empty($authorization) ) {
        if (is_user_logged_in()) {
            return true;
        }

        return new WP_Error('400', _x('Bad request. You are not logged in.', 'rest api', 'codetot') );
    } else {
        $token_arr = explode(' ', $authorization);
        $token_data = ct_get_access_token($token_arr[1]);

        if ( $token_data['expires'] <= strtotime(current_time('mysql')) ) {
            return new WP_Error('401', _x('Bad request. Access token expires.','rest api', 'codetot'), $token_data ); 
        }

        return true;
    }
}

function ct_update_post_callback( $request ) {
    $post_id    = $request['post_id'];
    $params     = $request->get_body_params();
    $files      = $request->get_file_params();
    
    if ( empty($params) ) {
        return new WP_REST_Response([
            'code' => 'bad_request',
            'message' => _x('Bad request. Missing data.', 'rest api', 'codetot'),
        ], 400);
    }

    // Handle data here

    return new WP_REST_Response([
        'code'      => 'success',
        'message'   => esc_html__('Update post success.', 'codetot'),
    ], 200);
}

Leave a Reply

Your email address will not be published. Required fields are marked *