Я застрял с задачей.Я хотел бы добавить дополнительный столбец к столбцам заказа магазина в бэкэнде 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
?
. Любая помощь приветствуется.