Php 扩展RESTAPI

Php 扩展RESTAPI,php,wordpress,woocommerce,woocommerce-rest-api,Php,Wordpress,Woocommerce,Woocommerce Rest Api,我想扩展woocommerce rest api,以包含其“预订”扩展插件的数据。当前,此扩展没有RESTAPI提供的默认端点 到目前为止,我已经创建了一个插件,并添加了以下代码 add_filter( 'woocommerce_rest_prepare_product', 'custom_data'); function custom_data($response, $object) { if( empty( $response->data ) )

我想扩展woocommerce rest api,以包含其“预订”扩展插件的数据。当前,此扩展没有RESTAPI提供的默认端点

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

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列出的默认数据仍然被称为“我的小附加组件”找不到

我甚至不知道在哪里可以找到上面的过滤器,因为我刚刚在一个网页上看到了这个,我试着让它做我想做的,不知道这是否是正确的方向。网页:

上面是我试图扩展api,但我也决定尝试创建一个自定义端点,看看是否可以获得所需的结果,但到目前为止,我刚刚创建了一个端点,该端点调用了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,因此我需要使用RESTAPI,因为我想使用wordpress/woocommerce作为无头cms


到目前为止,我看到的壁橱示例已经在这个问题上显示了

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

    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
        }
    }

} 
public function\uuuu construct(){
$this->template\u url=apply\u过滤器('woocommerce\u template\u url','woocommerce/'
);
$this->api_名称空间='wc/v';
$this->base='home';
$this->api_version='2';
添加_操作('woocommerce_loaded',数组($this,'register_hooks'));
}
$namespace=$this->api\u名称空间$此->api_版本;
登记休息路线(
$namespace,“/wclogin/”,
排列(
'方法'=>'获取',
'callback'=>array($this'wc_login'),
)
);
函数wc_登录($request){
$user=get_user_by('email',$request[“email”]);
//坏邮件
如果(!$user){
$error=新的WP_错误();
$error->add('invalid',u uu('error:您输入的电子邮件或密码无效。');
返回$error;
}
否则{//请检查密码
如果(!wp_check_password($request[“password”],$user->user_pass,$user->ID)){//密码错误
$error=新的WP_错误();
$error->add('invalid',u uu('error:您输入的电子邮件或密码无效。');
返回$error;
}否则{
返回$user;//已传递
}
}
} 

这只是针对这些问题的更新。现在,有一个用于预订扩展的rest api:

或者,您可以尝试以下代码来扩展WooCommerce rest api的产品响应,而无需另外做,因为您上面的钩子“WooCommerce\u rest\u prepare\u product”用于v1,但当前为v3,因此最新的钩子低于一个(下面的钩子来自RESTAPI的v2控制器,该控制器由v3扩展)


我测试了上面的代码,它工作得非常好。希望它可以帮助搜索类似解决方案的人。

谢谢你回复我!你看
get\u user\u by()
那是一个wordpress函数还是你创建的函数?还有你的
register\u hooks
函数在哪里?
get\u user\u by()
wp函数。
public function register\u hooks(){//REST API.add\u action('REST\u API\u init',array('this,'REST\u API\u register\u routes'));add\u filter('woocommerce\u REST\u prepare\u product',array('this,'REST\u API\u prepare\u brands\u to\u product'),10,2)//WC 2.6.x add\u filter('woocmerce\u REST\u REST\u REST\u准备商店\,array($this,“get_product_order_image”),10,3);
Hey@shamem Ali P.K我想知道你是否能对我的新问题有一些见解。你在得到大家的赞赏之前帮了我很大的忙!链接很棒,但如果你能总结出一种可能的方法来纠正问题中概述的问题,那就更有帮助了。
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;
}