現在お買い物カゴには何も入っていません。
ドキュメント
マウスオーバーか長押しで説明を表示。
カスタマイズ6
顧客の入力関連です。必ずしも必須では無く、顧客・販売者が求めた場合に変更するためのものです。
/** ==================================================
* 「顧客名」
* マーケットプレイス型サイト運用で販売者単位で変更する場合は
* $vendor_id で振り分ける
* @param $name string 顧客名。
* @param $order object 注文オブジェクト。
* @param $vendor_id int 販売者ユーザーID。
* invoice_japan_name
*/
add_filter(
'invoice_japan_name',
function( $name, $order, $vendor_id ) {
/* case の番号は、販売者のユーザーIDを指定 */
switch ( $vendor_id ) {
case 3:
$name = $order->get_formatted_billing_full_name();
break;
}
return $name;
},
10,
3
);
カスタマイズ例:上記のフィルターを利用して、請求書の別名義を入力するカスタムフィールドを、WooCommerce のチェックアウトフィールドに追加し、その値を請求書に記述させます。
1.WooCommerce のチェックアウトフィールドにカスタムフィールドを作成します。キーを additional_name
とします。例では、チェックアウトフィールドの最後に追加 woocommerce_after_order_notes
されますが、最初に追加したい場合には、woocommerce_before_checkout_form
を利用します。
/**
* チェックアウトフィールド追加
*/
add_action( 'woocommerce_after_order_notes', 'my_custom_checkout_field' );
function my_custom_checkout_field( $checkout ) {
echo '<div id="my_custom_checkout_field"><h2>請求書の請求先名義</h2>';
woocommerce_form_field(
'additional_name',
array(
'type' => 'text',
'class' => array( 'my-field-class form-row-wide' ),
'label' => '請求書に記述する請求先名義',
'placeholder' => '請求書に別の名義を記述したい場合に入力してください',
),
$checkout->get_value( 'additional_name' )
);
echo '</div>';
}
2.WooCommerce のチェックアウトプロセスを追加。フィールドのバリデートです。
/**
* チェックアウトプロセス
*/
add_action( 'woocommerce_checkout_process', 'my_custom_checkout_field_process' );
function my_custom_checkout_field_process() {
// エラーが出た際のメッセージ。
if ( ! $_POST['additional_name'] ) {
wc_add_notice( esc_html__( 'Please enter something into this new shiny field.' ), 'error' );
}
}
3.WooCommerce でのチェックアウト時に、注文オブジェクトのメタデータにデータを保存します。ネット上を検索すると、この辺りを投稿メタデータに保存するような記事がありますが、WooCommerce 8.0 以降では、非推奨になっていますのでご注意ください。
/**
* 注文オブジェクトの更新
*/
add_action( 'woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta' );
function my_custom_checkout_field_update_order_meta( $order_id ) {
if ( ! empty( $_POST['additional_name'] ) ) {
$order = wc_get_order( $order_id );
$order->update_meta_data( 'additional_name', sanitize_text_field( $_POST['additional_name'] ) );
$order->save_meta_data();
}
}
4.注文個別画面に、追加したカスタムフィールドを表示させるためのものです。
/**
* 注文個別画面のカスタムフィールド編集画面
*/
add_action( 'woocommerce_admin_order_data_after_billing_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );
function my_custom_checkout_field_display_admin_order_meta( $order ){
echo '<p><strong>請求書の請求先名義:</strong> ' . esc_html( $order->get_meta( 'additional_name', true ) ) . '</p>';
}
5.PDF Invoice Japan for WooCommerce のフィルター invoice_japan_name
を適用します。注文データから、 meta_data
を抽出しその中の 1.で決めた additional_name
キーを探し、その値を返します。
add_filter(
'invoice_japan_name',
function( $name, $order, $vendor_id ) {
foreach ( $order->get_data() as $key => $value ) {
if ( 'meta_data' === $key ) {
foreach ( $value as $value2 ) {
if ( 'additional_name' === $value2->key ) {
$name = $value2->value;
}
}
}
}
return $name;
},
10,
3
);
マウスオーバーか長押しで説明を表示。