Я создаю пользовательский плагин для своего сайта.
В какой-то части этого плагина мне нужно хранить дополнительную мета в wp_postmeta для каждого заказа.
Я добавил это в мой класс плагина:
`add_action ('woocommerce_before_checkout_process', array( &$this, 'add_item_meta', 10, 2) );`
И это add_item_meta()
:
function add_item_meta( $item_id, $values ) { wc_add_order_item_meta($item_id, '_has_event', 'yes' ); }
Эта функция не является полной, но с этими кодами ничего не происходит; Я думаю, мне нужно использовать другой крючок, но я не могу найти подходящего.
Кто-нибудь знает что-нибудь об этом?
У меня также есть другая проблема с $item_id
: это глобальная переменная woocommerce, но я не вижу ее в своем плагине!
Я имею в виду, что у меня нет доступа к этой переменной из моего плагина или что-то вроде этого!
Путь 2017 года
Основываясь на ответе Мо Саиди, я считаю, что этот фрагмент больше соответствует новому подходу CRUD, введенному WooCommerce 3.0:
add_action('woocommerce_checkout_update_order_meta',function( $order_id, $posted ) { $order = wc_get_order( $order_id ); $order->update_meta_data( 'my_custom_meta_key', 'my data' ); $order->save(); } , 10, 2);
Смотрите также эту тему на форумах WordPress:
Ответ: Я должен использовать woocommerce_checkout_update_order_meta
для add_action, а также просто должен использовать update_post_meta()
чтобы добавить дополнительную мета в мой заказ
function add_item_meta( $order_id ) { //global $woocommerce; update_post_meta( $order_id, '_has_event', 'yes' ); }
Путь 2016:
add_action('woocommerce_checkout_update_order_meta',function( $order_id, $posted ) { update_post_meta( $order_id, 'my_custom_meta_key', 'my data' ); } , 10, 2);
$order_id
– это идентификатор порядка, который сохраняется как пользовательский тип сообщения $posted
все данные из $_POST