电子邮件,管理员订单和“谢谢”页面上的WooCommerce 4.0自定义结帐和ACF字段值

Mostapha Marbouh

我很难将我的自定义字段值打印到电子邮件通知,订购管理员和“谢谢”页面。我浏览了StackOverflow,尝试了找到的每个答案,但不幸的是无法正常工作,但我无法弄清楚问题:我正在尝试传递附加checkout字段的值,它只打印带有空白值的强标签,而电子邮件中没有任何显示,这是到目前为止的代码:

//new pickup location checkout field
add_action( 'woocommerce_before_order_notes', 'pickup_location_custom_checkout_field' );

function pickup_location_custom_checkout_field( $checkout ) {

    echo '<div><h3>' . __('Pick-up location') . '</h3>';

    woocommerce_form_field( 'pick_up_location', array(
        'type'          => 'text',
        'class'         => array('notes'),
        'label'         => __('<span style="color:red">[IMPORTANT]</span> Where should we meet you?'),
        'placeholder'   => __('Please enter your accomodation name or the nearest pick-up point if not accessible by car'),
        'required'     => true,
        ), $checkout->get_value( 'pick_up_location' ));

    echo '</div>';

}

// Save the pickup location data to the order meta
add_action( 'woocommerce_checkout_create_order', 'pickup_location_checkout_field_update_order_meta' );
function pickup_location_checkout_field_update_order_meta( $order_id ) {
    if (!empty($_POST['pick_up_location'])) {
        update_post_meta( $order_id, 'Pick-up location', sanitize_text_field( $_POST['pick_up_location']));
    }
}

