3

PHP初心者の質問を許してください...ギフトラッピング用のカスタムチェックボックスをwoocommerceカートに追加しました。カスタム メタ ボックスと注文概要の「注文」ページに値を返すことはできますが、null または「1」として返す値しか取得できません。「はい」または「いいえ」の値を返したいです。アドバイスをよろしくお願いします。


これが私のFunctions.PHPで使用しているコードです(WOOCOMMERCEのドキュメントからカスタマイズされています):

/チェックアウトにギフトラッピングフィールドを追加/

add_action('woocommerce_after_order_notes', 'gift_wrapping_field');

function gift_wrapping_field( $checkout ) 
{

woocommerce_form_field( 'gift_wrapping', array(
    'type'          => 'checkbox',
    'class'         => array('input-checkbox'),
    'label'         => __('Include Free Gift Wrapping'),
    'required'        => false,
    ), $checkout->get_value( 'gift_wrapping' ));

}

/チェックアウトの処理/

add_action('woocommerce_checkout_process', 'gift_wrapping_field_process');

function my_custom_checkout_field_process()
{
    global $woocommerce;
    // Check if set, if its not set add an error.
    if (!$_POST['terms_conditions'])
     $woocommerce->add_error( __('Please agree to terms and conditions.') );
}

/フィールド値で注文メタを更新します/

add_action('woocommerce_checkout_update_order_meta', 'gift_wrapping_field_update_order_meta');

function gift_wrapping_field_update_order_meta( $order_id ) 
{
    if ($_POST['gift_wrapping']) update_post_meta( $order_id, 'Include Free Gift Wrapping', esc_attr($_POST['gift_wrapping']));
}

/*Update the order summary with field value*/

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>'.__('Include Free Gift Wrapping').':</strong> ' . $order->order_custom_fields['Include Free Gift Wrapping'][0] . '</p>';
}

フォームの結果から管理者に返される内容のスクリーンショットを次に示します。

カスタム フィールドのスクリーンショット

4

2 に答える 2

4

これを変更してみてください

esc_attr($_POST['gift_wrapping'])

これに

(esc_attr($_POST['gift_wrapping'] = 1 ? 'yes' : ''))

私はこれを私が所有し、私のために働いているwoocommerceテストサイトでテストしました.

これは、チェックされている場合は yes を返し、チェックされていない場合は何も返しません。あなたが何も持っていないことに固執しているなら、あなたはこれから行全体を変更することができます

if ($_POST['gift_wrapping']) update_post_meta( $order_id, 'Include Free Gift Wrapping', esc_attr($_POST['gift_wrapping']));

これに。値が技術的に設定されていない場合でも、値の保存を強制します。

update_post_meta( $order_id, 'My Field', (esc_attr(isset($_POST['gift_wrapping']) && $_POST['gift_wrapping'] == 1 ? 'yes' : 'no')));
于 2013-12-28T23:52:05.533 に答える