Я пытаюсь получить соответствующий заказ (идентификатор заказа) из одного из идентификаторов позиций.
Например, один случай: при редактировании заказа и удалении элемента строки (сделанного с помощью Ajax) Woocommerce предоставляет только хук "woocommerce_before_delete_order_item"
и передает только $item_id
. (Функция woo выполняет sql, а не среду WP). Мне нужен идентификатор заказа «принадлежности», чтобы совершить какое-то действие!
Мое решение до сих пор состоит в том, чтобы перебирать все заказы и сравнивать идентификатор предметов, а также прерывать и возвращать идентификатор заказа, когда происходит совпадение.
Это способ замедлить или «громоздко и неуклюже» при сохранении 10000 и более заказов в текущем магазине.
Это НЕ работает:
wp_get_post_parent_id ( $item_id )
Но я надеюсь, что есть аналогичный вызов, или мне нужно выполнить поиск по БД SQL
? Любой ответ, связанный с mySQL
, сделайте его "готовым к копированию и вставке". Я отлично разбираюсь в PHP, но не справляюсь или никогда не пишу свой собственный SQL.
Спасибо за любую помощь! Ниже приведено мое решение:
$order_id = my_wc_get_order_from_item_id($item_id);
function my_wc_get_order_from_item_id($id) {
$orders = get_posts('post_type=shop_order&numberposts=-1&post_status=publish');
foreach($orders as $obj) {
$order = new WC_Order($obj->ID);
if ( count( $order->get_items('line_item') ) > 0 ) {
foreach($order->get_items('line_item') as $item_id => $item ) {
if($item_id == $id) $return_value = $obj->ID;
if(isset($return_value)) break;
}
}
unset($order);
if(isset($return_value)) break;
}
if(isset($return_value)) return $return_value;
else return 0;
}