在 Woocommerce 电子邮件通知中以编程方式显示结帐字段标签
Show programmatically checkout field labels in Woocommerce emails notifications
在我给客户的自定义订单 WooCommerce 电子邮件模板中,我插入了一个自定义的运输和账单数据列表。第一个列表列带有标签,第二个列表列带有相应的数据。
目前,我手动插入了标签名称,与 woocommerce checkout 中的标签名称相同,然后我通过代码插入了相应的 values/data。这意味着我必须将所有这些标签翻译成我需要的所有语言,而我已经使用本机 Woocommerce 结帐标签完成了翻译。
此外,由于这是两次,因此翻译可能不完全相同。这样效率不高,还会增加代码。
为了避免这种情况,我想用相应的 woocommerce 结帐字段标签替换标签。
在我当前的代码下方,其中每个字符串“$text_xx”代表我之前手动定义的标签:
# (...)
$text_42b = __('First name:', 'woocommerce_php_emails');
# (...)
echo '<p id="Linha1">' . $line . '</p><p id="Shipping_title_completed">' . $text_41 . '</p>
<div class="Shipping_table_completed">
<div class="left_table" style="float: left; width: 25%;"><ul>
<li>' . $text_42a . '</li>
<li>' . $text_42b . '</li>
<li>' . $text_42c . '</li>
<li>' . $text_42d . '</li>
<li>' . $text_42e . '</li>
<li>' . $text_42f . '</li>
<li> </li>
<li>' . $text_42g . '</li>
<li>' . $text_42h . '</li>
<li>' . $text_42i . '</li>
<li>' . $text_42j . ':</li>
</ul></div>
<div class="right_table" style="float: left; width: 75%;"><ul>
<li>' . $shipping_title . ' </li>
<li>' . $order->get_shipping_first_name() . ' </li>
<li>' . $order->get_shipping_last_name() . ' </li>
<li>'. $order->get_shipping_company() . ' </li>
<li>' . $tracking_num_s . ' </li>
<li>' . $order->get_shipping_address_1() . ' </li>
<li>' . $order->get_shipping_address_2() . ' </li>
<li>' . $order->get_shipping_postcode() . ' </li>
<li>' . $order->get_shipping_city() . ' </li>
<li>' . $order->get_shipping_state() . ' </li>
<li>' . $order->get_shipping_country() . ' </li>
</ul></div>
<div class="Shipping_table_completed1"><img src="https://testing987654321hello.com/wp-content/uploads/2017/12/delivery-service.jpg" alt=""></div>
</div><p id="Linha2">' . $line . '</p><div class="Last_text_completed"><p>' . $text_61 . '<br><br><br>' . $text_60 . '</p></div>';
这可以通过这个自定义函数来完成,它将显示所有现有的按您期望排序的运输标签字段:
function get_checkout_label_fields( $type = 'shipping' ){
$domain = 'my_theme_slug'; // <= define your theme domain
// Setting custom label fields value
$fields1 = array(
'shipping_title' => array(
'label' => __( 'Shipping title', $domain ), // <= define your title
),
'shipping_traking_number' => array(
'label' => __( 'Tracking number', $domain ), // <= define Tracking number label
)
);
$label_sep = __( ':', $domain );
$checkout = new WC_Checkout(); // Get an instance of the WC_Checkout object
$fields2 = $checkout->get_checkout_fields($type); // Get the fields
$fields = array_merge( $fields1, $fields2 ); // Merge arrays
$output = array();
// Sorting field labels array
$labels = array( 'title', 'first_name', 'last_name', 'company', 'traking_number',
'address_1', 'address_2','postcode', 'city', 'state', 'country' );
// Loop through labels array to set the correct label values
foreach( $labels as $label ){
$label = 'shipping_'.$label;
if( empty($fields[$label]['label']) )
$fields[$label]['label'] = ' ';
$output[$label] = $fields[$label]['label'];
}
return $output;
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。
现在您可以通过以下方式在您的模板代码中使用此函数:
echo '<p id="Linha1">' . $line . '</p>
<p id="Shipping_title_completed">' . $text_41 . '</p>
<div class="Shipping_table_completed">
<div class="left_table" style="float: left; width: 25%;">
<ul>';
foreach(get_checkout_label_fields() as $label_field )
echo '<li>' . $label_field . '</li>';
echo '</ul>
</div>
<div class="right_table" style="float: left; width: 75%;">
<ul>
<li>' . $shipping_title . ' </li>
<li>' . $order->get_shipping_first_name() . ' </li>
<li>' . $order->get_shipping_last_name() . ' </li>
<li>'. $order->get_shipping_company() . ' </li>
<li>' . $tracking_num_s . ' </li>
<li>' . $order->get_shipping_address_1() . ' </li>
<li>' . $order->get_shipping_address_2() . ' </li>
<li>' . $order->get_shipping_postcode() . ' </li>
<li>' . $order->get_shipping_city() . ' </li>
<li>' . $order->get_shipping_state() . ' </li>
<li>' . $order->get_shipping_country() . ' </li>
</ul>
</div>
<div class="Shipping_table_completed1">
<img src="https://testing987654321hello.com/wp-content/uploads/2017/12/delivery-service.jpg" alt="">
</div>
</div>
<p id="Linha2">' . $line . '</p>
<div class="Last_text_completed">
<p>' . $text_61 . '<br><br><br>' . $text_60 . '</p>
</div>';
已测试并有效。
在我给客户的自定义订单 WooCommerce 电子邮件模板中,我插入了一个自定义的运输和账单数据列表。第一个列表列带有标签,第二个列表列带有相应的数据。
目前,我手动插入了标签名称,与 woocommerce checkout 中的标签名称相同,然后我通过代码插入了相应的 values/data。这意味着我必须将所有这些标签翻译成我需要的所有语言,而我已经使用本机 Woocommerce 结帐标签完成了翻译。
此外,由于这是两次,因此翻译可能不完全相同。这样效率不高,还会增加代码。
为了避免这种情况,我想用相应的 woocommerce 结帐字段标签替换标签。
在我当前的代码下方,其中每个字符串“$text_xx”代表我之前手动定义的标签:
# (...)
$text_42b = __('First name:', 'woocommerce_php_emails');
# (...)
echo '<p id="Linha1">' . $line . '</p><p id="Shipping_title_completed">' . $text_41 . '</p>
<div class="Shipping_table_completed">
<div class="left_table" style="float: left; width: 25%;"><ul>
<li>' . $text_42a . '</li>
<li>' . $text_42b . '</li>
<li>' . $text_42c . '</li>
<li>' . $text_42d . '</li>
<li>' . $text_42e . '</li>
<li>' . $text_42f . '</li>
<li> </li>
<li>' . $text_42g . '</li>
<li>' . $text_42h . '</li>
<li>' . $text_42i . '</li>
<li>' . $text_42j . ':</li>
</ul></div>
<div class="right_table" style="float: left; width: 75%;"><ul>
<li>' . $shipping_title . ' </li>
<li>' . $order->get_shipping_first_name() . ' </li>
<li>' . $order->get_shipping_last_name() . ' </li>
<li>'. $order->get_shipping_company() . ' </li>
<li>' . $tracking_num_s . ' </li>
<li>' . $order->get_shipping_address_1() . ' </li>
<li>' . $order->get_shipping_address_2() . ' </li>
<li>' . $order->get_shipping_postcode() . ' </li>
<li>' . $order->get_shipping_city() . ' </li>
<li>' . $order->get_shipping_state() . ' </li>
<li>' . $order->get_shipping_country() . ' </li>
</ul></div>
<div class="Shipping_table_completed1"><img src="https://testing987654321hello.com/wp-content/uploads/2017/12/delivery-service.jpg" alt=""></div>
</div><p id="Linha2">' . $line . '</p><div class="Last_text_completed"><p>' . $text_61 . '<br><br><br>' . $text_60 . '</p></div>';
这可以通过这个自定义函数来完成,它将显示所有现有的按您期望排序的运输标签字段:
function get_checkout_label_fields( $type = 'shipping' ){
$domain = 'my_theme_slug'; // <= define your theme domain
// Setting custom label fields value
$fields1 = array(
'shipping_title' => array(
'label' => __( 'Shipping title', $domain ), // <= define your title
),
'shipping_traking_number' => array(
'label' => __( 'Tracking number', $domain ), // <= define Tracking number label
)
);
$label_sep = __( ':', $domain );
$checkout = new WC_Checkout(); // Get an instance of the WC_Checkout object
$fields2 = $checkout->get_checkout_fields($type); // Get the fields
$fields = array_merge( $fields1, $fields2 ); // Merge arrays
$output = array();
// Sorting field labels array
$labels = array( 'title', 'first_name', 'last_name', 'company', 'traking_number',
'address_1', 'address_2','postcode', 'city', 'state', 'country' );
// Loop through labels array to set the correct label values
foreach( $labels as $label ){
$label = 'shipping_'.$label;
if( empty($fields[$label]['label']) )
$fields[$label]['label'] = ' ';
$output[$label] = $fields[$label]['label'];
}
return $output;
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。
现在您可以通过以下方式在您的模板代码中使用此函数:
echo '<p id="Linha1">' . $line . '</p>
<p id="Shipping_title_completed">' . $text_41 . '</p>
<div class="Shipping_table_completed">
<div class="left_table" style="float: left; width: 25%;">
<ul>';
foreach(get_checkout_label_fields() as $label_field )
echo '<li>' . $label_field . '</li>';
echo '</ul>
</div>
<div class="right_table" style="float: left; width: 75%;">
<ul>
<li>' . $shipping_title . ' </li>
<li>' . $order->get_shipping_first_name() . ' </li>
<li>' . $order->get_shipping_last_name() . ' </li>
<li>'. $order->get_shipping_company() . ' </li>
<li>' . $tracking_num_s . ' </li>
<li>' . $order->get_shipping_address_1() . ' </li>
<li>' . $order->get_shipping_address_2() . ' </li>
<li>' . $order->get_shipping_postcode() . ' </li>
<li>' . $order->get_shipping_city() . ' </li>
<li>' . $order->get_shipping_state() . ' </li>
<li>' . $order->get_shipping_country() . ' </li>
</ul>
</div>
<div class="Shipping_table_completed1">
<img src="https://testing987654321hello.com/wp-content/uploads/2017/12/delivery-service.jpg" alt="">
</div>
</div>
<p id="Linha2">' . $line . '</p>
<div class="Last_text_completed">
<p>' . $text_61 . '<br><br><br>' . $text_60 . '</p>
</div>';
已测试并有效。