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

В Woocommerce я пытаюсь добавить кусок собственной мета в мои продукты, и я хотел бы передать его в заказы.

У нас есть значительное количество продуктов, и они подотчетны различным центрам затрат, поэтому мне нужно поле выбора внутри администратора продукта, чтобы мы могли выбирать центры затрат, которые передают значение в заказ, который не требуется.быть просмотренным клиентом, но должен просматриваться администратором в заказах, а также в экспорте заказов каждый месяц для учета.

Это то, что я пока имею, это отобразит поле выбора на страницах редактирования продукта (admin) :

// Display Fields
add_action( 'woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields' );

function woo_add_custom_general_fields() {

  global $woocommerce, $post;

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

    woocommerce_wp_select( 
    array( 
    'id'      => '_select', 
    'label'   => __( 'Cost Centre', 'woocommerce' ), 
    'options' => array(
        'one'   => __( 'MFEG', 'woocommerce' ),
        'two'   => __( 'YDIT', 'woocommerce' ),
        )
    )
);

  echo '</div>';

}

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

function woo_add_custom_general_fields_save( $post_id ){


    // Select
    $woocommerce_select = $_POST['_select'];
    if( !empty( $woocommerce_select ) )
        update_post_meta( $post_id, '_select', esc_attr( $woocommerce_select ) );

}

Но оно не передает значение в заказ.

Как передать это значение настраиваемого поля в заказ?

1 Ответ

0 голосов
/ 29 сентября 2018

Я немного пересмотрел ваш код.Следующее действие сохранит пользовательское поле продукта «Учетный отдел» как скрытые метаданные элемента заказа, видимые только на страницах редактирования заказа администратора для каждого элемента:

// Admin products: Display custom Field
add_action( 'woocommerce_product_options_general_product_data', 'product_options_general_product_data_add_field' );
function product_options_general_product_data_add_field() {
    global $post;

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

    woocommerce_wp_select( array(
        'id'      => '_cost_centre',
        'label'   => __( 'Cost Centre', 'woocommerce' ),
        'options' => array(
            'MFEG'   => __( 'MFEG', 'woocommerce' ), // Default displayed option value
            'YDIT'   => __( 'YDIT', 'woocommerce' ),
        )
    ) );

    echo '</div>';
}

// Admin products: Save custom Field
add_action( 'woocommerce_process_product_meta', 'product_options_general_product_data_save_field' );
function product_options_general_product_data_save_field( $post_id ){
    if( isset( $_POST['_cost_centre'] ) )
        update_post_meta( $post_id, '_cost_centre', esc_attr( $_POST['_cost_centre'] ) );
}

// Order items: Save product "Cost centre" as hidden order item meta data
add_action('woocommerce_checkout_create_order_line_item', 'save_file_type_as_order_item_meta', 20, 4);
function save_file_type_as_order_item_meta($item, $cart_item_key, $values, $order) {
    if ( $cost_centre = $values['data']->get_meta('_cost_centre') ) {
        $item->update_meta_data( '_cost_centre', $cost_centre ); // Save as order item (visble on admin only)
    }
}

Код помещается в файл function.php вашего активного дочернего элемента.тема (или активная тема).Протестировано и работает.

enter image description here

Экспорт: (В StackOverFlow правило равно oneвопрос для один ответ ) .

Экспорт базовых заказов WordPress / Woocommerce не позволяет экспортировать элементы заказа

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

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