• Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Решено Радиокнопки на странице оформления заказа

Dim

Новичок
Добрый день, делаю себе сайт на woocommerce использую тему Bidge. Пока делаю на mamp на локалке. Сделал дочернюю тему вношу правки почти все вопросы смог решить, но пару никак не могу победить, я пока нуб двигаюсь по туторам и хелпам, поэтому вопросы может не очень то и умные сорри.

В общем, я сделал радио кнопки на странице оформления заказа по тутору добавив код который привожу ниже в functions.php. Радио кнопки отображаются и выбираются, но есть две проблемы.

1) Когда не выбрана не одна из радио кнопок вместо сообщения прописанного в коде вылезает сообщение " INTERNAL SERVER ERROR ".

2) Если кнопка выбрана заказ проходит успешно но в письме информация из этих радио кнопок не приходит. подкажите как ее можно добавить в письмо.




PHP:
<?php
/**
 * Outputs a rasio button form field
 */
function woocommerce_form_field_radio( $key, $args, $value = '' ) {
              global $woocommerce;
                $defaults = array(
                                 'type' => 'radio',
                                'label' => '',
                                'placeholder' => '',
                                'required' => false,
                                'class' => array( ),
                                'label_class' => array( ),
                                'return' => false,
                                'options' => array( )
                );
                $args     = wp_parse_args( $args, $defaults );
                if ( ( isset( $args[ 'clear' ] ) && $args[ 'clear' ] ) )
                                $after = '<div class="clear"></div>';
                else
                                $after = '';
                $required = ( $args[ 'required' ] ) ? ' <abbr class="required" title="' . esc_attr__( 'required', 'woocommerce' ) . '">*</abbr>' : '';
                switch ( $args[ 'type' ] ) {
                                case "select":
                                                $options = '';
                                                if ( !empty( $args[ 'options' ] ) )
                                                                foreach ( $args[ 'options' ] as $option_key => $option_text )
                                                                                $options .= '<input type="radio" name="' . $key . '" id="' . $key . '" value="' . $option_key . '" ' . selected( $value, $option_key, false ) . 'class="select">' . $option_text . '' . "\r\n";
                                                $field = '<p class="form-row ' . implode( ' ', $args[ 'class' ] ) . '" id="' . $key . '_field">
<label for="' . $key . '" class="' . implode( ' ', $args[ 'label_class' ] ) . '">' . $args[ 'label' ] . $required . '</label>
' . $options . '
</p>' . $after;
                                                break;
                } //$args[ 'type' ]
                if ( $args[ 'return' ] )
                                return $field;
                else
                                echo $field;
}
/**
 * Add the field to the checkout
 **/
add_action( 'woocommerce_after_checkout_billing_form', 'hear_about_us_field', 10 );
function hear_about_us_field( $checkout ) {
                echo '<div id="hear_about_us_field" style="background: lightgoldenrodyellow;"><h3>' . __( 'How\'d you First find us?' ) . '</h3>';
                woocommerce_form_field_radio( 'hear_about_us', array(
                                 'type' => 'select',
                                'class' => array(
                                                 'here-about-us form-row-wide'
                                ),
                                'label' => __( '' ),
                                'placeholder' => __( '' ),
                                'required' => false,
                                'options' => array(
                                                'Google' => 'Google<br/>',
                                                'Other Search' => 'Other Search Engine<br/>',
                                                'Friend' => 'Friend<br/>',
                                                'Friend/Facebook' => 'Facebook/Friend<br/>',
                                                'Cristal' => 'CristalProStyler on YoutTube',
                                                'Other' => 'Other<br/>'
                                               
                                )
                ), $checkout->get_value( 'hear_about_us' ) );
                echo '</div>';
}
/**
 * Process the checkout
 **/
add_action( 'woocommerce_checkout_process', 'my_custom_checkout_field_process' );
function my_custom_checkout_field_process( ) {
                global $woocommerce;
                // Check if set, if its not set add an error.
                if ( !$_POST[ 'hear_about_us' ] )
                                $woocommerce->add_error( __( 'Please enter something into this new shiny field.' ) );
}
/**
 * Update the order meta with field value
 **/
add_action( 'woocommerce_checkout_update_order_meta', 'hear_about_us_field_update_order_meta' );
function hear_about_us_field_update_order_meta( $order_id ) {
                if ( $_POST[ 'hear_about_us' ] )
                                update_post_meta( $order_id, 'How did you hear about us?', esc_attr( $_POST[ 'hear_about_us' ] ) );
}
?>
 
Последнее редактирование:

Dim

Новичок
Может быть подскажите другой вариант как сделать радиокнопки на странице оформления заказа?
 

Dim

Новичок
Проблему решил!!!!

К сожалению при использовании темы Bridge плагины не работают, да и код вручную только с атрибутом типа 9999.
Ошибку я нашел, может кому пригодится в будущем. в указанном мной коде стоит видимо старый вариант проверки, он сейчас не работает. сейчас его надо заменить на :

PHP:
/**
 * Process the checkout
 **/
add_action( 'woocommerce_checkout_process', 'my_custom_checkout_field_process' );
function my_custom_checkout_field_process( ) {
           
                if ( !$_POST[ 'hear_about_us' ] )
                    wc_add_notice( __( ''Please enter something into this new shiny field.'.' ), 'error' );
}
потом после обновления меты нужно добавить радио кнопки в рассылку почты следующим кодом:


PHP:
}

/**
 * Add radio buttons to email
 **/

add_filter('woocommerce_email_order_meta_keys', 'my2_custom_order_meta_keys');
    function my2_custom_order_meta_keys( $keys ) {
        $keys[] = 'How did you hear about us?';
        return $keys;
        }

после этого все работает корректно и отправляется по почте
 
Сверху Снизу