REST API自定义终结点获取不起作用的页面和帖子

时间:2020-04-22 作者:sialfa

我正在从头开始构建一个将使用vue的主题。引擎盖下的js。我现在使用标准的wordpress端点来获取页面和帖子,我真的会创建自定义端点作为响应传递,这是一组自定义数据,而不是RESTAPI提供的默认数据。我已经为菜单注册了一个自定义端点,它工作正常。我现在想再注册两个端点来获取页面和帖子,但我无法使这些工作正常进行。我将从端点得到一个404或500错误,我需要修复这个错误。为了获得评估页面或帖子,我使用了slug,这意味着GETPOST 请求需要将该参数作为querystring。我不知道我的代码是否正确,但我无法在我的functions.php 文件任何帮助都将不胜感激。

功能。php

// NB: the code is part of a small class that manage the routes. the register_rest_route function
// is inside a class method and the rest_api_init is called correctly 
   register_rest_route( \'theme/v1\', \'/pages/\', array(
      \'method\' => \'GET\',
      \'callback\' => array($this, \'get_page_data\')
    ));

  public function get_page_data( $request )
  {
    //var_dump( $request );
    $slug = $request->get_params(\'slug\');
    $page = get_page_by_path( $slug, OBJECT, \'page\' );  
    $page_meta = get_page_meta( $page->ID ); 
    $images = get_post_gallery_images( $page->ID );

    foreach( $images as $image_url ){
      $attachments_url[] = $image_url;
    }  

    $data = array(
      \'ID\' =>  $page->ID,
      \'title\' => get_the_title( $page->ID ),
      \'content\' => strip_shortcodes($page->post_content),
      \'excerpt\' => $page->post_excerpt,
      \'page_meta\' => $page_meta,
      \'attached_images\' => $attachments_url,
      \'featured_image\' => get_the_post_thumbnail_url( $page->ID )
    );
    return $data;
  }

// In the vue app js file the url for the request is 
https://mysitedomain.com/wp-json/theme/v1/pages?slug=pageslug 

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

首先,有一个default endpoint for retrieving pages, 但我猜你是故意不使用它的?

现在,您的代码存在以下问题:

$request->get_params() 获取所有参数,而不是单个参数。因此,对于单个参数,应该使用$request->get_param().

$slug = $request->get_params(\'slug\');  // incorrect
$slug = $request->get_param( \'slug\' ); // correct
500 可能是因为没有名为get_page_meta 在WordPress中。你是想用get_post_meta?

$page_meta = get_page_meta( $page->ID ); // incorrect
$page_meta = get_post_meta( $page->ID ); // correct
// or do you have a custom get_page_meta() function?
methods 而不是method. 对于完全相同的回调(和参数),可以提供方法数组。(见以下示例)

我猜你错了404 因为您试图向自定义端点发出POST请求,在这种情况下,由于您尚未为POST请求添加端点,因此可能会出现错误。添加它,就像下面的例子一样here 或参见以下内容:

register_rest_route( \'theme/v1\', \'/pages\', array(
    array(
        \'methods\'  => \'GET\',
        \'callback\' => array( $this, \'get_page_data\' ),
    ),
    array(
        \'methods\'  => \'POST\',
        \'callback\' => array( $this, \'get_page_data\' ),
    ),
) );

// or provide an array of methods:
register_rest_route( \'theme/v1\', \'/pages\', array(
    \'methods\'  => [ \'GET\', \'POST\' ],
    \'callback\' => array( $this, \'get_page_data\' ),
) );