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

На странице оформления заказа в WooCommerce я добавляю настраиваемое поле, и все отлично работает, если я использую woocommerce_after_checkout_billing_form hook или woocommerce_before_checkout_form hook.

Проблема в том, что мне нужно, чтобы поле было над заголовком Billing Details, но при использовании woocommerce_checkout_before_customer_details hook все исчезает (даже панель оплаты боковой панели), только мое настраиваемое полезаголовок виден.

Мой код:

// Create Custom checkout Field
add_action('woocommerce_checkout_before_customer_details', 'create_custom_field');

function create_custom_field($checkout) {

    global $woocommerce;
    $cart = $woocommerce->cart->get_cart();
    foreach($cart as $key => $value)
    {               
        $bespoke = $woocommerce->cart->get_item_data($value);
        if (strpos($bespoke, 'yes') !== false) {

            echo '<div id="customise_checkout_field"><h3>' . __('Bespoke Details') . '</h3>';
            woocommerce_form_field('bespoke_field', array(
                'type' => 'textarea',
                'class' => array('my-field-class form-row-wide'),
                'label' => __('Tell us about your idea') ,
                'placeholder' => __('Please explain what you want as detailed as possible...') ,
                'required' => true,),
            $checkout->get_value('bespoke_field'));
            echo '</div>';
        }
    }
}

Есть мысли?Ваше руководство действительно ценится.

1 Ответ

0 голосов
/ 28 октября 2018

$ checkout не существует для этого хука, а затем он не определен.Так получается пустая страница (ошибка).Но вы можете использовать WC()->checkout в качестве замены.

Метод WC_cart get_item_data() устарел, а функция wc_get_formatted_cart_item_data() заменила его с версии Woocommerce 3.3.

Также global $woocommerce и $woocommerce->cart теперь заменены просто WC()->cart.

Попробуйте вместо этого:

// Add a Custom checkout Field
add_action( 'woocommerce_checkout_before_customer_details', 'add_custom_checkout_field' );
function add_custom_checkout_field() {

    // Loop through cart items
    foreach( WC()->cart->get_cart() as $cart_item ) {
        $bespoke = wc_get_formatted_cart_item_data( $cart_item );

        if ( strpos($bespoke, 'yes') !== false ) {

            echo '<div id="customise_checkout_field">';

            echo '<h3>' . __('Bespoke Details') . '</h3>';

            woocommerce_form_field('bespoke_field', array(
                'type'        => 'textarea',
                'class'       => array('my-field-class form-row-wide'),
                'label'       => __( "Tell us about your idea", "woocommerce" ),
                'placeholder' => __( "Please explain what you want as detailed as possible...", "woocommerce" ),
                'required'    => true,
            ), WC()->checkout->get_value('bespoke_field') );

            echo '</div>';
        }
    }
}

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

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