domingo, 1 de mayo de 2016

WordPress: ¿Cómo crear un formulario personalizado? - Parte 4 (Guardar datos)

En esta cuarta parte de esta serie de artículos (ver parte 3) veremos cómo almacenar los datos de nuestro formulario en un tipo de artículo personalizado (custom post type) dentro de la base de datos de WordPress. Por supuesto no accederemos en forma directa a la base, sin a través de la API.

Paso 1

Creamos un custom post type:



Paso 2

Agregamos el código para insertar dentro de WordPress y controlar el posible error.

<?php

$response = "<h1>Solicitar autorización</h1><br/>";

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  
  # Datos
  
  $to = get_option('admin_email');
  $subject = "Solicitud de autorización desde ".get_bloginfo('name');
  $message = "<b>Empresa</b>: " . $_POST['razonsocial'];
  $message .= "<br/><b>Email</b>: " . $_POST['email'];
  $cabeceras = "MIME-Version: 1.0\r\n";
  $cabeceras .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
  
  # Carga de post en WodPress
  $my_post = array(
 'post_title'    => $subject,
 'post_content'  => $message,
 'post_status'   => 'publish',
 'post_type'   => 'solicitud',
);
  $post_id = wp_insert_post( $my_post , true);
  if ( is_wp_error($post_id) ) {
    autorizacion_response("ERROR", "No se ha podido cargar la solicitud: <br/><br/>" . $post_id->get_error_message());
}
  
  # Envío de mail
  else {
    
    $subject .= " - " . $post_id;

    $sent = wp_mail($to, utf8_decode($subject), $message, $cabeceras);
if($sent) 
    autorizacion_response("OK", "Solicitud de autorización enviada.");
else 
    autorizacion_response("ERROR", "No se ha podido enviar el correo electrónico: <br/><br/>" . error_get_last()["message"]);
    
    }
 
  }


function autorizacion_response($tipo, $mensaje){
    global $response;
    $response = "<div class='mensaje{$tipo}'>{$mensaje}</div><br/>";
  }


?>


<?php get_header(); 
/*


El resultado

Sin error:


Con error:



El post creado:


El mail recibido



Ir a Parte 5.

0 comentarios:

Publicar un comentario en la entrada