Подтвердить что ты не робот

Пользовательский стол WooCommerce

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

Как это сделать?

4b9b3361

Ответ 1

В случае, если кому-то это еще нужно - инструкции по добавлению новых столбцов в список заказов Woocommerce. Не нужно отключать столбцы по умолчанию, просто добавьте это в свой файл functions.php, и ваш код будет действителен для обновлений.

1. Определение местоположения и имен столбцов

add_filter( 'manage_edit-shop_order_columns', 'MY_COLUMNS_FUNCTION' );
function MY_COLUMNS_FUNCTION($columns){
    $new_columns = (is_array($columns)) ? $columns : array();
    unset( $new_columns['order_actions'] );

    //edit this for you column(s)
    //all of your columns will be added before the actions column
    $new_columns['MY_COLUMN_ID_1'] = 'MY_COLUMN_1_TITLE';
    $new_columns['MY_COLUMN_ID_2'] = 'MY_COLUMN_2_TITLE';
    //stop editing

    $new_columns['order_actions'] = $columns['order_actions'];
    return $new_columns;
}

2. Для каждого настраиваемого столбца укажите значения

add_action( 'manage_shop_order_posts_custom_column', 'MY_COLUMNS_VALUES_FUNCTION', 2 );
function MY_COLUMNS_VALUES_FUNCTION($column){
    global $post;
    $data = get_post_meta( $post->ID );

    //start editing, I was saving my fields for the orders as custom post meta
    //if you did the same, follow this code
    if ( $column == 'MY_COLUMN_ID_1' ) {    
        echo (isset($data['MY_COLUMN_1_POST_META_ID']) ? $data['MY_COLUMN_1_POST_META_ID'] : '');
    }
    if ( $column == 'MY_COLUMN_ID_2' ) {    
        echo (isset($data['MY_COLUMN_2_POST_META_ID']) ? $data['MY_COLUMN_2_POST_META_ID'] : '');
    }
    //stop editing
}

3. (необязательно) Функция для сортировки столбцов

add_filter( "manage_edit-shop_order_sortable_columns", 'MY_COLUMNS_SORT_FUNCTION' );
function MY_COLUMNS_SORT_FUNCTION( $columns ) {
    $custom = array(
        //start editing

        'MY_COLUMN_ID_1'    => 'MY_COLUMN_1_POST_META_ID',
        'MY_COLUMN_ID_2'    => 'MY_COLUMN_2_POST_META_ID'

        //stop editing
    );
    return wp_parse_args( $custom, $columns );
}

Ответ 2

Теперь я встретил Woocommerce. Добавили пользовательское поле Personal Registration Number - и теперь хотели, чтобы он отображался на странице обзора заказа.

Мне удалось добавить столбец - но все равно не удалось получить значение настраиваемого поля для каждого заказа.

Вот что я сделал:

// Removed Existing Order Page collumns
remove_filter('manage_edit-shop_order_columns', 'woocommerce_edit_order_columns');

// Added My own filter to Show the PRN - Personal Registration field
add_filter('manage_edit-shop_order_columns', 'omak_edit_order_columns');

// The omak_edit_order_columns definition
/*** Taken from admin/post_types/shop_order.php ***/
function omak_edit_order_columns($columns){
global $woocommerce;

$columns = array();

$columns["cb"]          = "<input type=\"checkbox\" />";
$columns["order_status"]    = __( 'Status', 'woocommerce' );    
$columns["order_title"]     = __( 'Order', 'woocommerce' );
$columns["order_prn"]       = __( 'PRN', 'woocommerce' );    // This is the line which added the column after the Title Column
$columns["billing_address"]     = __( 'Billing', 'woocommerce' );
$columns["shipping_address"]    = __( 'Shipping', 'woocommerce' );
$columns["total_cost"]      = __( 'Order Total', 'woocommerce' );
$columns["order_comments"]  = '<img alt="' . esc_attr__( 'Order Notes', 'woocommerce' ) . '" src="' . $woocommerce->plugin_url() . '/assets/images/order-notes_head.png" class="tips" data-tip="' . __( 'Order Notes', 'woocommerce' ) . '" width="12" height="12" />';

$columns["note"]                = '<img src="' . $woocommerce->plugin_url() . '/assets/images/note_head.png" alt="' . __( 'Customer Notes', 'woocommerce' ) . '" class="tips" data-tip="' . __( 'Customer Notes', 'woocommerce' ) . '" width="12" height="12" />';

 $columns["order_date"]             = __( 'Date', 'woocommerce' );
$columns["order_actions"]       = __( 'Actions', 'woocommerce' );

return $columns;
}

Сообщите мне, если это поможет вам...

Мне остается рассмотреть, как получить его значения для каждого ордера.

Как прокомментировано: определение функции существует в shop_order.php в плагине WooCommerce. Дайте мне знать, если кто-нибудь разобрался или знает, как это сделать.

Спасибо, (извините, был занят чем-то, поэтому не мог прочитать, чтобы проверить ошибки)

Ответ 3

Следующие работы для WooCommerce 2.6.2. Вы должны изучить два новых крючка:

1. Определение заголовков столбцов

add_filter('woocommerce_admin_order_item_headers', 'so13683162_headers');
function so13683162_headers($order) {
    echo "<th>FIELD1</th>";
}

2. Заполнение значений в строках

add_filter('woocommerce_admin_order_item_values', 'so13683162_values');
function so13683162_values($product) {
    if (isset($product -> id)) {
        $attrs = get_post_meta($product -> id, "_product_attributes", true);
        echo "<td>" . $attrs["FIELD1"]["value"] . "</td>";
    }
}

Ответ 4

Чтобы добавить новый купон столбца в таблицу заказов woo-commerce и получить весь код купона в соответствии с заказом. вам нужно скопировать и вставить в ваш файл function.php.

add_filter('manage_edit-shop_order_columns', 'custom_shop_order_column', 11);

function custom_shop_order_column($columns) {
    //add columns
    $columns['my-column1'] = __('Coupons Code', 'theme_slug');
    return $columns;
}

// adding the data for each orders by column (example)
add_action('manage_shop_order_posts_custom_column', 'cbsp_credit_details', 10, 2);

function cbsp_credit_details($column) {
    global $post, $woocommerce, $the_order;
    $order_id = $the_order->id;

    switch ($column) {
        case 'my-column1' :
            // $myVarOne = wc_get_order_item_meta( $order_id, 15, true );
            if ($the_order->get_used_coupons()) {

                $coupons_count = count($the_order->get_used_coupons());
                foreach ($the_order->get_used_coupons() as $coupon) {
                    echo $coupon;

                    $i++;
                }

                echo '</p>';
            }
           // echo $myVarOne;
            break;
    }
}

Ответ 5

Попробуйте это, вы получите свое решение, просто напишите ниже код в файле function.php.

add_filter( 'manage_edit-shop_order_columns','your_function_name',10 );
function your_function_name($columns){
        $columns['delivery_date'] = __('Delivery date','textdomain');
        return $columns;
    }
add_action( 'manage_shop_order_posts_custom_column','your_other_function_name',20 );
function  your_other_function_name($column)
{
    swith($column)
    {
        case 'delivery_date':  // your custom code here and do what you want.
    }
}