Расширение api woocommerce rest

Я хотел бы расширить api woocommerce rest, включив в него данные плагина расширения «бронирование». В настоящее время это расширение не имеет конечных точек по умолчанию, предоставляемых остальным 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.

Пока что пример туалета, к которому я пришел, был показан по этому вопросу Создание WooCommerce Пользовательский API


person kadddeee    schedule 27.01.2019    source источник


Ответы (3)


это только часть моего кода. какая-то переменная не определена. и это всего лишь концепция. надеюсь, вы можете изменить в соответствии с вашими требованиями.

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

} 
person Shameem Ali    schedule 27.01.2019
comment
Спасибо, что связались со мной! вы видите get_user_by() это функция wordpress или созданная вами? - person kadddeee; 04.02.2019
comment
Также где живет ваша register_hooks функция? - person kadddeee; 04.02.2019
comment
get_user_by() функция wp. - person Shameem Ali; 07.02.2019
comment
Привет, @shameem Али П.К. Мне было интересно, не могли бы вы рассказать о моей новой проблеме stackoverflow.com/questions/54673763/. Вы оказали такую ​​большую помощь, прежде чем очень ценили! - person kadddeee; 14.02.2019

В качестве альтернативы вы можете попробовать приведенный ниже код для расширения ответа продукта WooCommerce REST API без дополнительных действий, так как указанный выше крючок "woocommerce_rest_prepare_product" предназначен для v1, но в настоящее время это v3, поэтому ловушка для последнего находится ниже единицы (приведенная ниже ловушка взята из контроллера v2 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;
}

Я протестировал приведенный выше код, он отлично работает. Надеюсь, это может помочь кому-то, кто ищет подобное решение.

person Vignesh Pichamani    schedule 26.04.2020

Просто обновление для тех, кто задается этим вопросом. Теперь есть API отдыха для расширения бронирования: https://docs.woocommerce.com/document/bookings-rest-api-reference/.

person Manuel    schedule 03.07.2019
comment
Ссылки хороши, но было бы еще полезнее, если бы вы суммировали возможный способ решения проблемы, описанной в вопросе. - person Shanteshwar Inde; 03.07.2019