Сортировка заказов по пользовательскому полю WordPress

add_action('woocommerce_checkout_create_order', 'before_checkout_create_order', 20, 2);
function before_checkout_create_order( $order, $data ) {
    if (isset($_POST['delivery_date'])) {
        $delivery_date = sanitize_text_field($_POST['delivery_date']);
        $order->update_meta_data( '_delivery_date', $delivery_date );
        error_log("Delivery date saved for order : $delivery_date");
    } else {
        error_log("No delivery date found in POST request for order $order_id");
    }
}
add_filter( 'manage_woocommerce_page_wc-orders_columns', 'add_delivery_date_column' );
function add_delivery_date_column( $columns ) {
    $new_columns = array();

    foreach ( $columns as $key => $column ) {
        $new_columns[ $key ] = $column;

        if ( 'order_status' === $key ) {
            $new_columns['delivery_date'] = __( 'Delivery Date', 'your-text-domain' );
        }
    }

    return $new_columns;
}


add_action( 'manage_woocommerce_page_wc-orders_custom_column', 'display_delivery_date_column_content', 10, 2 );
function display_delivery_date_column_content( $column, $post_id ) {
    if ( 'delivery_date' === $column ) {
        $order = wc_get_order( $post_id );

        // Используйте правильный ключ метаданных '_delivery_date'
        $delivery_date = $order->get_meta( '_delivery_date', true );

        if ( $delivery_date ) {
            echo esc_html( $delivery_date );
        } else {
            echo '<small>(<em>No delivery date</em>)</small>';
        }
    }
}

// Делаем новый столбец сортируемым
add_filter( 'manage_edit-shop_order_sortable_columns', 'make_delivery_date_column_sortable' );
function make_delivery_date_column_sortable( $columns ) {
    $columns['delivery_date'] = 'delivery_date';
    return $columns;
}

// Поддержка сортировки в запросе
add_action( 'pre_get_posts', 'delivery_date_column_orderby' );
function delivery_date_column_orderby( $query ) {
    if ( ! is_admin() ) {
        return;
    }
    
    error_log(print_r($query, true));

    $orderby = $query->get( 'orderby' );

    if ( 'delivery_date' === $orderby ) {
        $query->set( 'meta_key', '_delivery_date' );
        $query->set( 'orderby', 'meta_value' );
    }
}

Я использую данный код чтоб добавить в страницу заказов столбец "Дата доставки" ниже пытаюсь сделать функцию, чтоб можно было сортировать по этому полю ASC и DESC однако данный столбец не становится кликабельным и не сортируется


Ответы (0 шт):