Сохранить пользовательские значения из кассы Woocommerce как метаданные пользовательского заказа - PullRequest
1 голос
/ 07 марта 2019

В Woocommerce у меня есть страница оформления заказа (порядок просмотра) с пользовательскими данными.Мне нужно найти хук для регистрации некоторых пользовательских данных ($totaleiva_1 и $totalefinitocarrello) в заказе, а затем я должен отправить их по электронной почте с новым заказом.

Я не могу сделать это дляпример.Любой совет или помощь, пожалуйста?


Редактировать - это мой код:

$totaleiva_1 = 0; 
$items = $woocommerce->cart->get_cart(); 
foreach($items as $item ) { 
    $totaleiva_1 += $totalForSebeneArray[$item ['data']->get_id()]; 
} 
$totaleiva_1 = number_format($totaleiva_1, 2, '.', ''); 
$totalefinitocarrello = $totaleiva_1 + $total; echo "€"; 
echo $totalefinitocarrello; 

1 Ответ

0 голосов
/ 01 апреля 2019

Вам нужно будет добавить и отобразить 2 скрытых поля с 2 желаемыми значениями (чтобы иметь возможность получать и сохранять их как метаданные пользовательского заказа при отправке) .

Также ваш код немного устарел и его можно упростить.

Вот ваш повторный код:

$totaleiva_1 = 0; 

// Loop through cart items
foreach (WC()->cart->get_cart() as $cart_item ) { 
    $totale_iva_1 += $totalForSebeneArray[$cart_item['data']->get_id()]; 
} 

$totale_finito_carrello = wc_price( $totale_iva_1 + $total ); 

echo $totale_finito_carrello; 

// Display 2 hidden input fields
echo '<input type="hidden" id="totaleiva1" name="totaleiva1" value="'.$totale_iva_1.'">
<input type="hidden" id="tfcarrello" name="tfcarrello" value="'.$totale_finito_carrello.'">';

Затем вы сохраните эти данные как метаданные пользовательского заказа, используя:

add_action('woocommerce_checkout_create_order', 'save_order_custom_meta_data', 10, 2 );
function save_order_custom_meta_data( $order, $data ) {
    if( isset($_POST['totaleiva1']) && ! empty($_POST['totaleiva1']) ) {
        $order->update_meta_data( '_totale_iva_1', esc_attr( $_POST['totaleiva1'] ) );
    }
    if( isset($_POST['tfcarrello']) && ! empty($_POST['tfcarrello']) ) {
        $order->update_meta_data( '_totale_fin_carrello', esc_attr( $_POST['tfcarrello'] ) );
    }
}

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


Теперь, чтобы получить эти данные и использовать их где угодно:

1) из идентификатора заказа переменная, используйте:

$totaleiva_1 = get_post_meta( $order_id, '_totale_iva_1', true );
$totalefinitocarrello = get_post_meta( $order_id, '_totale_fin_carrello', true );

2 из объекта WC_Order:

$totaleiva_1 = $order->get_meta('_totale_iva_1');
$totalefinitocarrello = $order->get_meta('_totale_fin_carrello');

Для отображения в уведомлении о новом заказе Woocommerce, вы будете использовать:

add_action( 'woocommerce_email_order_details', 'email_order_details_action_callback', 5, 4 );
function email_order_details_action_callback( $order, $sent_to_admin, $plain_text, $email ){
    if( $email->id === 'new_order' ) {
        if ( $tiva1  = $order->get_meta('_totale_iva_1') ) {
            echo '<p>'. __("Totale IVA") . ': ' . $tiva1 . '</p>';
        }

        if ( $tfcarr = $order->get_meta('_totale_fin_carrello') ) {
            echo '<p>'. __("Totale finito carrello") . ': ' . $tfcarr . '</p>';
        }
    }
}

Отображение полей на страницах заказа администратора:

add_action( 'woocommerce_admin_order_data_after_billing_address', 'admin_order_after_billing_address_callback', 10, 1 );
function admin_order_after_billing_address_callback( $order ){
    if ( $tiva1  = $order->get_meta('_totale_iva_1') ) {
        echo '<p>'. __("Totale IVA") . ': ' . $tiva1 . '</p>';
    }
    if ( $tfcarr = $order->get_meta('_totale_fin_carrello') ) {
        echo '<p>'. __("Totale finito carrello") . ': ' . $tfcarr . '</p>';
    }
}

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

Теперь я думаю, что все ваши пользовательские расчеты IVA могут быть обработаны Woocommerce с использованием доступных возможностей настроек, поскольку вы делаете вещи намного более сложными повсюду.

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