2017-12-01 23 views
0

나는 사용자가 내 계정 섹션에서 ... 체크 아웃 (필요하지 않음), 다른 기본 체크 아웃 필드 imilar 동안는 Woocommerce 계정 편집 페이지에서 사용자 정의 필드를 추가

를 기입 할 수있는 사용자 정의 체크 아웃 필드 favorite_color이 "계정 수정", 고객이이 필드 값을 편집 할 수 있도록 favorite_color 사용자 정의 필드를 추가하고 싶습니다. 내가 복사하고 코드의 원래 라인을 편집하여 템플릿 myaccount/form-edit-account.php을 편집 한 것을 들어

는 :

<p class="woocommerce-form-row woocommerce-form-row--first form-row form-row-first"> 
    <label for="account_first_name"><?php _e('First name', 'woocommerce'); ?> <span class="required">*</span></label> 
    <input type="text" class="woocommerce-Input woocommerce-Input--text input-text" name="account_first_name" id="account_first_name" value="<?php echo esc_attr($user->first_name); ?>" /> 
</p> 

나는 나의 favorite_color와 필드도 보여줍니다 저장된 값으로 account_first_name 교체 현장에서 ( $user->favorite_color 덕분에)

하지만 나쁜 부분은 저장되지 않습니다.

이 코드를 저장하고 저장하려면 어떤 코드를 추가해야합니까?

원래 템플릿 코드는 다음과 같습니다

<?php 
/** 
* Edit account form 
* 
* This template can be overridden by copying it to yourtheme/woocommerce/myaccount/form-edit-account.php. 
* 
* HOWEVER, on occasion WooCommerce will need to update template files and you 
* (the theme developer) will need to copy the new files to your theme to 
* maintain compatibility. We try to do this as little as possible, but it does 
* happen. When this occurs the version of the template file will be bumped and 
* the readme will list any important changes. 
* 
* @see  https://docs.woocommerce.com/document/template-structure/ 
* @author WooThemes 
* @package WooCommerce/Templates 
* @version 2.6.0 
*/ 

if (! defined('ABSPATH')) { 
    exit; 
} 

do_action('woocommerce_before_edit_account_form'); ?> 

<form class="woocommerce-EditAccountForm edit-account" action="" method="post"> 

    <?php do_action('woocommerce_edit_account_form_start'); ?> 

    <p class="woocommerce-form-row woocommerce-form-row--first form-row form-row-first"> 
     <label for="account_first_name"><?php _e('First name', 'woocommerce'); ?> <span class="required">*</span></label> 
     <input type="text" class="woocommerce-Input woocommerce-Input--text input-text" name="account_first_name" id="account_first_name" value="<?php echo esc_attr($user->first_name); ?>" /> 
    </p> 
    <p class="woocommerce-form-row woocommerce-form-row--last form-row form-row-last"> 
     <label for="account_last_name"><?php _e('Last name', 'woocommerce'); ?> <span class="required">*</span></label> 
     <input type="text" class="woocommerce-Input woocommerce-Input--text input-text" name="account_last_name" id="account_last_name" value="<?php echo esc_attr($user->last_name); ?>" /> 
    </p> 
    <div class="clear"></div> 

    <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide"> 
     <label for="account_email"><?php _e('Email address', 'woocommerce'); ?> <span class="required">*</span></label> 
     <input type="email" class="woocommerce-Input woocommerce-Input--email input-text" name="account_email" id="account_email" value="<?php echo esc_attr($user->user_email); ?>" /> 
    </p> 

    <fieldset> 
     <legend><?php _e('Password change', 'woocommerce'); ?></legend> 

     <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide"> 
      <label for="password_current"><?php _e('Current password (leave blank to leave unchanged)', 'woocommerce'); ?></label> 
      <input type="password" class="woocommerce-Input woocommerce-Input--password input-text" name="password_current" id="password_current" /> 
     </p> 
     <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide"> 
      <label for="password_1"><?php _e('New password (leave blank to leave unchanged)', 'woocommerce'); ?></label> 
      <input type="password" class="woocommerce-Input woocommerce-Input--password input-text" name="password_1" id="password_1" /> 
     </p> 
     <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide"> 
      <label for="password_2"><?php _e('Confirm new password', 'woocommerce'); ?></label> 
      <input type="password" class="woocommerce-Input woocommerce-Input--password input-text" name="password_2" id="password_2" /> 
     </p> 
    </fieldset> 
    <div class="clear"></div> 

    <?php do_action('woocommerce_edit_account_form'); ?> 

    <p> 
     <?php wp_nonce_field('save_account_details'); ?> 
     <input type="submit" class="woocommerce-Button button" name="save_account_details" value="<?php esc_attr_e('Save changes', 'woocommerce'); ?>" /> 
     <input type="hidden" name="action" value="save_account_details" /> 
    </p> 

    <?php do_action('woocommerce_edit_account_form_end'); ?> 
</form> 

<?php do_action('woocommerce_after_edit_account_form'); ?> 
+0

이상적으로는 템플릿 자체를 수정하는 대신이 템플릿에서 호출되는 동작 후크 중 하나를 통해 삽입해야합니다. – CBroe

+0

난 그냥 사용자가 "favorite_color"라는 내 예제에서는 사용자 지정 체크 아웃 필드를 변경하려면). form-edit-account.php에 어떤 코드를 추가해야합니까? – Josione

답변

1

이 그냥 사용할 수 후크 이런 식으로 사용하여 템플릿 파일을 무시하지 않고 수행 할 수 있습니다

// Add the custom field "favorite_color" 
add_action('woocommerce_edit_account_form', 'add_favorite_color_to_edit_account_form'); 
function add_favorite_color_to_edit_account_form() { 
    $user = wp_get_current_user(); 
    ?> 
     <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide"> 
     <label for="favorite_color"><?php _e('Favorite color', 'woocommerce'); ?> 
     <input type="text" class="woocommerce-Input woocommerce-Input--text input-text" name="favorite_color" id="favorite_color" value="<?php echo esc_attr($user->favorite_color); ?>" /> 
    </p> 
    <?php 
} 

// Save the custom field 'favorite_color' 
add_action('woocommerce_save_account_details', 'save_favorite_color_account_details', 12, 1); 
function save_favorite_color_account_details($user_id) { 
    // For Favorite color 
    if(isset($_POST['favorite_color'])) 
     update_user_meta($user_id, 'favorite_color', sanitize_text_field($_POST['favorite_color'])); 

    // For Billing email (added related to your comment) 
    if(isset($_POST['account_email'])) 
     update_user_meta($user_id, 'billing_email', sanitize_text_field($_POST['account_email'])); 
} 

코드의 function.php 파일에 간다 당신의 활성 자식 테마 (또는 활성 테마) 또는 모든 플러그인 파일에 있습니다.

테스트를 거쳐 작동합니다.

사용자 정의 필드를 표시하기 위해 템플릿을 덮어 쓰려면 두 번째 연결 기능 (편집 할 때 데이터를 저장하는 기능) 만 있으면됩니다.

+0

감사합니다. 작동 중입니다. 그러나 billing_email과 account_email을 동시에 업데이트 할 수 있습니까? 왜냐하면 표준 코드를 사용하면 billing_email이 아닌 account_email을 편집하기 만하기 때문입니다. "트릭"이있어서 동시에 billing_email도 편집합니까? -Jo – Josione

+0

다른 질문이 없으면 고맙습니다. 사용자 지정 필드 인 "Favorite Color 2"를 추가 할 수 있습니까? . 나는 그것을 추가하려고했지만 작동하지 않습니다, 뭔가 잘못하고 있어요 – Josione

+0

예 나는 새로운 질문을 물었습니다 https://stackoverflow.com/questions/47604357/issue-when-adding-an-additional-custom-field-in- woocommerce-edit-account-page – Josione