Сначала вы должны использовать woocommerce_add_cart_item_data
action hook, чтобы сохранить ваш пользовательский тип записи (CTP) Id при добавлении в корзину ... Но для этого вам нужно будет отобразить на своих страницах CTP внутри добавить в корзину, скрытое поле с идентификатором CTP, как:
<input type="hidden" name="ctpost_id" value="<?php echo get_the_id(); ?>">
Теперь вы можете добавить эту подключенную функцию, которая добавит в качестве пользовательских данных корзины ваш CTP Id:
add_filter( 'woocommerce_add_cart_item_data', 'add_custom_cart_item_data', 10, 3 );
function add_custom_cart_item_data( $cart_item_data, $product_id, $variation_id ){
if( isset( $_POST['ctpost_id'] ) ) {
$cart_item_data['ctpost_id'] = wc_clean( $_POST['ctpost_id'] );
}
return $cart_item_data;
}
Второй используемый ловушкой является woocommerce_checkout_create_order_line_item
ловушка действия, чтобы добавить метаданные элемента пользовательского заказа (или внести изменения в данные позиции заказа) . Этот хук срабатывает перед обработкой платежных шлюзов при создании заказа.
Вы можете использовать метод WC_data
add_meta_data()
, чтобы сохранить свой CTP Id в качестве пользовательского идентификатора CTP, например:
add_action( 'woocommerce_checkout_create_order_line_item', 'save_cpt_id_to_order_item_data', 10, 4 );
function save_cpt_id_to_order_item_data( $item, $cart_item_key, $cart_item, $order ){
if( isset($cart_item['ctpost_id']) && $cart_item['ctpost_id'] > 0 ) {
// Add the custom CTP post ID
$item->add_meta_data('_ctpost_id', $cart_item['ctpost_id'] );
}
// And here for example you add seats as custom cart item data
if( isset($cart_item['quantity']) ) {
$item->add_meta_data( 'Seats', $cart_item['quantity'], true );
}
}
Когда заказ будет оплачен , вы сможете обновить все необходимое , так как у вас будет ваш почтовый идентификатор CTP в качестве данных элемента пользовательского заказа .
Затем, наконец, вы можете использовать woocommerce_payment_complete
следующим образом:
add_action( 'woocommerce_payment_complete', 'action_payment_complete_callback', 10, 1 );
function action_payment_complete_callback( $order_id ){
$order = wc_get_order();
// Loop through order items
foreach ( $order->get_items() as $item_id => $item ) {
$ctp_id = $item->get_meta('_ctpost_id'); // Get the CTP post ID
// Your code goes here
}
}
или woocommerce_order_status_changed
крючки типа:
add_action( 'woocommerce_order_status_changed', 'action_order_status_changed_callback', 10, 4 );
function action_order_status_changed_callback( $order_id, $status_from, $status_to, $order ){
if( in_array( $status_to, ['processing','completed'] ) ) {
// Loop through order items
foreach ( $order->get_items() as $item_id => $item ) {
$ctp_id = $item->get_meta('_ctpost_id'); // Get the CTP post ID
// Your code goes here
}
}
}
Похожие: Получить товары для заказа и WC_Order_Item_Product в Woocommerce 3 .