当ショップの商品はテスト用の為の仮の物です。注文されても商品が届く事はありません。請求書が届きますが、実際の金品を請求するものではありません。
クーポンコード 7prvkjtz お買い物毎に割引¥1,000
クーポンコード v2tv97kd 商品毎に割引¥500

ドキュメント

1独自のフォントを利用する 2テンプレートを利用して出力する PDF を変更する 3マーケットプレイス型のサイト対応とフィルター 4書式関連 5送信メール関連 6顧客入力関連

マウスオーバーか長押しで説明を表示。

カスタマイズ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
);
1独自のフォントを利用する 2テンプレートを利用して出力する PDF を変更する 3マーケットプレイス型のサイト対応とフィルター 4書式関連 5送信メール関連 6顧客入力関連

マウスオーバーか長押しで説明を表示。