Это ужасное название, извините. Хотя это было лучшее, что я мог придумать. Я немного озадачен, пытаясь достичь этого.
Соответствующие части программного обеспечения:
Моя конечная цель: каждый раз, когда подписка взимается, на судовой станции должна отображаться текущая «итерация» подписки для этого заказа, т.е. сколько раз предмет был заряжен как часть подписки.
Поэтому, когда клиент изначально подписывается, на судовой станции должна отображаться цифра «1», связанная с товаром. Если подписка продлевается на шестой месяц и оплачивается ежемесячно, на судовой станции должна отображаться цифра «6», связанная с товаром.
Подписки Woocommerce отслеживают этот номер, как показано на странице администрирования «Подписки». Это число выделено на правой стороне этот скриншот.
Это число генерируется путем подсчета количества связанных заказов, так что технически это не подсчитывает продления, но в итоге получается то же самое для этой цели.
Первая проблема заключается в том, что это на уровне «идентификатора подписки», и чтобы доставить его на судоходную станцию, нам нужно переместить его на уровень «мета заказа» или «мета заказа».
Поскольку у заказа теоретически может быть несколько подписок, я думаю, что не получится поместить его на уровень «мета порядка». Поэтому я думаю, что его нужно будет присвоить метаинформации фактического элемента в заказе.
Shipstation выглядит так, поэтому, возможно, не представляется возможным отобразить что-либо на уровне заказа, когда вы переходите к представлению «заказанные товары», оно отображает некоторую информацию, такую как SKU и варианты. Я не хочу превращать это число в реальный вариант, но, похоже, логически должен быть какой-то способ, чтобы информация отображалась в одной строке.
Так что я думаю, что я должен:
1) При покупке или продлении подписки подсчитайте количество связанных заказов с соответствующей подпиской и сохраните их где-то в «мета позиции заказа».
2) Затем отправляйте эту информацию на судовую станцию каждый раз, когда экспортируется соответствующий заказ.
Я бесконечно гуглил и нашел несколько порций информации, которая могла бы помочь мне сделать первый шаг, но я действительно не уверен в своем курсе. Я не могу сделать эти данные фактической вариацией элемента, поэтому я должен делать это как пользовательский атрибут элемента?
Любая помощь или указатели в правильном направлении будет принята с благодарностью. Я был немного удивлен, что не смог найти больше людей, которые ранее искали подобную функциональность.
Заранее спасибо!
Я понял это. Это заняло у меня намного больше времени, чем следовало бы из-за чего-то такого простого, но казалось, что не хватает большого количества документации и множество других вариантов использования, на которые я мог ссылаться, включая устаревшие функции и т. Д.
В конце концов я перевел это на уровень «мета-заказ», а не на уровень «мета-элемент заказа», поскольку понял, что одновременная покупка нескольких элементов подписки по-прежнему объединяет их в одну подписку с единичными повторяющимися заказами.
Для тех, кто хочет подобную функциональность в будущем, это работает правильно для меня сейчас.
// woocommerce_subscription_payment_complete fires on both initial orders and renewals
add_action('woocommerce_subscription_payment_complete', 'add_iteration', 10, 2);
function add_iteration($subscription) {
// $subscription_id is extraneous and can be removed
$subscription_id = $subscription->id;
// gather relevant data
$payment_count = $subscription->get_completed_payment_count();
$related_orders = $subscription->get_related_orders();
$arrayKeys = array_keys($related_orders);
$parent_order_id = end($related_orders);
$current_order_id = $related_orders[$arrayKeys[0]];
// add data to order meta
update_post_meta($current_order_id, '_iterations', $payment_count);
}
// send it to shipstation
add_filter( 'woocommerce_shipstation_export_custom_field_2', 'shipstation_custom_field_2' );
function shipstation_custom_field_2() {
return '_iterations';
}
Других решений пока нет …