Отображать значение поля проверки в списке заказа администраторов заказов Woocommerce.

Я застреваю с задачей. Я хотел бы добавить дополнительную колонку в столбцы порядка магазина в woocommerce backend. Этот дополнительный столбец должен отображать эхо-выход, если клиент проверил поле флажка в кассе.

Поэтому, чтобы добавить дополнительный столбец, это не так сложно. Я сделал это так.

add_filter('manage_edit-shop_order_columns', 'invoice_order_overview');

function invoice_order_overview($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_2'] = 'Extra Column'
//stop editing

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

Поэтому теперь я хотел бы отобразить что-то в этом добавленном столбце. Функция для флажка на странице проверки следующая. Он уже отображает эхо-выход на странице редактирования заказа.

// Add custom checkbox field to checkout 
add_action( 'woocommerce_review_order_before_submit', 'my_custom_checkout_field' );

function my_custom_checkout_field() {
echo '<div id="my_custom_checkout_field">'

woocommerce_form_field( 'my_field_name', array(
    'type'      => 'checkbox',
    'class'     => array('input-checkbox'),
    'label'     => __('Rechnung beilegen? (Sonst nur Lieferschein)'),
),  WC()->checkout->get_value( 'my_field_name' ) );
echo '</div>'
}


// Save the custom checkout field in the order meta, when checkbox has 
been checked
add_action( 'woocommerce_checkout_update_order_meta', 'custom_checkout_field_update_order_meta', 10, 1 );

function custom_checkout_field_update_order_meta( $order_id ) {

if ( ! empty( $_POST['my_field_name'] ) )
    update_post_meta( $order_id, 'my_field_name', 
$_POST['my_field_name'] );
}


// Display the custom field result on the order edit page (backend) 
when checkbox has been checked
add_action( 'woocommerce_admin_order_data_after_billing_address', 'display_custom_field_on_order_edit_pages', 10, 1 );

function display_custom_field_on_order_edit_pages( $order ){
$my_field_name = get_post_meta( $order->get_id(), 'my_field_name', 
true );
if( $my_field_name == 1 )
    echo '<p style="background: #dba029; padding: 1em !important; 
color: #fff; font-weight: 700;"><strong>Rechnung beilegen! </strong> 
</p>'
}

Поэтому я подумал, что можно взять эту переменную $my_field_name и поместить ее в мой новый дополнительный столбец, подобный этому.

add_action('manage_shop_order_posts_custom_column', 'invoice_order_overview_value', 2);

function invoice_order_overview_value($column) {
global $post;

if ($column == 'MY_COLUMN_ID_2') {

$my_field_name = get_post_meta( $order->get_id(), 'my_field_name', true );
   if( $my_field_name == 1 )
      echo 'Rechnung beilegen!'
   } 
}

Но это дает мне ошибку «неопределенной переменной» в добавленном столбце.

Если я только поставлю echo 'Rechnung beilegen!'; в функцию он выводит «Rechnung beilegen» в каждую строку в MY_COLUMN_ID_2. Как это:

add_action('manage_shop_order_posts_custom_column', 'invoice_order_overview_value', 2);

function invoice_order_overview_value($column) {
global $post;

if ($column == 'MY_COLUMN_ID_2') {

      echo 'Rechnung beilegen!'
   } 
}

Поэтому возникает вопрос: как я могу получить результат на основе выбора, сделанного в $my_field_name в MY_COLUMN_ID_2 ?

Любая помощь приветствуется.

Всего 1 ответ


Следующий пересмотренный код добавит настраиваемый столбец и отобразит поле пользовательского поля «Закрытый счет»:

// Add custom checkbox field to checkout
add_action( 'woocommerce_review_order_before_submit', 'my_custom_checkout_field' );

function my_custom_checkout_field() {
    echo '<div id="my_custom_checkout_field">'

    woocommerce_form_field( '_enclosed_invoice', array(
        'type'      => 'checkbox',
        'class'     => array('input-checkbox'),
        'label'     => __('Enclose invoice? (Otherwise only delivery note)'),
    ),  WC()->checkout->get_value( '_enclosed_invoice' ) );

    echo '</div>'
}

// Save the custom checkout field in the order meta, when checkbox has been checked
add_action( 'woocommerce_checkout_create_order', 'save_order_custom_meta_data', 10, 2 );
function save_order_custom_meta_data( $order, $data ) {
    if ( isset($_POST['_enclosed_invoice']) )
        $order->update_meta_data('_enclosed_invoice', Ƈ' );
}

// Display the custom field result on the order edit page (backend) when checkbox has been checked
add_action( 'woocommerce_admin_order_data_after_billing_address', 'display_custom_field_on_order_edit_pages', 10, 1 );
function display_custom_field_on_order_edit_pages( $order ){
    if( $my_field_name = $order->get_meta( '_enclosed_invoice' ) )
        echo '<p style="background: #dba029; padding: 1em !important; color: #fff; font-weight: 700;"><strong>Enclosed invoice!</strong></p>'
}

// Add custom column before "Actions" column in admin orders list
add_filter('manage_edit-shop_order_columns', 'add_enclosed_invoice_order_column', 10, 1 );
function add_enclosed_invoice_order_column( $columns ) {
    // Woocommerce compatibility since version 3.3
    $actions_key = isset($columns['wc_actions']) ? 'wc_actions' : 'order_actions'

    $order_actions = $columns[$actions_key];

    unset($columns[$actions_key]);

    $columns['enclosed_invoice'] = __("Enc. Invoice", "woocommerce");

    $columns[$actions_key] = $order_actions;

    return $columns;
}

// Display data to custom column in admin orders list
add_action( 'manage_shop_order_posts_custom_column' , 'display_enclosed_invoice_order_column_data' );
function display_enclosed_invoice_order_column_data( $column ) {
    global $the_order, $post;

    if( $column  == 'enclosed_invoice' ) {
        if( $enclosed_invoice = $the_order->get_meta( '_enclosed_invoice' ) ) {
            echo __("Yes", "woocommerce");
        } else {
            echo ' - '
        }
    }
}

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

введите описание изображения здесь

Начиная с версии Woocommmerce 3.3, столбец действий списка администраторов был переименован в 'wc_actions' вместо 'order_actions'


Есть идеи?

10000