1

iam woocommerceプラグインを使用しています...実際、これは私が持っているphpの疑いです..Iamはいくつかのカスタムフィールドを使用しているので、それらのカスタムフィールドの値を電子メールに取得する必要があります。

Iamが1つのカスタムフィールド'MyField'を使用している場合、iamはその値を電子メールに取得しますが、iamはすべてのカスタムフィールドの値を電子メールに取得する方法を理解していません。

以下は、単一のカスタムフィールドで機能するコードです:(ここからhttps://gist.github.com/3905785:)

/**
 * Add the field to the checkout
 **/
add_action('woocommerce_after_order_notes', 'my_custom_checkout_field');

function my_custom_checkout_field( $checkout ) {

    echo '<div id="my_custom_checkout_field"><h3>'.__('My Field').'</h3>';
    woocommerce_form_field( 'my_field_name', array( 
        'type'          => 'checkbox', 
        'class'         => array('my-field-class form-row-wide'), 
        'label'         => __('Fill in this field'), 
        'placeholder'   => __('Enter a number'),
        ), $checkout->get_value( 'my_field_name' ));

    echo '</div>';
}

/**
 * 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 ($_POST['my_field_name']) update_post_meta( $order_id, 'My Field', esc_attr($_POST['my_field_name']));
}

/**
 * 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;
}


私は2つのカスタムフィールドの以下のコードを試しました:(以下のコードは私のメールにカスタムフィールド値を取得しません..)plsは以下のコードで何が間違っているのか教えてくれます:

/**
 * Add the field to the checkout
 **/
add_action('woocommerce_after_order_notes', 'my_custom_checkout_field');

function my_custom_checkout_field( $checkout ) {

    echo '<div id="my_custom_checkout_field"><h3>'.__('My Field').'</h3>';
    woocommerce_form_field( 'my_field_name', array( 
        'type'          => 'checkbox', 
        'class'         => array('my-field-class form-row-wide'), 
        'label'         => __('Fill in this field'), 
        'placeholder'   => __('Enter a number'),
        ), $checkout->get_value( 'my_field_name' ));

    echo '</div>';



  echo '<div id="my_custom_checkout_field"><h3>'.__('Keywords').'</h3>';

    woocommerce_form_field( 'keywords', array(
        'type'          => 'text',
        'class'         => array('my-field-class form-row-wide'),
        'label'         => __('Fill in this field'),
        'placeholder'       => __('Enter something'),
        ), $checkout->get_value( 'keywords' ));

    echo '</div>';
}

/**
 * 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 ($_POST['my_field_name']) update_post_meta( $order_id, 'My Field', esc_attr($_POST['my_field_name']));

        if ($_POST['keywords']) update_post_meta( $order_id, 'Keywords', esc_attr($_POST['keywords']));
}

/**
 * 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,Keywords';
    return $keys;
}
4

1 に答える 1

1

まず第一に:

$keys[] = 'My Field,Keywords';

次のように変更する必要があります:

$keys[] = 'My Field';
$keys[] = 'Keywords';

あなたが持っていたコードは、文字列「My Field」と「Keywords」を持つ2つの配列エントリとは対照的に、文字列「My Field、Keywords」を持つ1つの配列エントリを作成していました。

これは間違いなく問題の原因の1つです。

重要ではないかもしれませんが、2番目のdivタグのIDを変更する必要があります-同じIDを持つ複数の要素を持つことは良くありません。

これらの変更を行って、再試行してください。さらに問題がある場合は、順番に取り組むことができます。

これがお役に立てば幸いです。

于 2012-11-29T18:27:29.983 に答える