管理パネルのwoocommerce注文にカスタムフィールドを表示するにはどうすればよいですか?


13

現在、私はwoocommerceにカスタム請求フィールドを追加しています

function custom_override_checkout_fields( $fields ) {
     $fields['billing']['billing_phone_new'] = array(
        'label'     => __('Phone 2', 'woocommerce'),
    'placeholder'  => _x('Phone 2', 'placeholder', 'woocommerce'),
    'required'  => false,
    'class'     => array('form-row-wide'),
    'clear'     => true
     );

     return $fields;
}

add_filter('woocommerce_checkout_fields','custom_override_checkout_fields');

このフィールドの値を管理者側で編集する必要があります。現在、私は請求先住所の他のすべての値を編集できますが、この値は管理セクションに表示されません。次のコードは、adminセクションの値を表示するためだけに使用します。

function order_phone_backend($order){
    echo "<p><strong>Billing phone 2:</strong> " . get_post_meta( $order->id, '_billing_phone_new', true ) . "</p><br>";
} 

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

ドキュメントhttps://docs.woothemes.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/を読みます。しかし、このドキュメントのすべてが正しく機能しているのは、billing_phone / Phoneがカスタムフィールドの下にあることに注意してください。画面オプションをチェックしましたが、すでにカスタムフィールドをチェックしています。他のカスタムフィールドとその値は表示および編集できます。

バックエンドでこの値を編集するにはどうすればよいですか。助けてください 。


質問の最初のコードブロックは、デフォルトの[電話番号]フィールドを変更します。チェックアウトフォームに新しいフィールドは追加されません。チェックアウトフィールドは[カスタムフィールド]の下では使用できないため、そこで検索しないでください。請求先住所または配送先住所のフィールドを編集する場合は、バックエンドに移動し、注文リストの下の注文をクリックします。次に、[請求の詳細]と[配送の詳細]見出しの横にある小さな編集アイコンが表示されます。それをクリックすると、それらの詳細を編集できます。これがお役に立てば幸いです。
Prasad Nevase

今すぐ私のコードを確認してください
Ron

回答:


22

あなたが提供したコードは不完全です。それがあなたが望むことを達成するために使用している唯一のコードであるかどうかわかりません。したがって、提供した最初のコードブロックに加えて、バックエンドの新しいフィールドを[注文の詳細]ボックスに表示し、カスタムフィールドを介して編集可能にするために必要な残りのコードをすべて追加します。2番目のコードブロックでは、フィールドキーにと名前を付けていることに注意してください_billing_new_phone。_(アンダースコア)で始まるカスタムフィールドキー名は非表示のカスタムフィールドであり、バックエンドの[カスタムフィールド]の下には表示されません。

/**
 * Process the checkout
 */
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');

function my_custom_checkout_field_process() {
    // Check if set, if its not set add an error.
    if ( ! $_POST['billing_phone_new'] )
        wc_add_notice( __( 'Phone 2 is compulsory. Please enter a value' ), 'error' );
}


/**
 * Update the order meta with field value
 */
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_phone_new'] ) ) {
        update_post_meta( $order_id, 'billing_phone_new', sanitize_text_field( $_POST['billing_phone_new'] ) );
    }
}


/**
 * Display field value on the order edit page
 */
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>'.__('Phone 2').':</strong> <br/>' . get_post_meta( $order->get_id(), 'billing_phone_new', true ) . '</p>';
}

WooCommerceは、標準の「注文の詳細」ボックスの下で新しいチェックアウトフィールドを編集可能にしません。そのボックスでは「表示のみ」モードとして使用できますが、WordPressの標準カスタムフィールドブロックを使用して同じように編集できます。以下のスクリーンショットを参照してください。

ここに画像の説明を入力してください


"" _(アンダースコア)で始まるすべてのカスタムフィールドキー名は非表示のカスタムフィールドであり、[カスタムフィールド]のバックエンドには表示されません。""この情報をどこから取得しますか?
Ron

2
WordPressコーデックス。あなたはあり、ここでの詳細情報を取得
プラサドNevase


私の場合、get_post_meta($ order-> get_id()、 '_billing_phone_new'、true)を使用して結果を得ました。get_post_meta関数で変数名の前にアンダースコアを付ける必要がありました。
Dashrath

1

これが解決策です:製品データへの直接アクセスは許可されていません。

$product->id

今後の正しい方法は次のとおりです。

$product->get_id()
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.