2

woocommerceには3つのカスタムフィールドがあります。

事件を扱っている問題参照番号、請求書番号、および請求者(次のコード、下にスクロールするだけで見たくない場合は、それほど重要ではありません)

add_action('woocommerce_after_order_notes', 'matter_reference_number_func');

function matter_reference_number_func( $checkout ) {

    echo '<div id="matter_ref"><h3>'.__('Matter reference number').'</h3>';

    woocommerce_form_field( 'matter_reference_number', array(
        'type'          => 'text',
        'class'         => array('my-field-class form-row-wide'),
        'placeholder'       => __('Matter reference number'),
        ), $checkout->get_value( 'matter_ref_num' ));

    echo '</div>';

}

add_action('woocommerce_after_order_notes', 'invoice_number_func');

function invoice_number_func( $checkout ) {

    echo '<div id="inv_num"><h3>'.__('Invoice number').'</h3>';

    woocommerce_form_field( 'invoice_number', array(
        'type'          => 'text',
        'class'         => array('my-field-class form-row-wide'),
        'placeholder'       => __('Invoice number'),
        ), $checkout->get_value( 'invoice_num' ));

    echo '</div>';

}

add_action('woocommerce_after_order_notes', 'sol_deal_func');

function sol_deal_func( $checkout ) {

    echo '<div id="sol_deal"><h3>'.__('Solicitor dealing with matter').'</h3>';

    woocommerce_form_field( 'matter_reference_number', array(
        'type'          => 'text',
        'class'         => array('my-field-class form-row-wide'),
        'placeholder'       => __('Solicitor dealing with matter'),
        ), $checkout->get_value( 'sol_deal' ));

    echo '</div>';

}

ただし、値を保存しようとすると、クライアントへの電子メールにも管理者にも、確認ページにも表示されません。ドキュメントによると、これはそれを行うのに十分なはずです。しかし、そうではありません。

/**
 * Update the order meta with field value
 **/
add_action('woocommerce_checkout_update_order_meta', 'matter_ref_num_checkout_field_update_order_meta');

function matter_ref_num_checkout_field_update_order_meta( $order_id ) {
    if ($_POST['matter_ref_num']) update_post_meta( $order_id, 'Matter Reference Number', esc_attr($_POST['matter_ref_num']));
}

/**
 * Update the order meta with field value
 **/
add_action('woocommerce_checkout_update_order_meta', 'invoice_num_checkout_field_update_order_meta');

function invoice_num_checkout_field_update_order_meta( $order_id ) {
    if ($_POST['invoice_num']) update_post_meta( $order_id, 'Invoice Number', esc_attr($_POST['invoice_num']));
}

/**
 * Update the order meta with field value
 **/
add_action('woocommerce_checkout_update_order_meta', 'sol_deal_checkout_field_update_order_meta');

function sol_deal_checkout_field_update_order_meta( $order_id ) {
    if ($_POST['sol_deal']) update_post_meta( $order_id, 'Solicitor Dealing With Matter', esc_attr($_POST['sol_deal']));
}
4

2 に答える 2

7

フックを使用して投稿メタを更新しています(投稿IDは注文IDです)。データベースをチェックすると、適切な投稿IDメタの下にこれらのフィールドが表示されるはずです。

それらをメールに追加したい場合は、別のフックも使用する必要があります。

woocommerce_email_order_meta_keys

woocommerceのドキュメントからの参照は次のとおりです。

/**
 * Add the field to order emails
 **/
add_filter('woocommerce_email_order_meta_keys', 'my_custom_checkout_field_order_meta_keys');

function my_custom_checkout_field_order_meta_keys( $keys ) {
    $keys[] = 'My Field';
    return $keys;
}

実際には、アクションごとに1つのフックを使用し、そこにコードを配置するだけで済みます。例:

/**
 * Update the order meta with field value
 **/
add_action('woocommerce_checkout_update_order_meta', 'custom_checkout_field_update_order_meta');

function custom_checkout_field_update_order_meta( $order_id ) {
    if ($_POST['matter_ref_num']) update_post_meta( $order_id, 'Matter Reference Number', esc_attr($_POST['matter_ref_num']));
    if ($_POST['invoice_num']) update_post_meta( $order_id, 'Invoice Number', esc_attr($_POST['invoice_num']));
    if ($_POST['sol_deal']) update_post_meta( $order_id, 'Solicitor Dealing With Matter', esc_attr($_POST['sol_deal']));
}

お役に立てれば。

于 2013-03-21T03:16:51.170 に答える
0

受け入れられた答えは私にはうまくいきませんでした。update_post_meta関数の2番目のパラメーターを削除する必要がありました。

add_action( 'woocommerce_checkout_update_order_meta', 'custom_checkout_fields_update_order_meta' );
function custom_checkout_fields_update_order_meta( $order_id ) {
  if ($_POST['_billing_vat_number']) update_post_meta( $order_id, '_billing_vat_number', sanitize_text_field( $_POST['_billing_vat_number'] ) );
}

ワードプレスのサニタイズ機能も使用しましたが、それは問題ではありませんでした。

于 2021-05-20T09:20:27.657 に答える