Введите имя и адрес электронной почты на странице продукта и сохраните введенные данные на странице оформления заказа. - PullRequest
0 голосов
/ 26 марта 2020

Я разработал пользовательскую страницу продукта, где я должен разместить форму с полями «Имя» и «Адрес электронной почты». Когда я нажимаю кнопку «Купить», Woocommerce связывает меня со страницей оформления заказа (я избегал страницы корзины). Как ввести имя и адрес электронной почты на странице продукта и сохранить введенные данные на странице оформления заказа? Я сломал голову, пытаясь найти подходящее решение, но, к сожалению, не могу понять, как я могу это сделать. Очень признателен за любую помощь!

1 Ответ

1 голос
/ 26 марта 2020

Вы можете использовать крючки "woocommerce_add_cart_item_data", "woocommerce_get_item_data", "woocommerce_checkout_create_order_line_item".

function my_add_item_data($cart_item_data, $product_id, $variation_id)
{
    if(isset($_REQUEST['user_name']) && $_REQUEST['user_name'] != ""){
        $cart_item_data['user_name'] = sanitize_text_field($_REQUEST['user_name']);
    }
    if (isset($_REQUEST['user_email']) && $_REQUEST['user_email'] != "" ){
        $cart_item_data['user_email'] = sanitize_text_field($_REQUEST['user_email']);
    }
    return $cart_item_data;
}

add_filter('woocommerce_add_cart_item_data', 'my_add_item_data' ,10,3);

function my_add_item_meta($item_data, $cart_item)
{
    if(array_key_exists('user_name', $cart_item))
    {
        $user_name = $cart_item['user_name'];

        $item_data[] = array(
            'key'   => 'User Name',
            'value' => $user_name
        );
    }

    if(array_key_exists('user_email', $cart_item))
    {
        $user_email= $cart_item['user_email'];

        $item_data[] = array(
            'key'   => 'User Email',
            'value' => $user_email
        );
    }

    return $item_data;
}

add_filter('woocommerce_get_item_data', 'my_add_item_meta', 10, 2);

function my_add_custom_order_line_item_meta($item, $cart_item_key, $values, $order)
{
    if(array_key_exists('user_name', $values))
    {
        $user_name = $values['user_name'];

        $item->add_meta_data( 'User Name', $user_name );
    }

    if(array_key_exists('user_email', $values))
    {
        $user_email= $values['user_email'];

        $item->add_meta_data( 'User Email', $user_email);
    }
}

add_action( 'woocommerce_checkout_create_order_line_item', 'my_add_custom_order_line_item_meta', 10, 4 );

Обновлено : Пожалуйста, обратитесь к руководству, https://businessbloomer.com/woocommerce-visual-hook-guide-single-product-page/ 1009 * Вы можете напечатать поля ввода, которые вы хотите поместить в заданную c позицию. Например, используйте действие woocommerce_before_add_to_cart_button, чтобы поместить поля ввода перед кнопкой «Добавить в корзину».

function my_before_add_to_cart_button(){
    echo '<input type="text" name="user_name" placeholder="" value=""/>';
    echo '<input type="text" name="user_email" placeholder="" value=""/>';
}
add_action('woocommerce_before_add_to_cart_button', 'my_before_add_to_cart_button');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...