首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Wp Rest Api自定义端点POST请求

Wp Rest Api自定义端点POST请求
EN

Stack Overflow用户
提问于 2016-12-28 12:34:16
回答 4查看 21.7K关注 0票数 12

我正在尝试将一些数据发布到我创建的自定义api端点,

这是我的wordpress自定义端点代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
register_rest_route( 'api/v1', '/cities', array(
    'methods' => 'POST',
    'callback' => 'create_city_from_data'
));

为了进行测试,我尝试像这样返回请求

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function create_city_from_data($req) {
  return ['req' => $req];
}

但我总是收到空对象作为响应,无论我在有效负载中发送什么,我都没有收到任何东西。

我的有效负载是这样的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{ name: 'Hello', population: 565656 }

这是从请求中接收到的内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{"req":{}}
EN

回答 4

Stack Overflow用户

发布于 2019-09-13 12:09:47

通过使用以下代码,您可以查看您的有效负载。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    add_action('rest_api_init', function () {
        register_rest_route( 'api/v1', '/cities', array(
            'methods' => 'POST',
            'callback' => 'create_city_from_data'
        ));
    });
    function create_city_from_data($req) {
        $response['name'] = $req['name'];
        $response['population'] = $req['population'];

        $res = new WP_REST_Response($response);
        $res->set_status(200);

        return ['req' => $res];
    }

我已经使用postman查看了POST参数

票数 13
EN

Stack Overflow用户

发布于 2017-09-15 12:51:19

通过使用此函数,您可以在API中查看您的自定义帖子类型的所有帖子...在你的应用编程接口查看器中获取所有帖子。写入器URL在你的应用编程接口查看器上(例如,我使用了Postman json API view,google chrome adon)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Domain-name/wp-json/showFavorites/v2?post_type=hotel

这里的“酒店”是自定义的邮寄类型。

在functions.php中添加此函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
add_action( 'rest_api_init', 'wp_api_show_favorites_endpoints' );
function wp_api_show_favorites_endpoints() {
  register_rest_route( 'showFavorites', '/v2', array(
        'methods' => 'GET',
        'callback' => 'showFavorites_callback',
    ));
}
function showFavorites_callback( $request_data ) {
  global $wpdb;
    $data = array();

    $table        = 'wp_posts';
  $parameters = $request_data->get_params();
  $post_type = $parameters['post_type'];

  if($post_type!=''){
      $re_query     = "SELECT * FROM $table where post_type='$post_type'";
      $pre_results  = $wpdb->get_results($re_query,ARRAY_A);   
      return $pre_results;

  }else{
      $data['status']=' false ';
      return $data;

  } 
}

,你可以通过API发布你的内容。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        // POST All Posts using API
add_action( 'rest_api_init', 'wp_api_add_posts_endpoints' );
function wp_api_add_posts_endpoints() {
  register_rest_route( 'addPost', '/v2', array(
        'methods' => 'POST',
        'callback' => 'addPosts_callback',
    ));
}
function addPosts_callback( $request_data ) {
  global $wpdb;
  $data = array();
  $table        = 'wp_posts';

  // Fetching values from API
  $parameters = $request_data->get_params();
  $user_id = $parameters['user_id'];
  $post_type = $parameters['post_type'];
  $post_title = $parameters['post_title'];
  $the_content = $parameters['the_content'];
  $cats = $parameters['cats'];
  $the_excerpt = $parameters['the_excerpt'];
  $feature_img = $parameters['featured_image'];

  // custom meta values
  $contact_no = $parameters['contact_no'];
  $email = $parameters['email'];
  $hotel_url = $parameters['hotel_url'];


  if($post_type!='' && $post_title!=''){

      // Create post object
      $my_post = array(
        'post_title' => wp_strip_all_tags( $post_title),
        'post_content' => $the_content,
        'post_author' => '',
        'post_excerpt' => $the_excerpt,
        'post_status' => 'publish',
        'post_type' => $post_type,
      );
      $new_post_id = wp_insert_post( $my_post );


      function wp_api_encode_acf($data,$post,$context){
          $customMeta = (array) get_fields($post['ID']);

           $data['meta'] = array_merge($data['meta'], $customMeta );
          return $data;
      }

      if( function_exists('get_fields') ){
          add_filter('json_prepare_post', 'wp_api_encode_acf', 10, 3);
      }


      // Set post categories
      $catss = explode(',', $cats);
      if (!empty($catss)) {
        if ($post_type == 'post') {
          wp_set_object_terms( $new_post_id, $catss, 'category', false );
        }
        else{
          wp_set_object_terms( $new_post_id, $catss, 'Categories', false );   // Executes if posttype is other
        }
      }

      // Set Custom Metabox
      if ($post_type != 'post') {
        update_post_meta($new_post_id, 'contact-no', $contact_no);
        update_post_meta($new_post_id, 'email', $email);
        update_post_meta($new_post_id, 'hotel-url', $hotel_url);
      }

      // Set featured Image
      $url = $feature_img;
      $path = parse_url($url, PHP_URL_PATH);
      $filename = basename($path);

      $uploaddir = wp_upload_dir();
      $uploadfile = $uploaddir['path'] . '/' . $filename;

      $contents= file_get_contents($feature_img);
      $savefile = fopen($uploadfile, 'w');
      chmod($uploadfile, 0777);
      fwrite($savefile, $contents);
      fclose($savefile);

      $wp_filetype = wp_check_filetype(basename($filename), null );

      $attachment = array(
          'post_mime_type' => $wp_filetype['type'],
          'post_title' => $filename,
          'post_content' => '',
          'post_status' => 'inherit'
      );

      $attach_id = wp_insert_attachment( $attachment, $uploadfile );

      if ($attach_id) {
        set_post_thumbnail( $new_post_id, $attach_id );
      }

      if ($new_post_id) {
          $data['status']='Post added Successfully.';  
      }
      else{
        $data['status']='post failed..';
      }

  }else{
      $data['status']=' Please provide correct post details.';
  }

  return ($data);
}
票数 12
EN

