Woocommerce提供了将占位符添加到电子邮件主题的选项。我想通过创建自定义占位符来扩展此功能,该占位符从woocommerce引力表单产品附加组件和woocommerce预订中获取信息。
我已经尝试为Woocommerce电子邮件通知主题代码创建其他变量/占位符, 进行一些更改以查看是否可以使它工作。另外,我尝试获取woocommerce元字段,但这也不起作用。
在此代码上,我无法获得与订单相关的预订:
// For woocommerce versions up to 3.2 add_filter( 'woocommerce_email_format_string' , 'filter_email_format_string', 20, 2 ); function filter_email_format_string( $string, $email ) { // Get the instance of the WC_Order object $booking = $get_order; // Additional wanted placeholders in the array (find / replace pairs) $additional_placeholders = array( '{custom_one}' => $booking->get_start_date(), ); // return the clean string with new replacements return str_replace( array_keys( $additional_placeholders ), array_values( $additional_placeholders ), $string ); }
首先,您的主要问题是:
由于一个订单可以有很多预订(项目),因此您可以通过使用WordPressWPDB类和可用方法的非常简单且轻巧的SQL查询来获取针对邮寄上级的预订ID(即订单ID)。
WPDB
然后,您将能够从该订单的一次预订中获得开始日期,并将其设置为电子邮件通知主题的自定义占位符:
// Custom function to get the booking Ids from an order Id (with an SQL query) function wc_get_booking_ids( $order_id ){ global $wpdb; return $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'wc_booking' AND post_parent = %d", $order_id ) ); } // For woocommerce versions up to 3.2 add_filter( 'woocommerce_email_format_string' , 'filter_email_format_string', 20, 2 ); function filter_email_format_string( $string, $email ) { if( ! is_a($email->object, 'WC_Order') ) return; // Exit $booking_ids = wc_get_booking_ids( $email->object->get_id() ); if( ! empty($booking_ids) ) { // Get the instance of the WC_Booking object from one booking Id $booking = new WC_Booking( reset($booking_ids) ); if( is_a($booking, 'WC_Booking') && method_exists($booking, 'get_start_date') ) { // Additional placeholders array (one by line) $custom_placeholders = array( '{start_date}' => $start_date = $booking->get_start_date(), ); $string = str_replace( array_keys( $custom_placeholders ), array_values( $custom_placeholders ), $string ); } } return $string; }
代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试和工作。