web-dev-qa-db-ja.com

woocommerceで注文時にカスタムフィールドを表示する

私はウェブショップで作業していて、このチュートリアルに従っています http://wcdocs.woothemes.com/snippets/tutorial-customising-checkout-fields-using-hooks-and-filters/ いくつかのカスタムフィールドを追加するには私の請求。

// Hook in
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );

// Our hooked in function - $fields is passed via the filter!
function custom_override_checkout_fields( $fields ) {
 $fields['billing']['billing_gls_name'] = array(
    'label'     => __('Name for pickup person', 'woocommerce'),
'placeholder'   => _x('Name', 'placeholder', 'woocommerce'),
'required'  => true,
'class'     => array('form-row-wide'),
'clear'     => true
 );

 return $fields;
}

これは私のフィールドを追加します。ここまでは順調ですね。だから私の問題は:

注文ビューでこの新しいフィールドを表示するにはどうすればよいですか?請求の詳細には、通常の請求フィールドのみが表示されます。

14
Jepzen

最初の答え(Cesar)は正解に近いものでした。誰かが同じことを見つけようとしてこの古い投稿に出くわした場合に備えて、以下は、元の投稿者によって提供されたコードの後に​​、与えられた変数に合わせてfunctions.phpファイルに挿入するために必要なコードです。これらはフィールド名「billing_gls_name」を使用し、これは新しい関数で「_billing_gls_name」として参照されていることに注意してください。最初に余分な「_」が必要です。これは、WooCommerce2.0.3を実行しているWordpress 3.5.1で機能します。

function your_custom_field_function_name($order){
    echo "<p><strong>Name of pickup person:</strong> " . $order->order_custom_fields['_billing_gls_name'][0] . "</p>";
}

add_action( 'woocommerce_admin_order_data_after_billing_address', 'your_custom_field_function_name', 10, 1 );
12
Warren G

カスタムフィールドを定義した後(上記のコードで行った)、以下のコードを次の場所に追加します。

  1. フィールドを処理する

  2. Orderメタデータとしてデータベースに保存します

  3. Woocommerce-> Ordersセクションの「Orderdetails」に表示します

フィールドを処理します:

add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');

function my_custom_checkout_field_process() {

if (!$_POST['billing']['billing_gls_name']) {
    wc_add_notice(__('Please tell us the Location Type that we are billing to.'), 'error');
}

}

DBのフィールドを注文メタデータとして保存:

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['billing']['billing_gls_name'])) {
     update_post_meta($order_id, 'Billing Gls Name', esc_attr($_POST['billing']['billing_gls_name_type']));
     }
 }

そして最後に注文詳細画面に表示します:

  add_action('woocommerce_admin_order_data_after_billing_address', 'my_custom_billing_fields_display_admin_order_meta', 10, 1);

  function my_custom_billing_fields_display_admin_order_meta($order) {
echo '<p><strong>' . __('Billing Gls Name') . ':</strong><br> ' . get_post_meta($order->id, '_billing_gls_name', true) . '</p>';
}
8
Nadeem Khan

アクションwoocommerce_admin_order_data_after_billing_addressを追加すると、請求情報の後にデータを挿入できます。カスタムフィールドは$order->order_custom_fields配列の下にあります。

function display_rfc_in_order_metabox($order){
    echo "<p><strong>RFC:</strong> {$order->order_custom_fields['_billing_rfc'][0]}</p>";
}

add_action( 'woocommerce_admin_order_data_after_billing_address', 'rxm_details_to_order', 10, 1 );
3
César