Пользовательские поля WooCommerce REST API

Можно ли получить доступ к настраиваемым полям для заказов, продуктов, клиентов через WooCommerce REST API? Если не изначально, то какие плагины, обходные пути или хаки существуют, которые работают? Спасибо!


person Amjad    schedule 02.04.2016    source источник
comment
Что конкретно вы пытаетесь сделать, чего нет в их документации. ? Это сделало бы более конкретный вопрос.   -  person helgatheviking    schedule 02.04.2016
comment
Пользовательские поля, которые обычно добавляются другими плагинами, например, типы заказов. Или если я хочу создать настраиваемое поле для заказа с помощью вызова API.   -  person Amjad    schedule 02.04.2016
comment
Вам нужно будет покопаться в коде в plugins/woocommerce/includes/api/*.php файлах, найти правильное действие или хук фильтра и использовать его. Например: когда WooCommerce создает заказ через API, после создания заказа он предлагает следующий хук do_action( 'woocommerce_api_create_order', $order->id, $data, $this ); в этом хуке у вас есть доступ к $data который был отправлен, вы можете извлечь свои значения настраиваемого поля и обработать его.   -  person Anand Shah    schedule 04.04.2016
comment
этот немного более подробный: stackoverflow   -  person yoni    schedule 18.08.2020


Ответы (2)


Отвечая на мой собственный вопрос:

Это возможно с помощью следующего: (используя устаревший API версии 3)

Чтобы отправить настраиваемые поля обратно на сервер: (для заказов)

{
  "order_meta": {
     "key": "value"
  }
}

Чтобы получить настраиваемые поля с сервера, используйте этот фильтр с вашей конечной точкой:

http://www.example.com/wc-api/v3/orders?filter[meta]=true

Это работает и для продуктов.

person Amjad    schedule 08.04.2016
comment
Можете ли вы указать документы, где это задокументировано. Я борюсь с той же проблемой и почти в тупике. - person Ivan Crojach Karačić; 18.05.2016
comment
Это не задокументировано на страницах WooCommerce API. Я получил ответ от их вопросов github. Это поле является скрытым метаполем. Если у вас есть конкретный вопрос, вы можете задать его здесь. - person Amjad; 19.05.2016
comment
У нас есть пользовательская таксономия Status, назначенная каждому продукту, который я хотел бы получить с помощью Rest API, но я не знаю, как построить строку запроса, чтобы вернуть данные. - person Ivan Crojach Karačić; 20.05.2016
comment
Это абсолютно так. Я широко использую его в своем приложении. Это зависит от того, какую версию API вы используете. Новый API v1 основан на WP API. Это означает, что родительского словаря нет. - person Amjad; 16.07.2016
comment
@HelloWorld, привет. Я пытаюсь обновить метаданные заказа через оболочку С# для Woocommerce, и мне просто интересно, что вы подразумеваете под родительским словарем. API не находит мои данные, а обертка не учитывает метаданные, так как они отсутствуют в документах. - person Magnetize; 04.01.2017
comment
@Magnetize вам пришлось взломать обертку, чтобы это заработало? Я пытаюсь получить доступ к данным платежного шлюза для заказа через WooCommerceNET.WooCommerce. - person Daz; 06.01.2017
comment
@Даз привет! Да, мне пришлось переопределить класс Order новым классом. Я сделал это следующим образом: github.com/XiaoFaye/WooCommerce.NET/issues/73< /а>. Какие данные вам нужны для доступа и какой платежный шлюз вы используете? - person Magnetize; 07.01.2017
comment
@Magnetize Спасибо за ответ, интересно, что API делает немного больше, чем задокументировано. Я хочу получить идентификаторы транзакций для платежа SagePay, на данный момент я предполагаю, что они есть в мета, но еще не подтвердил это. - person Daz; 09.01.2017
comment
@Даз без проблем. Создатель WooCommerceNET ответил в теме выше, что он добавит метаданные в следующем обновлении. Хм, когда я просматривал код в /plugins/woocoommerce/includes/api/class-wc-rest-orders-controller.php, я заметил (в строке 1055), что поля не должны быть защищены (т.е. не могут иметь имена с ведущими _ ) для того, чтобы API обновлял их, а идентификаторы транзакций имеют начальный символ _ Боюсь. Я не пробовал, хотя, но я думаю, что вы могли бы быть довольно сложной задачей. :/ - person Magnetize; 09.01.2017
comment
@Magnetize Спасибо за предупреждение - вызов = нормальная ситуация :-) - person Daz; 09.01.2017
comment
Этот ответ работает как для продуктов, так и для заказов? - person Warlike Chimpanzee; 17.06.2017
comment
@WarlikeChimpanzee да, это так. - person Amjad; 28.02.2019
comment
Это также возможно с последней версией API WooCommerce и расширенными пользовательскими полями. - person Amjad; 12.03.2019
comment
@ Амджад привет. Не могли бы вы добавить пример того, как это можно сделать с помощью последней версии WooCommerce API и расширенных настраиваемых полей? Я пробовал filter[meta]=true, но у меня это не сработало. - person Jehanzeb.Malik; 26.08.2019
comment
Неважно. Я нашел это. Данные расширенных настраиваемых полей находятся в разделе meta_data. Проблема заключалась в том, что я устанавливал значения по умолчанию для настраиваемых полей при создании продукта, но они не сохранялись вместе с продуктом. Только когда я сохранил какое-то значение в этих полях и сохранил продукт, я смог их просмотреть. - person Jehanzeb.Malik; 26.08.2019
comment
Да, вам нужно сначала сохранить продукт, чтобы настраиваемые поля отображались в метаданных. - person Amjad; 27.08.2019

Как упоминалось в комментарии, после того, как WooCommerce создаст заказ через API, он активирует хук woocommerce_api_create_order, и вы можете его использовать.

Добавьте следующий код в файл functions.php вашей темы.

add_action( 'woocommerce_api_create_order', 'my_woocommerce_api_create_order', 10, 2);

function my_woocommerce_api_create_order( $order_id, $data ) {

     // $data contains the data was posted, add code to extract the required
     // fields and process it as required

}

Аналогично посмотрите код в plugins/woocommerce/includes/api/*.php файлах, найдите подходящее действие или фильтр-хук для конечной точки и используйте его.

person Anand Shah    schedule 05.04.2016
comment
Чтобы понять структуру базы данных, см. схему WooCommerce и схема WordPress. Метаданные WordPress позволяют использовать пользовательские пары ключ/значение. - person Warlike Chimpanzee; 18.06.2017