首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WordPress rest api自定义终结点未获取所有元数据,仅获取某些字段元数据

WordPress rest api自定义终结点未获取所有元数据,仅获取某些字段元数据
EN

Stack Overflow用户
提问于 2020-11-19 00:09:13
回答 1查看 451关注 0票数 0

在WordPress网站上,我已经添加了一个自定义post类型" inventory ".To post数据到创建了一个end rest API端点的清单中。创建的终结点未从库存发布类型获取所有元数据。在inventory post类型中,我有一个输入字段来输入日期,但是在使用端点获取数据时,我没有获得该日期字段数据。我尝试过使用API端点使用register_rest_field()来获取元数据,但在postman中,我只获得了一些字段。

我的HTML代码如下所示

代码语言:javascript
运行
复制
      <div class="from_date inventory-form-to-input">
        <input type="text" style="border: 1px solid #ddd;" class="pac-date-picker hasDatepicker" 
         name="nets_availability_pickup_datetime[]" value="0000-00-00 00:00:00" autocomplete="off" 
           id="dp1605714040849">
      </div>
      <div class="to_date inventory-form-to-input">
        <input type="text" style="border: 1px solid #ddd;" class="pac-date-picker hasDatepicker" 
         name="nets_availability_dropoff_datetime[]" value="0000-00-00 00:00:00" autocomplete="off" 
           id="dp1605714040850">
      </div>

和邮递员的回复:

代码语言:javascript
运行
复制
      {
    "id": 197794,
    "date": "2020-11-03T04:33:35",
    "date_gmt": "2020-11-03T10:33:35",
    "guid": {
        "rendered": "https://mywebsite.com.com/?post_type=inventory&#038;p=197794"
    },
    "modified": "2020-11-17T10:11:24",
    "modified_gmt": "2020-11-17T16:11:24",
    "slug": "000-030-065x-001",
    "status": "publish",
    "type": "inventory",
    "link": "https://mywebsite.com.com/inventory/000-030-065x-001/",
    "title": {
        "rendered": "000-030-065x-001"
    },
    "featured_media": 0,
    "parent": 0,
    "template": "",
    "meta": {
        "nets_hourly_ranges_cost": [
            "a:0:{}"
        ],
        "nets_daily_pricing": [
            "a:0:{}"
        ],
        "nets_monthly_pricing": [
            "a:0:{}"
        ],
        "nets_day_ranges_cost": [
            "a:0:{}"
        ],
        "_edit_lock": [
            "1605629551:619"
        ],
        "_edit_last": [
            "619"
        ],
        "quantity": [
            "1"
        ],
        "pricing_type": [
            "general_pricing"
        ],
        "general_price": [
            "100"
        ],
        "_yoast_wpseo_focuskeywords": [
            "[]"
        ],
        "_yoast_wpseo_keywordsynonyms": [
            "[\"\"]"
        ]
    },
    "quantity": "1",
    "pricing_type": "general_pricing",
    "general_price": "100",
    "nets_availability_block_by": [],
    "nets_availability_pickup_datetime": "",
   
    "_links": {
        "self": [
            {
                "href": "https://mywebsite.com.com/wp-json/wp/v2/inventory/197794"
            }
        ],
        "collection": [
            {
                "href": "https://mywebsite.com/wp-json/wp/v2/inventory"
            }
        ],
        "about": [
            {
                "href": "https://mywebsite.com/wp-json/wp/v2/types/inventory"
            }
        ],
        "wp:attachment": [
            {
                "href": "https://mywebsite.com/wp-json/wp/v2/media?parent=197794"
            }
        ],
        "curies": [
            {
                "name": "wp",
                "href": "https://api.w.org/{rel}",
                "templated": true
            }
        ]
    }
},

尝试使用以下代码创建自定义终结点并获取元数据:

代码语言:javascript
运行
复制
 function my_plugin_rest_route_for_post( $route, $post ) {

    if ( $post->post_type === 'inventory' ) {
    $route = '/wp/v2/inventory/' . $post->ID;
   }
   return $route;
 }
 add_action( 'rest_api_init', function () {
  register_rest_field( 'inventory', 'quantity', array(
    'get_callback' => function( $post_arr ) {
        return get_post_meta( $post_arr['id'], 'quantity', true );
    },
) );
  register_rest_field( 'inventory', 'pricing_type', array(
    'get_callback' => function( $post_arr ) {
        return get_post_meta( $post_arr['id'], 'pricing_type', true );
    },
) );
register_rest_field( 'inventory', 'general_price', array(
    'get_callback' => function( $post_arr ) {
        return get_post_meta( $post_arr['id'], 'general_price', true );
    },
) );
 register_rest_field( 'inventory', 'nets_availability_block_by', array(
    'get_callback' => function( $post_arr ) {
      return get_post_meta( $post_arr['id'], 'nets_availability_block_by',false);

    },
) );
  register_rest_field( 'inventory', 'nets_availability_pickup_datetime', array(
    'get_callback' => function( $post_arr ) {
        return get_post_meta( $post_arr['id'], 'nets_availability_pickup_datetime', true );
    },
) );

 /*used to get all metadata*/
   register_rest_field( 'inventory', 'meta', array(
    'get_callback' => function( $post_arr ) {
        return get_post_meta( $post_arr['id'], '', true );
    },
) );

} );

请任何人建议我如何获得这些日期字段'nets_availability_pickup_datetime‘和'nets_availability_dropoff_datetime’。提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-11-30 21:39:26

您可以从我的一段旧代码中获得灵感。权限回调用于在您的API中添加安全层,但通常是可选的。参数args也是可选的。

代码语言:javascript
运行
复制
register_rest_route('v2/boutique', '/order/status', array(
        'methods' => 'POST',
        'permission_callback' => array($this, 'check_access'),
        'callback' => array($this, "api_check_order"),
        'args' => [
            'transaction_id', 'order_id'
        ],

    ));




public function check_access(WP_REST_Request $request)
{
    // Check credential 
   // if(in_array($_SERVER['REMOTE_ADDR'], self::$available_ip)){
    $creds  = $request->get_header('token');

    if (!empty($creds)) {
        if (self::verify_token(self::$creds_pass, $creds)) {
            return true;
        } else {
            return new WP_Error(
                'rest_forbidden',
                __('Error'),
                array('status' => 404)
            );
        }
    } else {
        return new WP_Error(
            'rest_forbidden',
            __('Error'),
            array('status' => 404)
        );
    }

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

https://stackoverflow.com/questions/64896846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档