// Display 'pickup location' on the order edit page (backend)
add_action( 'woocommerce_admin_order_data_after_shipping_address', 'pickup_location_checkout_field_order_page', 10, 1 );
function pickup_location_checkout_field_order_page($order){
    global $post_id;
    $order = new WC_Order( $post_id );
    echo '<p><strong style="color:red">'.__('Pickup Location').':</strong> ' . get_post_meta($order->get_id(), '_pick_up_location', true ) . '</p>';

// Display 'pickup location' in "Order received" and "Order view" pages (frontend)
add_action( 'woocommerce_order_details_after_order_table', 'display_client_pickup_data_in_orders', 10 );
function display_client_pickup_data_in_orders( $order ) {
    global $post_id;
    $order = new WC_Order( $post_id );
    echo '<p><strong style="color:red">'.__('Pickup Location').':</strong> ' . get_post_meta($order->get_id(), '_pick_up_location', true ) . '</p>';
}

// Display 'pickup location data' in Email notifications
add_filter( 'woocommerce_email_order_meta_fields', 'display_client_pickup_data_in_emails', 10, 3 );

function display_client_pickup_data_in_emails( $fields, $sent_to_admin, $order ) {
    $fields['Pickup Location'] = array(
        'label' => __( 'Pickup Location' ),
        'value' => get_post_meta( $order->get_id(), 'pick_up_location', true ),
    );
    return $fields;
}

不管我尝试什么,该代码仅打印标签,而没有来自结帐表单的任何值。我知道这个问题已经问过很多遍了,但是我尝试了每个答案超过6天而没有运气。我还需要提及的是,我在该项目中使用的是Woocommerce Bookings。谢谢你的帮助


[更新:]在购物车,管理订单,客户订单,结帐和电子邮件中保存并显示ACF字段。感谢@ 7uc1f3r的详细解释,他的回答帮助我以类似的方式显示了ACF字段,它也基于@LoicTheAztec的this回答

在ATC上方的产品页面上显示自定义字段:

// Displaying Pick-up time custom field value in single product page
add_action( 'woocommerce_before_add_to_cart_button', 'add_pickup_time_custom_field', 0 );
function add_pickup_time_custom_field() {
    global $product;
    //(compatibility with WC +3) 
    $product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id;

    echo "<div class='pickup-time-atc'>";
    echo "<span>Pick-up time: </span>";
    echo get_field( 'pick_up_time', $product_id );
    echo "</div>";

    return true;
}

在单个产品页面中显示自定义字段值

将接送时间自定义字段保存到购物车和会话中

// Saving Pick-up time custom field into cart and session
add_filter( 'woocommerce_add_cart_item_data', 'save_pickup_time_custom_field', 10, 2 );
function save_pickup_time_custom_field( $cart_item_data, $product_id ) {
    $custom_field_value = get_field( 'pick_up_time', $product_id, true );
    if( !empty( $custom_field_value ) ) 
    {
        $cart_item_data['pick_up_time'] = $custom_field_value;
    }
    return $cart_item_data;
}

在购物车和结帐时呈现提货时间自定义字段元

// Render Pick-up time meta on cart and checkout
add_filter( 'woocommerce_get_item_data', 'render_pickuptime_meta_on_cart_and_checkout', 10, 2 );
function render_pickuptime_meta_on_cart_and_checkout( $cart_data, $cart_item ) {
    $custom_items = array();
    // Woo 2.4.2 updates
    if( !empty( $cart_data ) ) {
        $custom_items = $cart_data;
    }
    if( isset( $cart_item['pick_up_time'] ) ) {
        $custom_items[] = array( "name" => "Pickup time", "value" => $cart_item['pick_up_time'] );
    }
    return $custom_items;
}

在购物车和结帐时呈现自定义字段元

将自定义字段元添加到订单管理员详细信息

// Add pickup time custom field meta to order admin
add_action( 'woocommerce_checkout_create_order_line_item', 'pickuptime_checkout_create_order_line_item', 10, 4 );
function pickuptime_checkout_create_order_line_item( $item, $cart_item_key, $values, $order ) {
  if( isset( $values['pick_up_time'] ) ) {
    $item->add_meta_data(
      __( 'Pickup time' ),
      $values['pick_up_time'],
      true
    );
  }
}

将自定义字段元添加到订单管理员详细信息

将提取时间自定义字段元添加到电子邮件

// Add pickup time custom field meta to emails
add_filter( 'woocommerce_order_item_name', 'pickuptime_order_item_emails', 10, 2 );
function pickuptime_order_item_emails( $product_name, $item ) {
  if( isset( $item['pick_up_time'] ) ) {
    $product_name .= sprintf(
      '<ul"><li>%s: %s</li></ul>',
      __( '<span style="color:red !important">Pickup time</span>' ),
      esc_html( $item['pick_up_time'] )
     ); 
  }
  return $product_name;
}

将提取时间自定义字段元添加到电子邮件

如果您发现任何错误或改进方法,请发表评论,谢谢。

Woocommerce 4.0.0和Wordpress 5.3.2

7uc1f3r

逐步检查您的代码

update_post_meta( $order_id, 'Pick-up location', sanitize_text_field( $_POST['pick_up_location']));
echo '<p><strong style="color:red">'.__('Pickup Location').':</strong> ' . get_post_meta($order->get_id(), '_pick_up_location', true ) . '</p>';
'value' => get_post_meta( $order->get_id(), 'pick_up_location', true ),

您可以使用Pick-up location_pick_up_locationpick_up_location作为meta_key而这应该是3倍的值相同。

您还会错过按pickup_location_checkout_field_order_page功能关闭的标记

您还会在某些参数上使用错误的参数,等等。

试试这个

//new pickup location checkout field
add_action( 'woocommerce_before_order_notes', 'pickup_location_custom_checkout_field' );
function pickup_location_custom_checkout_field( $checkout ) {
    echo '<div><h3>' . __('Pick-up location') . '</h3>';

    woocommerce_form_field( 'pick_up_location', array(
        'type'          => 'text',
        'class'         => array('notes'),
        'label'         => __('<span style="color:red">[IMPORTANT]</span> Where should we meet you?'),
        'placeholder'   => __('Please enter your accomodation name or the nearest pick-up point if not accessible by car'),
        'required'     => true,
        ), $checkout->get_value( 'pick_up_location' ));

    echo '</div>';
}

// Save the pickup location data to the order meta
add_action( 'woocommerce_checkout_create_order', 'pickup_location_checkout_field_update_order_meta', 10, 2 );
function pickup_location_checkout_field_update_order_meta( $order, $data ) {    
    if ( !empty( $_POST['pick_up_location']) ) {
        $order->update_meta_data( '_pick_up_location', sanitize_text_field( $_POST['pick_up_location'] ) ); // Order meta data
    }
}

// Display 'pickup location' on the order edit page (backend)
add_action( 'woocommerce_admin_order_data_after_shipping_address', 'pickup_location_checkout_field_order_page', 10, 1 );
function pickup_location_checkout_field_order_page( $order ) {
    $pick_up_location = $order->get_meta( '_pick_up_location' );
    echo '<p><strong style="color:red">'.__('Pickup Location').':</strong> ' . $pick_up_location . '</p>';
}

// Display 'pickup location' in "Order received" and "Order view" pages (frontend)
add_action( 'woocommerce_order_details_after_order_table', 'display_client_pickup_data_in_orders', 10 );
function display_client_pickup_data_in_orders( $order ) {
    $pick_up_location = $order->get_meta( '_pick_up_location' );
    echo '<p><strong style="color:red">'.__('Pickup Location').':</strong> ' . $pick_up_location . '</p>';
}

// Display 'pickup location data' in Email notifications
add_filter( 'woocommerce_email_order_meta_fields', 'display_client_pickup_data_in_emails', 10, 3 );
function display_client_pickup_data_in_emails( $fields, $sent_to_admin, $order ) {
    $fields['Pickup Location'] = array(
        'label' => __( 'Pickup Location' ),
        'value' => $order->get_meta( '_pick_up_location' ),
    );
    return $fields;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使Woocommerce(3.8.0)管理员电子邮件中包含我在结帐页面上的自定义字段数据

来自分类Dev

WooCommerce管理员订单页面-删除电子邮件和电话上的超链接

来自分类Dev

在WooCommerce电子邮件通知中为管理员显示自定义字段

来自分类Dev

通过自定义状态向管理员发送新订单电子邮件

来自分类Dev

在opencart(2.0.3.1)订单电子邮件(客户和管理员)的运输成本上增加税金

来自分类Dev

如何为WooCommerce订单页面(管理员)添加自定义字段?

来自分类Dev

调用并显示WooCommerce自定义结帐字段值

来自分类Dev

如何在WooCommerce管理员单笔订单中显示自定义结帐账单字段

来自分类Dev

在Woocommerce订单和电子邮件中的订单总数之后添加自定义文本

来自分类Dev

如何在odoo的电子邮件模板中获取用户公司和管理员的电子邮件ID

来自分类Dev

保存结帐自定义字段值并将其显示在WooCommerce管理订单中

来自分类Dev

恢复管理员密码和电子邮件Odoo服务器

来自分类Dev

上载视频时向作者和管理员发送电子邮件通知的功能

来自分类Dev

Windows 10 UAC要求输入电子邮件和密码而不是本地管理员凭据

来自分类Dev

自定义WooCommerce datepicker检出字段已保存并显示在订单和电子邮件中

来自分类Dev

设置产品自定义字段并在购物车,结帐和查看订单中显示值

来自分类Dev

WooCommerce:管理员中的动态自定义结帐字段

来自分类Dev

在WooCommerce订单和电子邮件通知上显示自定义交货通知

来自分类Dev

使用变量从奏鸣曲管理员发送自定义电子邮件

来自分类Dev

购物车和结帐中显示的管理产品页面自定义字段

来自分类Dev

在WooCommerce中将自定义结帐字段值添加到客户订单注释中

来自分类Dev

在WooCommerce订单详细信息中保存自定义结帐交货时间字段值

来自分类Dev

Rails 4自定义管理员后端

来自分类Dev

Rails 4自定义管理员后端

来自分类Dev

Woocommerce自定义电子邮件结帐

来自分类Dev

Woocommerce自定义电子邮件结帐

来自分类Dev

如何将我的自定义字段添加到 Woocommerce 订单流程(查看表单、订单详细信息和电子邮件流程)

来自分类Dev

WooCommerce电子邮件模板中的ACF自定义字段

来自分类Dev

导入用户和管理员的csv文件,然后通过电子邮件向管理员发送其用户列表的最佳方法

Related 相关文章

  1. 1

    使Woocommerce(3.8.0)管理员电子邮件中包含我在结帐页面上的自定义字段数据

  2. 2

    WooCommerce管理员订单页面-删除电子邮件和电话上的超链接

  3. 3

    在WooCommerce电子邮件通知中为管理员显示自定义字段

  4. 4

    通过自定义状态向管理员发送新订单电子邮件

  5. 5

    在opencart(2.0.3.1)订单电子邮件(客户和管理员)的运输成本上增加税金

  6. 6

    如何为WooCommerce订单页面(管理员)添加自定义字段?

  7. 7

    调用并显示WooCommerce自定义结帐字段值

  8. 8

    如何在WooCommerce管理员单笔订单中显示自定义结帐账单字段

  9. 9

    在Woocommerce订单和电子邮件中的订单总数之后添加自定义文本

  10. 10

    如何在odoo的电子邮件模板中获取用户公司和管理员的电子邮件ID

  11. 11

    保存结帐自定义字段值并将其显示在WooCommerce管理订单中

  12. 12

    恢复管理员密码和电子邮件Odoo服务器

  13. 13

    上载视频时向作者和管理员发送电子邮件通知的功能

  14. 14

    Windows 10 UAC要求输入电子邮件和密码而不是本地管理员凭据

  15. 15

    自定义WooCommerce datepicker检出字段已保存并显示在订单和电子邮件中

  16. 16

    设置产品自定义字段并在购物车,结帐和查看订单中显示值

  17. 17

    WooCommerce:管理员中的动态自定义结帐字段

  18. 18

    在WooCommerce订单和电子邮件通知上显示自定义交货通知

  19. 19

    使用变量从奏鸣曲管理员发送自定义电子邮件

  20. 20

    购物车和结帐中显示的管理产品页面自定义字段

  21. 21

    在WooCommerce中将自定义结帐字段值添加到客户订单注释中

  22. 22

    在WooCommerce订单详细信息中保存自定义结帐交货时间字段值

  23. 23

    Rails 4自定义管理员后端

  24. 24

    Rails 4自定义管理员后端

  25. 25

    Woocommerce自定义电子邮件结帐

  26. 26

    Woocommerce自定义电子邮件结帐

  27. 27

    如何将我的自定义字段添加到 Woocommerce 订单流程(查看表单、订单详细信息和电子邮件流程)

  28. 28

    WooCommerce电子邮件模板中的ACF自定义字段

  29. 29

    导入用户和管理员的csv文件,然后通过电子邮件向管理员发送其用户列表的最佳方法

热门标签

归档