Заполните выбранные параметры поля из пользовательских значений полей продукта в оформлении заказа Woocommerce - PullRequest
0 голосов
/ 19 мая 2018

РЕДАКТИРОВАТЬ: Решено.Я отредактировал пост с решением.=)

Я пытаюсь заполнить поле выбора на странице оформления заказа значениями из пользовательского поля продукта.Большинство из них работает как талисман, но есть проблема с получением значения на странице оформления заказа.

Создание и сохранение настраиваемого поля

// Display Fields in Backend
add_action( 'woocommerce_product_options_general_product_data', 'srd_add_custom_general_fields' );

// Save Fields
add_action( 'woocommerce_process_product_meta', 'srd_add_custom_general_fields_save' );

// Create Fields
function srd_add_custom_general_fields() {

  global $woocommerce, $post;

  echo '<div class="options_group">';    

    woocommerce_wp_textarea_input(
        array(
            'id'          => '_einstiegsorte',
            'label'       => __( 'Einstiegsorte', 'woocommerce' ),
            'placeholder' => '',
            'description' => __( '', 'woocommerce' )
        )
      );
    }

Сохранить данные

function srd_add_custom_general_fields_save( $post_id ){

$woocommerce_textarea = $_POST['_einstiegsorte'];

        if( !empty( $woocommerce_textarea ) )
        update_post_meta( $post_id, '_einstiegsorte', esc_html( $woocommerce_textarea ) );

Вывести данные по одному продукту и архиву

add_action( 'woocommerce_after_shop_loop_item_title', 'custom_fields_ausgabe_archive', 2 );
add_action( 'woocommerce_single_product_summary', 'custom_fields_ausgabe', 6);

function custom_fields_ausgabe(){

    $list_items = get_post_meta(get_the_ID(), '_einstiegsorte', true);
     if($list_items){?>

        $list_items = explode("\n", $list_items);
            echo '<ul>';
                foreach($list_items as $list_item) {
                    echo '<li>' . $list_item . '</li>';
                }
            echo '</ul>';
    }
}

Добавить поле выбора на страницу оформления заказа и заполнить данными '_einstiegsorte '

add_action('woocommerce_before_checkout_form', 'einstiegswahl_select');
function einstiegswahl_select() {

    foreach ( WC()->cart->get_cart() as $cart_item ) {
        $item = $cart_item['data'];
        if(!empty($item)){
            $product = new WC_product($item->id);

            //$pd_numbers = get_post_meta( $cart_item[ 'product_id' ], '_einstiegsorte', true );      

            $list_items['choices'] = array();   

            $list_items = get_post_meta( $cart_item[ 'product_id' ], '_einstiegsorte', true );
            if($list_items){
                 $list_items = explode("\n", $list_items);
                    echo '<select name=einstiegswahl>';
                foreach($list_items as $list_item) {
                    echo '<option>' . $list_item . '</option>';
                }
            echo '</select>';
            }}}}

1 Ответ

0 голосов
/ 19 мая 2018

Попробуйте просто так:

add_action('woocommerce_before_checkout_form', 'display_einstieg_meta');
function display_einstieg_meta() {
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        echo get_post_meta( $cart_item['data']->get_id(), '_einstiegsorte', true ); 
    }
}

Это должно работать сейчас.Примечание: $cart_item['data'] уже является экземпляром объекта WC_Product ...


Так что , так как в корзине может быть много товаров , ваш код выбранного поля будет:

add_action( 'woocommerce_before_checkout_billing_form', 'custom_einstiegswahl');
function custom_einstiegswahl(){

    echo '<select name=einstiegswahl>';

    // Loop through cart items
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        // Get the custom field data
        $einstiegsorte = get_post_meta( $cart_item['data']->get_id(), '_einstiegsorte', true );
        if( ! empty($einstiegsorte) ){
            // if it's multiline we split it in an array
            $select_field_items = explode( '\n', $einstiegsorte );
            // If the array has more than one item
            if( sizeof( $select_field_items ) > 1 ){
                foreach( $select_field_items as $value )
                    echo '<option value="'. $value .'">' . $value . '</option>';
            } 
            // If there is only one line
            else {
                // we clean it
                $value = str_replace('\n', '', $einstiegsorte);
                echo '<option value="'. $value .'">' . $value . '</option>';
            }
        }
    }

    echo '</select>';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...