Suporte » Plugins » Woocommerce – Formulário de Atualização de cadastro

Visualizando 11 respostas - 1 até 11 (de um total de 11)
  • Moderador Felipe Elia

    (@felipeelia)

    Oi @f5atualizese,

    O código PHP em si não está errado, as actions são essas mesmas, mas os valores não chegam porque seu HTML tem uma série de erros de atributos. Subi uma versão atualizada em https://pastebin.com/277m7Fzf. Testei aqui e funcionou.

    Os erros eram:
    – Para que o select exiba a opção selecionada é preciso colocar o atributo selected na option correta e não o atributo value no select. Para isso o mais fácil é usar a função selected() do WP;
    – Dois dos seus selects estavam com o atributo name duplicado;
    – Para os radio buttons é preciso o atributo checked e não a alteração do valor de value;
    – Textarea não tem value, seu valor é passado entre <textarea> e </textarea>.

    Dê uma olhada no código, faça os testes e volte para dizer se funcionou aí também, se tem alguma dúvida e, se for o caso, para marcar seu código como resolvido, beleza?

    f5atualizese

    (@f5atualizese)

    @felipeelia Obrigado por responder, muito bom, funcionou perfeitamente. Basicamente todos os campos atualizaram e permaneceram no banco de dados. Valewww….

    Só uma coisa, os campos radio: Já saiu e é assinante, quando escolho alguma opção e salvo, ele não grava. E quando entro novamente para ver se gravou ele aparece como se não tivesse escolhido nenhuma opção.

    • Esta resposta foi modificada 2 anos atrás por  f5atualizese.
    • Esta resposta foi modificada 2 anos atrás por  f5atualizese.
    Moderador Felipe Elia

    (@felipeelia)

    Estranho @f5atualizese, para mim aqui funciona.

    Tente colocar die( $_POST['jasaiu'] ); no final da função my_woocommerce_save_account_details, preencha o formulário, salve e veja o que aparece na tela. No form coloque
    <label for="jasaiu">Já Saiu? <?php echo $jasaiu ?> </label> no título do Já Saiu e veja se aparece alguma coisa do lado. No HTML veja como são impressas as tags dos radios.

    Não esqueça de voltar para dizer o que foi impresso em cada um dos casos acima e se conseguiu resolver, ok?

    f5atualizese

    (@f5atualizese)

    @felipeelia Quando atualizei os dados, apareceu numa tela em branco, a opção que eu selecionei. Por ex A tela branca com a palavra sim

    Moderador Felipe Elia

    (@felipeelia)

    Certo @f5atualizese, isso é sinal de que ele está passando pela função. Retire essa linha da função e diga o que acontece nas outras coisas, por favor.

    f5atualizese

    (@f5atualizese)

    @felipeelia Então o código ficaria assim?

    add_action( 'woocommerce_edit_account_form', 'my_woocommerce_edit_account_form' );
    add_action( 'woocommerce_save_account_details', 'my_woocommerce_save_account_details' );
     
    function my_woocommerce_edit_account_form() {
     
    	$user_id = get_current_user_id();
    	$user = get_userdata( $user_id );
     
    	if ( ! $user )
    		return;
    
    	$campos = array( 'nascimento', 'ocupacao', 'orientacao', 'como', 'frequencia', 'jasaiu', 'nome', 'relate', 'eassinante', 'oqueacha' );
    	foreach ( $campos as $campo ) {
    		$$campo = ( ! empty( $_POST[ $campo ] ) ) ? $_POST[ $campo ] : get_user_meta( $user_id, $campo, true );
    	}
     
    	?>
     
     	<p class="form-row form-row-thirds">
    		<label for="nascimento"><strong>Por favor, preencha os campos de pesquisa abaixo e ajude-nos a tornar nosso site cada vez melhor.</strong> </label>
    	</p>
    
     
    	<p class="form-row form-row-thirds">
    		<label for="nascimento">Data de Nascimento:</label>
    		<input name="nascimento" type="date" class="input-text" value="<?php echo esc_attr( $nascimento ); ?>" size="30" />
    	</p>
     
    	<p class="form-row form-row-thirds">
    		<label for="ocupacao">Ocupação:</label>
    		<input type="text" name="ocupacao" value="<?php echo esc_attr( $ocupacao ); ?>" class="input-text" />
    	</p>
     
    	<p class="form-row form-row-thirds">
    		<label for="orientacao">Orientação Sexual:</label>
    		<select name="orientacao" class="input-text" id="select">
    			<option value="---" <?php selected( $orientacao, '---' ); ?>>---</option>
    			<option value="Heterosexual" <?php selected( $orientacao, 'Heterosexual' ); ?>>Heterosexual</option>
    			<option value="Homosexual" <?php selected( $orientacao, 'Homosexual' ); ?>>Homosexual</option>
    			<option value="Bisexual" <?php selected( $orientacao, 'Bisexual' ); ?>>Bisexual</option>
    		</select>
    	</p>
    				
    	<p class="form-row form-row-thirds">
    		<label for="como">Como Conheceu?</label>
    		<select name="como" class="input-text" id="select">
    			<option value="---" <?php selected( $como, '---' ); ?>>---</option>
    			<option value="Google" <?php selected( $como, 'Google' ); ?>>Google</option>
    			<option value="Email Marketing" <?php selected( $como, 'Email Marketing' ); ?>>Email Marketing</option>
    			<option value="Modelo" <?php selected( $como, 'Modelo' ); ?>>Modelo</option>
    			<option value="Cartão" <?php selected( $como, 'Cartão' ); ?>>Cartão</option>
    			<option value="Amigo" <?php selected( $como, 'Amigo' ); ?>>Amigo</option>
    		</select>
    	</p>
    
    	<p class="form-row form-row-thirds">
    <label for="jasaiu">Já Saiu? <?php echo $jasaiu ?> </label>
    			<input type="radio" name="jasaiu" value="sim" <?php checked( $jasaiu, 'sim' ); ?> id="jasaiu_0">
    			Sim
    		</label>
    		<label>
    			<input type="radio" name="jasaiu" value="não" <?php checked( $jasaiu, 'nao' ); ?> id="jasaiu_1">
    			Não
    		</label>
    	</p>
    
    	<p class="form-row form-row-thirds">
    		<label for="nome">Nome:</label>
    		<input type="text" name="nome" value="<?php echo esc_attr( $nome ); ?>" class="input-text" />
    	</p>
    
    	<p class="form-row form-row-thirds">
    		<label for="relate">Relate:</label>
    		<textarea name="relate" class="input-text" id="relate"><?php echo esc_textarea( $relate ); ?></textarea>
    	</p>
    
    	<p class="form-row form-row-thirds">
    		<label for="eassinante">É assinante?</label>
    		<label>
    			<input type="radio" name="eassinante" value="sim" <?php checked( $eassinante, 'sim' ); ?> id="eassinante_0">
    			Sim
    		</label>
    		<label>
    			<input type="radio" name="eassinante" value="não" <?php checked( $eassinante, 'sim' ); ?> id="eassinante_1">
    			Não
    		</label>
    	</p>
    
    	<p class="form-row form-row-thirds">
    		<label for="oqueacha">O que acha do nosso conteúdo?</label>
    		<textarea name="oqueacha" class="input-text" id="oqueacha"><?php echo esc_textarea( $oqueacha ); ?></textarea>
    	</p>
    
    	<?php
     
    }
     
    function my_woocommerce_save_account_details( $user_id ) {
     	$campos = array( 'nascimento', 'ocupacao', 'orientacao', 'como', 'frequencia', 'jasaiu', 'nome', 'relate', 'eassinante', 'oqueacha' );
     	foreach ( $campos as $campo ) {
     		update_user_meta( $user_id, $campo, $_POST[ $campo ] );
     	}
    }
    
    Moderador Felipe Elia

    (@felipeelia)

    Isso mesmo @f5atualizese. Faça o teste e veja qual será o HTML gerado das linhas

    <label for="jasaiu">Já Saiu? <?php echo $jasaiu ?> </label>
    <input type="radio" name="jasaiu" value="sim" <?php checked( $jasaiu, 'sim' ); ?> id="jasaiu_0"> e
    <input type="radio" name="jasaiu" value="não" <?php checked( $jasaiu, 'nao' ); ?> id="jasaiu_1">

    f5atualizese

    (@f5atualizese)

    @felipeelia Desculpe a demora, continua dando problema. Estou querendo mudar o tipo de campo para um select.

    f5atualizese

    (@f5atualizese)

    @felipeelia Bom, troquei o tipo do campo para select, seguindo os padrões dos outros e funcionou de boa.

    Será que como admin eu consigo visualizar essas informações do usuário quando entro no cadastro dele?

    Moderador Felipe Elia

    (@felipeelia)

    Oi @f5atualizese,

    Do jeito que está não, os campos não são exibidos no admin. Para isso você vai precisar das actions:

    • register_form – para alterar o formulário de registro de novos usuários
    • show_user_profile – para alterar o form de edição do próprio usuário
    • edit_user_profile – para alterar o form de edição do outros usuários
    • user_register – para salvar os dados do novo usuário
    • personal_options_update – para salvar os dados na edição do próprio usuário
    • edit_user_profile_update – para salvar os dados na edição do outros usuários

    Mais alguma dúvida?

    f5atualizese

    (@f5atualizese)

    Não, obrigado @felipeelia já me ajudou pra caramba! Valewwww…

Visualizando 11 respostas - 1 até 11 (de um total de 11)
  • O tópico ‘Woocommerce – Formulário de Atualização de cadastro’ está fechado para novas respostas.