Je voudrais étendre l'API de repos woocommerce pour inclure les données de son plugin d'extension 'booking'. Actuellement, cette extension n'a pas de points de terminaison par défaut fournis par l'API restante.

Jusqu'à présent, j'ai créé un plugin et j'ai ajouté le code suivant;

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

Lorsque j'appelle le point final /products, seules les données par défaut décrites par woocommerce sont toujours appelées mon petit module complémentaire n'est nulle part.

Je ne sais même pas où trouver le filtre ci-dessus car je viens de le voir publié sur une page Web et j'ai essayé de le faire faire ce que je voulais, je ne sais pas si c'est la bonne direction pour descendre non plus. Page Web: https://francescocarlucci.com/woocommerce / woocommerce-api-custom-data-default-endpoints / # more-96

Ce qui précède était que j'essayais d'étendre l'API, mais j'ai également décidé d'essayer de créer un point de terminaison personnalisé pour voir si je peux obtenir le résultat souhaité, mais jusqu'à présent, je viens de créer un point de terminaison qui appelle mais je ne sais pas quoi écrire pour récupérer les données que je veux.

Code de point final personnalisé:

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 :(

        }

Est-il possible de réaliser ce que je veux de toute façon avec l'une des méthodes ci-dessus? Je suis assez nouveau dans le domaine du développement et je suis familier avec javascript et non avec PHP, d'où mon besoin de vouloir utiliser le reste de l'API car je voudrais utiliser wordpress / woocommerce comme cms sans tête.

Jusqu'à présent, l'exemple de placards auquel je suis arrivé a été montré sur cette question Création de WooCommerce API personnalisée

2
kadddeee 27 janv. 2019 à 13:40

3 réponses

Meilleure réponse

Ce n'est qu'une partie de mon code. une variable non définie. et ce concept juste. avec un peu de chance, vous pouvez modifier selon vos besoins.

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

} 
1
Shameem Ali 27 janv. 2019 à 12:36

Vous pouvez également essayer le code ci-dessous pour étendre la réponse produit de l'API REST WooCommerce sans faire de plus, car votre crochet ci-dessus "woocommerce_rest_prepare_product" est pour v1 mais actuellement il était v3 donc le le crochet pour le dernier est inférieur à un (le crochet ci-dessous provient du contrôleur v2 de l'api de repos qui est étendu par la 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;
}

J'ai testé le code ci-dessus, il fonctionne parfaitement bien. J'espère que cela peut aider quelqu'un qui recherche une solution similaire.

0
Vignesh Pichamani 26 avril 2020 à 19:06

Juste une mise à jour pour ceux qui viennent à cette question. Maintenant, il existe une API de repos pour l'extension de réservation: https: // docs .woocommerce.com / document / bookings-rest-api-reference /

0
Manuel 3 juil. 2019 à 06:42