Отобразить значение поля оформления заказа в пользовательском столбце списка заказов администратора Woocommerce - PullRequest
0 голосов
/ 16 ноября 2018

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

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

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 Ответ

0 голосов
/ 16 ноября 2018

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

// 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', '1' );
}

// 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 вашей активной дочерней темы (active theme). проверено и работает.

enter image description here

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

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