web-dev-qa-db-ja.com

管理パネルのウーコマースオーダーでカスタムフィールドを表示する方法

現在、私は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がCustomフィールドの下に見られることを期待しています。私はスクリーンオプションをチェックします、しかし、私はすでにカスタムフィールドをチェックしました。他のカスタムフィールドとその値は表示および編集可能です。

どのように私はバックエンドでこの値を編集することができます。助けてください 。

8
Ron

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

/**
 * 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の '標準カスタムフィールドブロックを通して同じものを編集することができます。以下のスクリーンショットを参照してください。

enter image description here 

17
Prasad Nevase

これが解決策です。製品データに直接アクセスすることはできません。

$product->id

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

$product->get_id()
1
Gaël