扩展 woocommerce 休息 api

Extending the woocommerce rest api

我想扩展 woocommerce rest api 以包含其 'booking' 扩展插件的数据。目前此扩展没有其他 api 提供的默认端点。

到目前为止,我已经创建了一个插件,并添加了以下代码;

add_filter( 'woocommerce_rest_prepare_product', 'custom_data');

function custom_data($response, $object) {
        if( empty( $response->data ) )
            return $response;

        $response->data['meta_data'] = get_post_meta( $object[ID], 'availability', true);
        return $response;
    }

当我调用终点时 /products 只有 woocommerce 概述的默认数据仍然被称为我的小插件是找不到的。

我什至不知道在哪里可以找到上面的过滤器,因为我刚刚在网页上看到这个,我试图让它做我想做的事,不知道这是否是正确的方向下来要么。网页:https://francescocarlucci.com/woocommerce/woocommerce-api-custom-data-default-endpoints/#more-96

以上是我尝试扩展 api 但我还决定尝试创建一个自定义端点以查看我是否可以获得我想要的结果,但到目前为止我只是创建了一个调用但的端点我不知道要写什么来检索我想要的数据。

自定义终点代码:

function register_custom_route() {
            register_rest_route( 'ce/v1', '/bookable',
                  array(
                    'methods' => 'GET',
                    'callback' => 'get_bookable'
                  )
          );
        }


        function get_bookable( ) {
            return array( 'custom' => 'woocommerce here' );
//What code do I write here :(

        }

有没有办法通过以上方法达到我想要的效果? 我对开发很陌生,我熟悉 javascript 而不是 PHP 因此我需要使用其余的 api 因为我想使用 wordpress/woocommerce 作为无头cms。

到目前为止,我遇到的壁橱示例已在这个问题上显示 Creating WooCommerce Custom API

这只是我的代码的一部分。一些未定义的变量。而这只是概念。希望您可以根据您的要求进行修改。

    public function __construct() {     
    $this->template_url = apply_filters( 'woocommerce_template_url', 'woocommerce/' 
);
    $this->api_namespace = 'wc/v';
    $this->base = 'home';
    $this->api_version = '2';       
    add_action( 'woocommerce_loaded', array( $this, 'register_hooks' ) );
}

    $namespace = $this->api_namespace . $this->api_version;     
         register_rest_route(
            $namespace, '/wclogin/',
            array(
                'methods'  => 'GET',
                'callback' => array( $this, 'wc_login'),
        )
    );



   function wc_login($request){


    $user = get_user_by('email', $request["email"]);

    //bad email
    if(!$user){
        $error = new WP_Error();
        $error->add('invalid', __('<strong>ERROR</strong>: Either the email or password you entered is invalid.'));
        return $error;
    }
    else{ //check password
        if(!wp_check_password($request["password"], $user->user_pass, $user->ID)){ //bad password
            $error = new WP_Error();
            $error->add('invalid', __('<strong>ERROR</strong>: Either the email or password you entered is invalid.'));
            return $error;
        }else{
            return $user; //passed
        }
    }

} 

只是为那些提出这个问题的人更新。现在,预订延期还有休息api:https://docs.woocommerce.com/document/bookings-rest-api-reference/

或者,您可以尝试使用以下代码来扩展 WooCommerce REST API 的产品响应,而无需另外执行,因为您上面的钩子 "woocommerce_rest_prepare_product" 适用于 v1但目前它是 v3 所以最新的挂钩在一个下面(下面的挂钩来自 v2 controller of rest api,由 v3 扩展)。

add_filter('woocommerce_rest_prepare_product_object', 'so54387226_custom_data', 10, 3);

function so54387226_custom_data($response, $object, $request) {
    if (empty($response->data))
        return $response;
    $id = $object->get_id(); //it will fetch product id 
    $response->data['booking_meta_data'] = get_post_meta($id, 'availability', true);
    return $response;
}

我测试了上面的代码,它工作得很好。希望对寻找类似解决方案的人有所帮助。