Wordpress で woocommerce を使用しており、チェックアウトにいくつかのカスタム フィールドを追加しました。
add_action('woocommerce_after_order_notes', 'my_custom_checkout_field');
function my_custom_checkout_field( $checkout ) {
$extra_fields = array('job_title', 'company', 'telephone', 'occupation');
foreach($extra_fields as $key => $value) {
woocommerce_form_field($value, array(
'type' => 'text',
'class' => array('my-field-class form-row-wide'),
'label' => __($label),
'value' => '',
), $checkout->get_value( $value ));
}
}
現在、これらはチェックアウトに問題なく表示されますがwoocommerce_after_order_notes
、この場合の使用が正しいかどうかはわかりません. また、チェックアウトに追加されたフィールドに対応するユーザー メタにいくつかのカスタム フィールドを追加しました。これらはすべてユーザー プロファイル ページに表示されます。
function add_contact_methods( $contactmethods ) {
$contactmethods['job_title'] = 'Job Title';
$contactmethods['company'] = 'Company Name';
$contactmethods['telephone'] = 'Telephone';
$contactmethods['occupation'] = 'Occupation';
$contactmethods['refer'] = 'How you heard about us?';
return $contactmethods;
}
add_filter('user_contactmethods','add_contact_methods',10,1);
ご想像のとおり、プロファイル ページでこれらのフィールドのいずれかを更新すると正常に動作しますが、新しいユーザーが購入したときにユーザー メタを更新することはできないようです。これらのフィールドのユーザー メタは更新されません。データベースで。
私はこれがどのように機能するかをよく理解しており、Woocommerce プロセスにフックしてフィールドをプロセスに追加する必要があることも理解しています。したがって、このコードも関数に追加しました。
add_action('woocommerce_checkout_update_user_meta', 'my_custom_checkout_field_update_user_meta');
function my_custom_checkout_field_update_user_meta( $user_id ) {
global $extra_fields;
foreach($extra_fields as $key => $value) {
if ($_POST[$value]) update_user_meta( $user_id, $value, esc_attr($_POST[$value]));
}
}
ねじれは、既にメンバーとしてサインインしているユーザーが再購入してチェックアウトを行った場合に機能することです-これが機能する理由は、$user_id
既に存在するためですが、新しいユーザーがチェックアウトするときはまだありませんユーザーとして存在するため、関数は存在しないNIL
場所のユーザーメタを更新できませ$user_id
ん。
私の質問は、おそらくユーザーが作成された後にチェックアウトプロセスにフックする方法です。これにより、$user_id
返されたものを取得し、この関数を実行してユーザーメタを更新できます。