Отображение пользовательских данных на страницах редактирования купона администратора Woocommerce - PullRequest
1 голос
/ 22 сентября 2019

Для каждого купона, который я определил в системе, я хотел бы показать статистику использования: с какими объемами продаж он был использован, сколько скидок он предоставил и т. Д ... Я хотел бы добавить эти данные на страницу редактирования этого купонав админке (в виде новой вкладки или метабокса)

Итак, у меня есть код для подсчета всех продаж, использованных этим купономНо как мне добавить его на страницу редактирования купона в woocommerce admin

function get_sales_by_coupon($coupon_id) {

    $args = [
        'post_type' => 'shop_order',
        'posts_per_page' => '-1',
        'post_status' => ['wc-processing', 'wc-completed']
    ];
    $my_query = new WP_Query($args);
    $orders = $my_query->posts;

    $total = 0;

    foreach ($orders as $key => $value) {

        $order_id = $value->ID;
        $order = wc_get_order($order_id);
        $items = $order->get_items('coupon'); 

        foreach ( $items as $item ) {

            if( $item['code'] == $coupon_id ) {
                $total += $order->get_total();
            }
        }
    }
    return 'Total sales for coupon "' . $coupon_id . '": ' . wc_price($total);
}

1 Ответ

2 голосов
/ 23 сентября 2019

Чем больше заказов вы получите, тем больше будет ваша функция ... Вместо этого будет гораздо лучше сделать прямой более легкий SQL-запрос, который получит сумму заказов для определенного кода купона.

Затем, используя настраиваемый боковой метабокс на страницах редактирования купона, вы сможете отобразить следующее:

// Get totals orders sum for a coupon code
function get_total_sales_by_coupon( $coupon_code ) {
    global $wpdb;

    return (float) $wpdb->get_var( $wpdb->prepare("
        SELECT SUM( pm.meta_value )
        FROM {$wpdb->prefix}postmeta pm
        INNER JOIN {$wpdb->prefix}posts p
            ON pm.post_id = p.ID
        INNER JOIN {$wpdb->prefix}woocommerce_order_items woi
            ON woi.order_id = pm.post_id
        WHERE pm.meta_key = '_order_total'
        AND p.post_status IN ('wc-processing','wc-completed')
        AND woi.order_item_name LIKE '%s'
        AND woi.order_item_type = 'coupon'
    ", $coupon_code ) );
}

// Adding Meta container to admin shop_coupon pages
add_action( 'add_meta_boxes', 'add_custom_coupon_meta_box' );
if ( ! function_exists( 'add_custom_coupon_meta_box' ) )
{
    function add_custom_coupon_meta_box()
    {
        add_meta_box( 'coupon_usage_data', __('Usage data','woocommerce'), 'custom_coupon_meta_box_content', 'shop_coupon', 'side', 'core' );
    }
}

// Displaying content in the meta container on admin shop_coupon pages
if ( ! function_exists( 'custom_coupon_meta_box_content' ) )
{
    function custom_coupon_meta_box_content() {
        global $post;

        $total = get_total_sales_by_coupon( $post->post_title );

        printf( __("Total sales: %s"), wc_price( $total ) );

    }
}

Код помещается в файл functions.php вашей активной дочерней темы (или активной темы).Проверено и работает.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...