3
votes

Extension de l'API de repos woocommerce

Je voudrais étendre l'API rest de 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;

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

        }

Quand 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 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é:

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

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 l'API personnalisée WooCommerce


0 commentaires

3 Réponses :


2
votes

ce n'est qu'une partie de mon code. une variable non définie. et ce concept juste. j'espère que vous pourrez 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
        }
    }

} 


5 commentaires

Merci de revenir vers moi! vous voyez get_user_by () cette fonction est-elle une fonction wordpress ou celle que vous avez créée?


Où réside également votre fonction register_hooks ?


get_user_by () fonction wp.


public function register_hooks () {// API REST. add_action ('rest_api_init', array ($ this, 'rest_api_register_routes')); add_filter ('woocommerce_rest_prepare_product', array ($ this, 'rest_api_prepare_brands_to_product'), 10, 2); // WC 2.6.x add_filter ("woocommerce_rest_prepare_shop_order_object", array ($ this, "get_product_order_image"), 10, 3); }


Hé @shameem Ali PK Je me demandais si vous pouviez donner un aperçu de mon nouveau problème stackoverflow.com/questions/54673763/... . Vous avez été d'une si grande aide avant d'être très apprécié!



0
votes

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 /


1 commentaires

Les liens sont excellents, mais il serait encore plus utile si vous pouviez résumer une façon possible de corriger le problème décrit dans la question.



3
votes

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 hook ci-dessus "woocommerce_rest_prepare_product" est pour v1 mais actuellement il était v3 strong > donc le crochet pour le dernier est en dessous de 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 commentaires