Добавить пользовательское поле в качестве метаданных элемента в Заказ - PullRequest
3 голосов
/ 19 июня 2019

Я добавил пользовательское поле для продуктов woocommerce, оно хорошо работает со следующим кодом. Но моя проблема в том, как добавить его к cart_item_data

// Display Text in Admin Panel 
add_action('woocommerce_product_options_general_product_data', 'product_custom_text_field');

function product_custom_text_field()
{

    // Custom Product Text Field ( para Tex Area -> woocommerce_wp_textarea_input )

    woocommerce_wp_text_input(
        array(
        'id'          => '_optional_text_field',
        'label'       => __('Customize title', 'woocommerce'),
        'placeholder' => '',
        'desc_tip' => 'true',
        'description' => __('Customizable title for the field that the user must fill out.', 'woocommerce')
        )
    );
}

Сохранить поля

add_action('woocommerce_process_product_meta', 'product_custom_text_field_save');

function product_custom_text_field_save($post_id)
{
    if (!empty($_POST['_optional_text_field'])) {
        update_post_meta($post_id, '_optional_text_field', esc_attr($_POST['_optional_text_field']));
    }
}

Display The Text in Product Page

    add_action('woocommerce_single_variation', 'display_text_field');

    function display_text_field()
    {
        global $post;
        if (get_post_meta($post->ID, '_optional_text_field', true)) {
            echo "<div class='titulo-c'><label>";
            echo get_post_meta($post->ID, '_optional_text_field', true);
            echo "</label></div>";
            return;
        }

        echo __('FREE LOCAL SHIPPING', 'woocommerce');
    }

Пока это работает без проблем, теперь я хочу добавить его к cart_item_data, с помощью следующего кода, но он не работает для меня.

add_filter( 'woocommerce_add_cart_item_data', 'add_cart_item_data', 25, 2 );
function add_cart_item_data( $cart_item_meta, $product_id ) {

        $custom_data  = array() ;

        $custom_data[ "_optional_text_field"] = isset( $_POST['_optional_text_field'] ) ?  sanitize_text_field ( $_POST['_optional_text_field'] ) : "" ;

        $cart_item_meta ['custom_data']     = $custom_data ;


    return $cart_item_meta;
}

Отображение пользовательских данных на странице корзины и оформления заказа.

add_filter( 'woocommerce_get_item_data', 'get_item_data' , 25, 2 );
function get_item_data ( $other_data, $cart_item ) {
    if ( isset( $cart_item [ 'custom_data' ] ) ) {
        $custom_data  = $cart_item [ 'custom_data' ];

        $other_data[] = array( 'name' => 'Title',
                    'display'  => $custom_data['_optional_text_field'] );

    }

    return $other_data;
}

В результате мне только кажется: Title: ________

Буду признателен за любые предложения, чтобы мой код работал.

1 Ответ

3 голосов
/ 19 июня 2019

Внесите следующие изменения в свой код, как показано ниже, это должно работать.

/**
 * Add data to cart item
 */
add_filter( 'woocommerce_add_cart_item_data', 'add_cart_item_data', 25, 2 );
function add_cart_item_data( $cart_item_meta, $product_id ) {


        global $woocommerce;
        $mytitle_form_data = get_post_meta($product_id, '_optional_text_field', true);

        $custom_data  = array() ;

        $custom_data[ "_optional_text_field"] = $mytitle_form_data;

        $cart_item_meta ['custom_data']     = $custom_data ;

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