¿Cómo manejar el envío de formularios?

11

Soy nuevo en WordPress y por lo tanto me enfrento a algunos problemas.

El escenario de caso de uso es el siguiente:

  1. A un usuario se le muestra un formulario de solicitud para iniciar un club en su escuela.
  2. El usuario rellena el formulario y pulsa el botón "Enviar".
  3. El formulario debe ser validado.
  4. Si la validación es exitosa, entonces los datos se almacenan en la tabla personalizada club_details en db y se muestra al usuario algún mensaje (p. ej .: Gracias por el envío. Su solicitud se envía al administrador para su aprobación). se muestran al usuario.
  5. El administrador va al panel de administración de Wordpress para aprobar las solicitudes pendientes para el club. (Los datos se obtienen de la base de datos y se muestran al administrador).

He hecho lo siguiente:

  • para 1) He creado un formulario / página de solicitud con el editor HTML de Wordpress.
  • para 3) Tengo un archivo javascript ( validation.js ) que tiene el código de validación.
  • para 4) Tengo un archivo php ( club-functions.php ) que tiene una función storeInDB() para almacenar los detalles de la aplicación en la tabla personalizada en la base de datos.
  • para 5) He creado mi propia carpeta de complementos y he agregado un archivo php ( club.php ) que muestra los detalles de la aplicación al administrador en el panel de administración de Wordpress.

Estoy atascado en el siguiente lugar: Cómo manejar el envío del formulario. ¿Dónde debería ubicar el código que llama a la función de validación de javascript y luego a la función storeInDB() ?

Por favor, dame algunas sugerencias sobre cómo puedo lograr esto. ¿Es este enfoque bueno? Muchas gracias de antemano.

    
pregunta Pooja 03.08.2012 - 23:56

2 respuestas

12

Debes usar wp_ajax o la función wp_ajax_nopriv .

En primer lugar, debe colocar el URL ajax del administrador como valor de atributo de acción en el formulario de envío.

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

De esta forma, el formulario se enviará a admin-ajax.php de forma predeterminada (sin JavaScript). Puedes usar JavaScript para que funcione con AJAX.

La siguiente es la función que utilizará los datos enviados. Dentro del formulario, ponga un wp_nonce_field y una entrada oculta con la acción de nombre. Mi valor de acción es add_transfer .

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

Puede poner la función que manejará este formulario en las funciones.php o en su archivo de complemento. Puede usar wp_ajax_ + el nombre de la acción si este es un formulario solo para usuarios registrados. Para los usuarios que no hayan iniciado sesión, use wp_ajax_nopriv + el nombre de la acción en su lugar.

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);
}
    
respondido por el ifdion 04.08.2012 - 01:39
1

Primero, déjame decirte que la validación de javascript funciona en el lado del cliente. así que si el usuario, desactiva js, vas a tener problemas.

Por lo tanto, también debe validar los valores de entrada, del lado del servidor.

con eso en mente:

El código js se puede llamar directamente desde la página donde se encuentra el formulario. El atributo onsubmit es la forma habitual de llamarlo.

example

<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 también puede ser su página de plantilla personalizada o single.php. en este caso, 99 es el ID de la página específica que desea indicar al usuario si fue aprobada o si tuvo un error.

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]
    }
  }
}
    
respondido por el pcarvalho 04.08.2012 - 00:38

Lea otras preguntas en las etiquetas