Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在WooCommerce中添加产品自定义输入文本作为订单项数据_Php_Wordpress_Woocommerce_Hook Woocommerce_Orders - Fatal编程技术网

Php 在WooCommerce中添加产品自定义输入文本作为订单项数据

Php 在WooCommerce中添加产品自定义输入文本作为订单项数据,php,wordpress,woocommerce,hook-woocommerce,orders,Php,Wordpress,Woocommerce,Hook Woocommerce,Orders,我想在不购买插件的情况下实现这一点 不幸的是,我无法通过结帐阶段 以下是我的步骤: //1属性的创建 //2保存属性 //3在前端显示属性 //5将属性添加到购物车 //6在购物车中显示属性 add_filter('woocommerce_cart_item_name','display_custom_attribute_into_cart',10,3); 函数将自定义属性显示到购物车($name、$cart\u item、$cart\u item\u key){ 如果(isset($cart\

我想在不购买插件的情况下实现这一点

不幸的是,我无法通过结帐阶段

以下是我的步骤:

//1属性的创建

//2保存属性

//3在前端显示属性

//5将属性添加到购物车

//6在购物车中显示属性

add_filter('woocommerce_cart_item_name','display_custom_attribute_into_cart',10,3);
函数将自定义属性显示到购物车($name、$cart\u item、$cart\u item\u key){
如果(isset($cart\u item['attribute\u embroided\u text'])){
$name.=sprintf('embroid Text/i:%s',esc_html(
$cart_item['attribute_embroided_text']);
}
返回$name;
}
因此,客户可以在产品页面中看到该字段,填充该字段并将产品添加到购物车,并在购物车页面中看到自己的自定义文本。 直到现在一切都很好

但是,在退房时,我丢失了有关Embroed文本的信息,我无法将其传递下去。 我在退房回顾页面上看不到它 在后端,我刚收到的新“订单”中没有它

我的问题:

  • 是否有类似于$cart\u item的“order”对象

  • 我如何访问它?像一个普通的数组?(例如$cart\u item['attribute\u embroided\u text'])

  • 哪些是获得订单的钩子?(前端和后端

  • 我做错了吗?应该改用变体吗?(我试过了,但最后还是遇到了同样的问题 退房)

整个问题可以总结为“如何向订单添加额外数据”,但我没有找到太多关于它的示例或文档


谢谢

缺少的部分如下所示,它将把您的自定义购物车项目数据保存为订单项目数据,并将其显示在订单和电子邮件中的所有位置(即使在管理中):

代码进入活动子主题(或活动主题)的functions.php文件。它应该会起作用

add_action( 'woocommerce_product_options_general_product_data', 'create_custom_attribute' );

function create_custom_attribute() {
  $args = array(
    'id'            => 'attribute-embroided-text',
    'label'         => __( 'Embroided Text', 'woocommerce' ),
    'class'                 => 'myclass',
    'value'                 => 'placeholder',
    'desc_tip'      => true,
    'custom_attributes' => array('readonly' => 'readonly'),
  );
  woocommerce_wp_text_input( $args );
add_action( 'woocommerce_process_product_meta', 'save_custom_attribute' );

function cfwc_save_custom_field( $post_id ) {
    $product = wc_get_product( $post_id );
    $embroided_text = isset( $_POST['attribute-embroided-text'] ) ? $_POST['attribute-embroided-text'] : '';
    $product->update_meta_data( 'attribute-embroided-text', sanitize_text_field( $embroided_text ) );
}
add_action( 'woocommerce_before_single_variation', 'display_custom_attribute' );

function display_custom_attribute() {
    global $post;
    ...
    printf('<div class="">
              <h4 class="" for="attribute-embroided-text">Embroided Text/i</h4>
              <input class="form-control" type="text" id="attribute-embroided-text" name="attribute-embroided-text" value="">
            </div>');
    ...
}

add_filter( 'woocommerce_add_to_cart_validation', 'validate_custom_attribute', 10, 4 );

function validate_custom_attribute( $passed, $product_id, $quantity ) {
    if(empty( $_POST['attribute-embroided-text'] ) ) {
        $passed = false;
        wc_add_notice( __( 'Field cannot be empty', 'woocommerce' ), 'error' );
    }
    return $passed;
}
add_filter( 'woocommerce_add_cart_item_data', 'add_custom_attribute_to_cart', 10, 4 );

function add_custom_attribute_to_cart( $cart_item_data, $product_id, $variation_id, $quantity ) {
    if( ! empty( $_POST['attribute-embroided-text'] ) ) {
        $cart_item_data['attribute_embroided_text'] = $_POST['attribute-embroided-text'];
    } 
    return $cart_item_data;
}
add_filter( 'woocommerce_cart_item_name', 'display_custom_attribute_into_cart', 10, 3 );

function display_custom_attribute_into_cart( $name, $cart_item, $cart_item_key ) {
    if( isset( $cart_item['attribute_embroided_text'] ) ) {
        $name .= sprintf('<dl class="variation"><dt>Embroided Text/i:</dt><dd>%s</dd></dl>', esc_html( 
    $cart_item['attribute_embroided_text'] ));
    }
    return $name;
}
add_action('woocommerce_checkout_create_order_line_item', 'save_custom_order_item_metadata', 10, 4 );
function save_custom_order_item_metadata( $item, $cart_item_key, $values, $order ) {
    if( isset( $cart_item['attribute_embroided_text'] ) ) 
        $item->update_meta_data( __( 'Embroided Text', 'woocommerce' ), $cart_item['attribute_embroided_text'] );
}