miércoles, 15 de junio de 2016

WordPress: ¿Cómo crear un formulario personalizado? - Parte 5 (Adjuntar archivos)

En esta quinta parte de esta serie de artículos (ver parte 4) veremos cómo subir archivos a la librería de medios y adjuntarlos al post que hemos creado. Luego los enviaremos por email.

Paso 1

Agregamos los tags para subir los archivos:

    <?php wp_nonce_field( 'archivoAutorizacion', 'archivoAutorizacion_nonce' ); ?>
    <p>Autorización<br/><input type="file" name="archivoAutorizacion" id="archivoAutorizacion" multiple="false" /></p><br/>
    <?php wp_nonce_field( 'archivoContrato', 'archivoContrato_nonce' ); ?>
    <p>Contrato<br/><input type="file" name="archivoContrato" id="archivoContrato" multiple="false" /></p><br/>


Nuestro formulario se verá así:



Paso 2

Agregamos el código para subir los dos archivos:


if ( isset( $_POST['archivoAutorizacion_nonce'] ) && wp_verify_nonce( $_POST['archivoAutorizacion_nonce'], 'archivoAutorizacion' ) && 
            isset( $_POST['archivoContrato_nonce'] ) && wp_verify_nonce( $_POST['archivoContrato_nonce'], 'archivoContrato' ) ) {
 
  require_once( ABSPATH . 'wp-admin/includes/image.php' );
  require_once( ABSPATH . 'wp-admin/includes/file.php' );
  require_once( ABSPATH . 'wp-admin/includes/media.php' );
    
    $attachmentAutorizacion_id = media_handle_upload( 'archivoAutorizacion', $post_id );
    if ( is_wp_error( $attachmentAutorizacion_id ) ) {
    autorizacion_response("ERROR", "No se ha podido cargar al archivo de autorización: <br/><br/>" . $attachmentAutorizacion_id->get_error_message());
    } 
    
    else {

      $attachmentContrato_id = media_handle_upload( 'archivoContrato', $post_id );
      if ( is_wp_error( $attachmentContrato_id ) ) {
          autorizacion_response("ERROR", "No se ha podido cargar al archivo de contrato: <br/><br/>" . $attachmentContrato_id->get_error_message());
      } 
      

Paso 3

Código para enviar los archivos por email.

        $adjunto1 = ABSPATH . parse_url(wp_get_attachment_url($attachmentAutorizacion_id))['path'];
        $adjunto1 = str_replace("//", "/",$adjunto1);
          
        $adjunto2 = ABSPATH . parse_url(wp_get_attachment_url($attachmentContrato_id))['path'];
        $adjunto2 = str_replace("//", "/",$adjunto2);
          
        $adjuntos = array($adjunto1, $adjunto2);
        
        $sent = wp_mail($to, utf8_decode($subject), $message, $cabeceras, $adjuntos);



Posibles errores

File is empty. Please upload something more substantial. This error could also be caused by uploads being disabled in your php.ini or by post_max_size being defined as smaller than upload_max_filesize in php.ini.

Este error puede darse cuando omitimos especificar enctype="multipart/form-data" en el tag FORM:

<form class="form_certi" id="nueva_autorizacion" enctype="multipart/form-data" action="<?php the_permalink(); ?>" method="post">


2 comentarios:

Este comentario ha sido eliminado por el autor.

Muchísimas gracias por semejante tesoro de tutorial. Cada detalle está super explicado. Los cuatro posts anteriores los he hecho paso a paso y me ha funcionado cada cosa. Desafortunadamente el último no me ha funcionado, espero ayuda...
Muchas gracias

Publicar un comentario