Como lidar com o envio de formulários?

11

Sou novo no wordpress e, portanto, enfrento alguns problemas.

O cenário de caso de uso é o seguinte:

  1. Um usuário exibe um formulário de inscrição para iniciar um clube em sua escola.
  2. O usuário preenche o formulário e clica no botão "Enviar".
  3. O formulário precisa ser validado.
  4. Se a validação for bem-sucedida, os dados serão armazenados na tabela personalizada club_details em db e o usuário receberá uma mensagem (por exemplo: Obrigado pelo envio. Seu aplicativo será enviado ao administrador para aprovação). são mostradas ao usuário.
  5. O administrador acessa o painel de administração do Wordpress para aprovar as solicitações pendentes do clube. (Os dados são obtidos do banco de dados e mostrados para o administrador).

Eu fiz o seguinte:

  • para 1) Eu criei um formulário de inscrição / página usando o editor de HTML do Wordpress.
  • para 3) Eu tenho um arquivo javascript ( validation.js ) que possui o código de validação.
  • para 4) Eu tenho um arquivo php ( club-functions.php ) que tem uma função storeInDB() para armazenar os detalhes do aplicativo na tabela personalizada em db.
  • for 5) Eu criei minha própria pasta de plug-ins e adicionei um arquivo php ( club.php ) que exibe os detalhes do aplicativo para o administrador no painel de administração do Wordpress.

Estou preso no seguinte lugar: Como lidar com o envio do formulário. Onde devo colocar o código que chama a função de validação do javascript e depois chama a função storeInDB() .

Por favor, forneça-me algumas sugestões sobre como eu faço isso e essa abordagem é boa? Muito obrigado antecipadamente.

    
por Pooja 03.08.2012 / 23:56

2 respostas

12

Você deve usar a função wp_ajax ou wp_ajax_nopriv .

Primeiro de tudo, você deve colocar o admin ajax url como o valor do atributo action no formulário de submissão.

<form id="" action="<?php echo admin_url('admin-ajax.php'); ?>" method="post" class="form" >

Dessa forma, o formulário será submetido ao admin-ajax.php por padrão (sem JavaScript). Você pode usar JavaScript para fazê-lo funcionar usando AJAX.

A seguir, a função que usará os dados enviados. Dentro do formulário, coloque um wp_nonce_field e uma entrada oculta com a ação name. Meu valor de ação é add_transfer .

<?php wp_nonce_field('add_transfer','security-code-here'); ?>
<input name="action" value="add_transfer" type="hidden">

Você pode colocar a função que irá manipular este formulário no arquivo functions.php ou no seu plugin. Você pode usar wp_ajax_ + o nome da ação se este for um formulário apenas para usuários logados. Para usuários não conectados, use wp_ajax_nopriv + o nome da ação.

add_action('wp_ajax_add_transfer', 'process_add_transfer');

function process_add_transfer() {
if ( empty($_POST) || !wp_verify_nonce($_POST['security-code-here'],'add_transfer') ) {
    echo 'You targeted the right function, but sorry, your nonce did not verify.';
    die();
} else {
    // do your function here 
    wp_redirect($redirect_url_for_non_ajax_request);
}
    
por ifdion 04.08.2012 / 01:39
1

Primeiro, deixe-me dizer-lhe que a validação do javascript funciona no lado do cliente. então, se o usuário desativar o js, você terá problemas.

Então, você também deve validar os valores de entrada, do lado do servidor.

com isso em mente:

O código js pode ser chamado diretamente da página onde o formulário está. O atributo onsubmit é a maneira usual de chamá-lo.

exemplo

<form onSubmit="validateForms()" method="post" action="domain.com/club-contacts">
    <label for="app_email">Application</label>
    <input type="text" name="app_email" id="app_email" value="" />
    <input type="hidden" name="app_application" value="1" />
    <input type="submit" name="app_form_send" value="Send" />
</form>

page.php

Esta também pode ser sua página de modelo personalizado ou single.php. neste caso, 99 é o ID da página específica que você deseja indicar ao usuário se foi aprovado ou teve um erro.

if ( get_the_ID() == '99' ) {
  // lets validate the input
  if( !empty($_POST['app_application']) && $_POST['app_application'] == "1"  ) {
   if(!empty($_POST['app_email'])) {
    // check the codex for [Data_Validation][1]
    }
  }
}
    
por pcarvalho 04.08.2012 / 00:38

Tags