Woocommerce получает номер дополнительного заказа в заказах нескольких поставщиков

#wordpress #woocommerce #dokan

#wordpress #woocommerce #dokan

Вопрос:

Я использую плагин woocommerce и dokan в WordPress. После того, как я пытаюсь заказать продукт у нескольких поставщиков, я получаю номер дополнительного заказа на странице благодарности. Я пытаюсь получить номер дополнительного заказа, запустив этот код ниже, но не работает.

 //example order id
$order = wc_get_order(1234);

$order_id = $order->get_id();

$sub_orders = get_children( 
   array(    
     'post_parent' => $order_id,    
     'post_type'   => 'shop_order',    
     'post_status' => array( 
        'wc-pending', 
        'wc-completed', 
        'wc-processing', 
        'wc-on-hold' 
       )
   ) 
);

 

когда я пытаюсь var_dump($sub_order) , я получаю результат массива 0.
есть ли способ получить дополнительный заказ?

Ответ №1:

Я нашел эту функцию в плагине:

 /**
 * 
 * @global object $wpdb
 * @param type $parent_order_id
 * @return type
 */
function dokan_get_suborder_ids_by ($parent_order_id){
    
    global $wpdb;
     
     $sql = "SELECT ID FROM " . $wpdb->prefix . "posts
             WHERE post_type = 'shop_order'
             AND post_parent = " . $parent_order_id;
     
     $sub_orders = $wpdb->get_results($sql);

    if ( ! $sub_orders ) {
        return null;
    }
    
    return $sub_orders;
 

Я думаю, вы можете использовать ее, например, для получения дополнительных заказов:

 $order = wc_get_order(1234);

$order_id = $order->get_id();

$sub_orders = dokan_get_suborder_ids_by($order_id);

foreach($sub_orders as $sub_order) {
    $child_order = wc_get_order($sub_order);
    var_dump($child_order);
}
 

Надеюсь, вам поможет

Ответ №2:

Попробуйте это:

 $parent_order = wc_get_order(1234);

$sub_orders = get_children([
    'post_parent' => dokan_get_prop( $parent_order, 'id' ),
    'post_type'   => 'shop_order',
]);
 

Обратите внимание, что если родительский заказ содержит товары только от одного поставщика, ваша $sub_orders переменная будет пустой.