我目前正試圖為默認的地址欄位(名字、姓氏等)添加一個自定義欄位
。這個欄位應該被用來為客戶設定一個敬語。
為此我使用了以下過濾器:
add_filter( 'woocommerce_default_address_fields', 'custom_woocommerce_address_fields' ) 。
function custom_woocommerce_address_fields($fields) /span>{
$fields['salutation'/span>] = array(
'label' => __('Anrede', 'woocommerce'), //添加自定義欄位標簽。
'placeholder' => 'CA12345678', //Add custom field placeholder.
'required' => true, // if field is required or not.
'clear' => false, //span>是否添加清除。
'type' => 'select', //添加欄位型別。
'options' => array(
'Herr' => 'Herr',
'Frau' => 'Frau',
'Firma' => 'Firma'.
),
'priority' => 1, /span>添加優先級。
'class' => array('billing-salutation-input')// add class name)
);
return $fields。
}
保存自定義欄位:
add_action( 'woocommerce_checkout_update_order_meta', 'save_new_checkout_field' ) 。
function save_new_checkout_field($order_id ) {
if ( $_POST['billing_salutation'] ) update_post_meta( $order_id, '_salutation', esc_attr( $_POST['billing_salutation'] ) )。
}
問題:
當我查看訂單詳情時,新欄位不會顯示在默認地址欄位下。
所以我使用以下代碼來顯示新的資料。
add_action( 'woocommerce_admin_order_data_after_billing_address', 'show_new_checkout_field_order', 10, 1 )。)
function show_new_checkout_field_order($order ) {
$order_id = $order->get_id()。
if ( get_post_meta( $order_id, '_salutation', true ) ) echo '<p><strong>Anrede:</strong> ' . get_post_meta( $order_id, '_salutation', true ) 。'</p> '。
}
然而,該欄位總是顯示在底部,我找不到一種方法將該欄位帶到所需的位置(圖片)
我是否必須使用一個不同的鉤子來將資料顯示在所需的位置(帳單細節)?
或者我需要編輯一個特定的電子商務模板嗎?
uj5u.com熱心網友回復:
輸出是一個字串,它使用<br/>來分隔訂單的賬單地址細節。
因此,有2種可能的觀點:
company_name<br/>Firstname Lastname<br/>street<br/>1<br/>1000ocationFirstname Lastname<br/> street<br/>1<br/>1000 Location
有幾種可能性,你可以應用來回答你的問題,但最簡單的是通過woocommerce_order_get_formatted_billing_address過濾鉤來編輯字串。
注意:我們將檢查是否真的有一個開票公司。 并在此基礎上調整我們的結果。
注意:根據你的需要調整$order->get_meta( '_your_meta_key');。
所以你得到:
function str_replace_first( $search, $replace, $subject /span>) {
$pos = strpos( $subject, $search ) 。
if ( $pos !== false ) {
return substr_replace( $subject, $replace, $pos, strlen( $search ) ) 。
}
return $subject;
}
/****.
*過濾訂單格式化的帳單地址。
*
* @since 3.8.0
* @param string $address 格式化的帳單地址字串。
* @param array $raw_address 原始帳單地址。
* @param WC_Order $order 訂單資料。@since 3.9.0
*/
function filter_woocommerce_order_get_formatted_billing_address($address, $raw_address, $order /span>) {
//獲得元資料
$value = $order->get_meta( '_your_meta_key' ) 。
//當空時,回傳。
if ( empty ( $value ) ) return $address;
//獲取賬單公司
$billing_company = $order-> get_billing_company()。
//不是空的。
if ( ! empty ( $billing_company ) ) {
$address = str_replace_first( '<br/> ', '<br/> ' . $value 。'<br/>', $address )。)
} else {
$address = $value . '<br/> ' . $address;
}
return $address。
}
add_filter( 'woocommerce_order_get_formatted_billing_address', 'filter_woocommerce_order_get_formatted_billing_address', 10, 3 ) 。
結果:
company_name<br/>meta_value<br/>Firstname Lastname<br/>street<br/>1<br/>1000 Location<
meta_value<br/>Firstname Lastname<br/> street<br/>1<br/>1000 Location
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/307831.html
標籤:

