Adicione campos personalizados ao formulário existente no Dokan (wordpress / woocoomerce)

Estou tentando adicionar campos personalizados nas configurações do vendedor Dokan (woocommerce plugin – http://demo.wedevs.com/dokan/ ) para editar valores do endereço do usuário no woocommerce. Dokan tem um formulário no frontend para vendedores para editar as configurações de sua loja. Mudei minhas funções de temas.php com este código:

 
<input type="text" class="dokan-form-control input-md valid" name="billing_first_name" id="reg_billing_first_name" value="" />
<input type="text" class="dokan-form-control input-md valid" name="billing_first_name" id="reg_billing_first_name" value="" />
<input type="text" class="dokan-form-control input-md valid" name="billing_first_name" id="reg_billing_first_name" value="" />
<input type="text" class="dokan-form-control input-md valid" name="billing_first_name" id="reg_billing_first_name" value="" />
<?php } add_filter( 'dokan_settings_after_banner', 'endereco'); /** * Save the extra fields. * * @param int $customer_id Current customer ID. * * @return void */ function save_extra_endereco_fields( $customer_id ) { if ( isset( $_POST['billing_city'] ) ) { // WordPress default first name field. update_user_meta( $customer_id, 'billing_city', sanitize_text_field( $_POST['billing_city'] ) ); } if ( isset( $_POST['billing_postcode'] ) ) { // WordPress default last name field. update_user_meta( $customer_id, 'billing_postcode', sanitize_text_field( $_POST['billing_postcode'] ) ); } if ( isset( $_POST['billing_state'] ) ) { // WooCommerce billing phone update_user_meta( $customer_id, 'billing_state', sanitize_text_field( $_POST['billing_address_1'] ) ); } if ( isset( $_POST['billing_address_1'] ) ) { // WooCommerce billing phone update_user_meta( $customer_id, 'billing_address_1', sanitize_text_field( $_POST['billing_address_1'] ) ); } } add_action( 'dokan_store_profile_saved', 'save_extra_endereco_fields' );

O formulário mostra ok, mas simplesmente não atualiza o metodo do usuário. Outra coisa que eu não consegui fazer sem erros é mostrar o valor atual no campo de formulário imput.

Eu acho que isso é bastante fácil para um bom programador. Alguém pode me ajudar? Muito Obrigado.

Por favor, tente este código em vez disso:

 function endereco( $current_user, $profile_info ) { $billing_city = isset( $profile_info['billing_city'] ) ? $profile_info['billing_city'] : ''; $billing_postcode = isset( $profile_info['billing_postcode'] ) ? $profile_info['billing_postcode'] : ''; $billing_state = isset( $profile_info['billing_state'] ) ? $profile_info['billing_state'] : ''; $billing_address_1 = isset( $profile_info['billing_address_1'] ) ? $profile_info['billing_address_1'] : ''; ?> 
< ?php } add_filter( 'dokan_settings_after_banner', 'endereco', 10, 2); /** * Save the extra fields. * * @param int $customer_id Current customer ID. * * @return void */ function save_extra_endereco_fields( $store_id, $dokan_settings ) { if ( isset( $_POST['billing_city'] ) ) { $dokan_settings['billing_city'] = $_POST['billing_city']; } if ( isset( $_POST['billing_postcode'] ) ) { $dokan_settings['billing_postcode'] = $_POST['billing_postcode']; } if ( isset( $_POST['billing_state'] ) ) { $dokan_settings['billing_state'] = $_POST['billing_state']; } if ( isset( $_POST['billing_address_1'] ) ) { $dokan_settings['billing_address_1'] = $_POST['billing_address_1']; } update_user_meta( $store_id, 'dokan_profile_settings', $dokan_settings ); } add_action( 'dokan_store_profile_saved', 'save_extra_endereco_fields', 10, 2 );

Espero que ele resolva seus problemas.

Se você deseja adicionar um campo personalizado, por exemplo, seller_url à configuração do Dokan, veja o código abaixo.

 /*Extra field on the seller settings and show the value on the store banner -Dokan*/ // Add extra field in seller settings add_filter( 'dokan_settings_after_banner', 'extra_fields', 10, 2); function extra_fields( $current_user, $profile_info ){ $seller_url= isset( $profile_info['seller_url'] ) ? $profile_info['seller_url'] : ''; ?> 
< ?php }

O próximo passo é salvar a configuração usando o código abaixo. Isso não replaceá a configuração existente.

  //save the field value add_action( 'dokan_store_profile_saved', 'save_extra_fields', 15 ); function save_extra_fields( $store_id ) { if ( isset( $_POST['seller_url'] ) ) { $dokan_settings['seller_url'] = $_POST['seller_url']; } $existing_dokan_settings = get_user_meta( $store_id, 'dokan_profile_settings', true ); $prev_dokan_settings = ! empty( $existing_dokan_settings ) ? $existing_dokan_settings : array(); $dokan_settings = array_merge( $prev_dokan_settings,$dokan_settings); update_user_meta( $store_id, 'dokan_profile_settings', $dokan_settings ); } 

Eu tive o mesmo problema e encontrei essa resposta. Eu usei o método Sergiy Byelozyorov, que foi muito útil, mas funcionou parcialmente, pelo menos no meu caso.

O que aconteceu comigo foi que apenas as novas configurações foram armazenadas e todas as configurações antigas (ou seja, as originais, não personalizadas) foram excluídas em cada atualização de configurações.

Isso ocorreu porque no dokan, o gancho do_action “dokan_store_profile_saved” aceita apenas 1 arg, o store_id. Não houve passes dokan_settings, então a nova function

 update_user_meta( $store_id, 'dokan_profile_settings', $dokan_settings ); 

estava atualizando apenas a última matriz $ dokan_settings criada, substituindo todos os outros $ dokan_settings args com valores vazios.

Então eu tive que confiar na variável $ store_id somente e na function get_user_meta () e eu fiz assim (tome em consideração que eu precisava de outro campo extra diferente dos que você precisava):

 function save_extra_concept_field( $store_id ) { if ( isset( $_POST['vendor_concept'] ) ) { $dokan_settings['vendor_concept'] = $_POST['vendor_concept']; //update_user_meta( $store_id, 'vendor_concept', sanitize_text_field( $_POST['vendor_concept'] ) ); } $prev_dokan_settings = get_user_meta( $store_id, 'dokan_profile_settings', true ); $dokan_settings = array_merge($prev_dokan_settings,$dokan_settings); update_user_meta( $store_id, 'dokan_profile_settings', $dokan_settings ); } 

Espero que isso ajude alguém também.