Stack Overflow用户

发布于 2019-08-13 17:00:15

传递给回调函数的对象参数是一个WP_REST_REQUST对象,其上有一个get_body()方法,该方法返回HTTP Post请求的payload/post body

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function create_city_from_data(WP_REST_Request $req) {
  $body = $req->get_body()
  return ['req' => $body];
}

我今天在阅读this article的时候了解到了这一点。

您还可以在方法签名中声明对象的类型,以防需要在文档中搜索它(就像我上面所做的那样)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41362277

复制
相关文章
局部变量错误
UnboundLocalError: local variable 'xxx' referenced before assignment
狼啸风云
2020/06/08
1.4K0
变量作用域经典错误
这段代码中X = X + Y,python是无法识别左边的X是局部变量,右边的X是全局变量的。 同样,我们使用C++来实现上面python代码的相同操作,如下:
zy010101
2022/01/10
2810
Python变量引用错误
虽然定义了变量n,然后在函数内部修改,但是还是报相同的错误。原因在于在函数内部对变量n进行修改后,变量n被python解释器理解为局部变量,就变成和上面代码一样的情况了。
狼啸风云
2020/07/06
1.3K0
实时错误 '91' :对象变量或with块变量未设置
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/9672911
DannyHoo
2018/09/13
4.1K0
实时错误 '91' :对象变量或with块变量未设置
实时错误 ‘91‘ :对象变量或with块变量未设置
最多的应该就是这个问题了,“实时错误‘91’:对象变量或with块变量未设置”。如右图:
DannyHoo
2022/05/09
2.3K0
实时错误 ‘91‘ :对象变量或with块变量未设置
openjpeg:解决静态链接时未定义引用错误:undefined reference to `__imp_opj_xxxxxxx'
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/50598753
10km
2019/05/25
4.6K0
openjpeg:解决静态链接时未定义引用错误:undefined reference to `__imp_opj_xxxxxxx'
完美解决丨#在python中,如果引用的变量未定义,则会报告NameError: name ‘变量名‘ is not defined。
在python中,如果引用的变量未定义,则会报告NameError: name '变量名' is not defined。
不吃西红柿
2023/04/21
2.9K0
C/C++未定义行为
下面是一段代码,这段代码中有标准未定义的行为。代码如下: #include<iostream> using namespace std; int main() { int j = 0;
zy010101
2020/04/16
3.7K0
关于MATLAB中M文件如何解决“未定义函数或变量”的若干办法
在本问题提供解决办法前,整个过程先引入一个实例可以更好地说明这个问题: 例:从键盘输入一个4位数,按如下规则加密后输出。加密规则:每位数字都加上7,然后用和除以10的余数取代该数字;再把第一位与第三位交换,第二位与第四位交换。 解: 函数文件:
荣仔_最靓的仔
2021/02/02
12.3K0
关于MATLAB中M文件如何解决“未定义函数或变量”的若干办法
再也不用担心变量类型错误!学会JS中如何轻松检查变量类型
如果判断的是基本数据类型或JavaScript内置对象,使用toString;如果要判断的是自定义类型,请使用instanceof。
程序视点
2023/06/13
4120
再也不用担心变量类型错误!学会JS中如何轻松检查变量类型
DS-5/RVDS4.0变量初始化错误
最近总是有各种调试时的错误,内存错误一般,我无意中发现的所有全局变量失败,也就是说,全局变量声明之后,颂值早期值误.
全栈程序员站长
2022/07/06
3850
DS-5/RVDS4.0变量初始化错误
解决调用未定义 swoole_async_readfile函数问题
https://github.com/swoole/swoole-src/issues/2439
全栈程序员站长
2022/07/11
4K0
解决调用未定义 swoole_async_readfile函数问题
c++使用了未定义类型_c++如何新建
第一个参数是一个指向SECURITY_ATTRIBUTES结构体的指针,一般的情况下,可以是nullptr。
全栈程序员站长
2022/11/09
2.7K0
GDB读取动态库中定义的全局变量错误
最近看了一篇getopt使用的文章,为了追踪其执行的逻辑,于是采用GDB挂载调试的方式进行查看。但却出现了GDB打印全局变量optind的时候出现错误。
河边一枝柳
2021/08/06
2.1K0
IE11出现"__doPostBack”未定义
  系统做迁移,在新服务器IIS上部署,部署后的系统在IE8和其他浏览器上显示正常,
_一级菜鸟
2020/07/22
2.6K0
ubuntu gcc编译时对’xxxx’未定义的引用问题
http://www.cnblogs.com/oloroso/p/4688426.html
bear_fish
2018/09/19
8.2K0
优雅地创建未定义类PHP对象
在PHP中,如果没有事先准备好类,需要创建一个未定义类的对象,我们可以采用下面三种方式:
硬核项目经理
2019/11/21
2.8K0
Array find方法在UC浏览器未定义
今天发现用UC浏览器访问一个项目出现bug,后来检查出来原来UC浏览器并没有find方法(但它有filter方法),所以写了以下垫片。。。
javascript.shop
2019/09/04
2.7K0
点击加载更多

相似问题

RoR - Model.all,但没有created_at和updated_at字段

30

插入未保存的created_at、updated_at列

50

不自动将created_at和updated_at插入到不工作的laravel中

26

updated_at和created_at字段在使用InserGetId函数插入集合时不会自动插入?

11

添加默认值与created_at相同的updated_at列

110
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文