¿Cómo subir imágenes desde el front-end y guardarlas en la biblioteca de medios?

31 may 2016, 11:11:26
Vistas: 22.3K
Votos: 2

Estoy trabajando en un plugin. Quiero subir imágenes desde el front-end, es decir mediante input type="file". He buscado mucho en Google pero no he podido subir la imagen. Aquí está mi código para subir imágenes

<form method="post" action="options.php">
  <input type="file" name="my_image_upload" id="my_image_upload"   multiple="false" />
  <input type="hidden" name="post_id" id="post_id" value="55" />
  <?php wp_nonce_field( 'my_image_upload', 'my_image_upload_nonce' ); ?>
  <input id="submit_my_image_upload" name="submit_my_image_upload" type="submit" value="Subir" />
 </form>

<?php

if ( 
    isset( $_POST['my_image_upload_nonce'], $_POST['post_id'] ) 
    && wp_verify_nonce( $_POST['my_image_upload_nonce'], 'my_image_upload' )
    && current_user_can( 'edit_post', $_POST['post_id'] )
) {
    require_once( ABSPATH . 'wp-admin/includes/image.php' );
    require_once( ABSPATH . 'wp-admin/includes/file.php' );
    require_once( ABSPATH . 'wp-admin/includes/media.php' );
    $attachment_id = media_handle_upload( 'my_image_upload', $_POST['post_id'] );

    if ( is_wp_error( $attachment_id ) ) {
        // Hubo un error al subir la imagen.
    } else {
        // ¡La imagen se subió correctamente!
    }

} else {

    // La verificación de seguridad falló, tal vez mostrar un error al usuario.
}
function wp_verify_nonce_X($nonce, $action = -1) {
        return true;
        $user = wp_get_current_user();
        $uid = (int) $user->id;
        $i = wp_nonce_tick();
        if ( substr(wp_hash($i . $action . $uid, 'nonce'), -12, 10) == $nonce )
            return 1;
        if ( substr(wp_hash(($i - 1) . $action . $uid, 'nonce'), -12, 10) == $nonce )
            return 2;
        // Nonce inválido
        return false;
    }
Después de implementar este código obtengo este error
Fatal error: Call to undefined function wp_verify_nonce() in /home/projectdemos/public_html/WP-Team-Showcase/wp-content/plugins/wp-team-showcase/team.php on line 435

He buscado este error en Google y probado todas las posibles soluciones que encontré, pero no pude resolverlo. Díganme cómo subir la imagen y guardarla, si hay otra solución además de este código.

0
Todas las respuestas a la pregunta 2
1

Ahora tengo una respuesta para mi propia pregunta. Resolví este problema usando este código. Agrego este código solo para compartir y ayudar a otros ya que a mí me funcionó.

<input type="file" name="my_file_upload" id="my_file_upload_id" class="bg_checkbox"  >

function register_team_show_case_setting() {
//registrar nuestras configuraciones
    register_setting('my_team_show_case_setting', 'my_file_upload');
}
add_action('admin_init', 'register_team_show_case_setting');

Código para subir y guardar imagen:

require_once( ABSPATH . 'wp-admin/includes/image.php' );
require_once( ABSPATH . 'wp-admin/includes/file.php' );
require_once( ABSPATH . 'wp-admin/includes/media.php' );
$attach_id = media_handle_upload('my_file_upload', $post_id);
if (is_numeric($attach_id)) {
    update_option('option_image', $attach_id);
    update_post_meta($post_id, '_my_file_upload', $attach_id);
}

Código para mostrar la imagen

echo wp_get_attachment_url(get_option('option_image'));
6 jun 2016 11:14:34
Comentarios

Hola. ¿Cómo puedo subir múltiples imágenes con tu ejemplo?

wpdev wpdev
12 abr 2018 17:32:56
9

Estás llamando a una función de WordPress antes de que WordPress esté completamente cargado. Una forma rápida y poco elegante de solucionar esto es agregar

require_once(ABSPATH .'wp-includes/pluggable.php');

al principio de tu archivo de plugin para que tenga las funciones necesarias.

Una mejor y correcta forma de resolver esto es esperar a que WordPress termine de cargar usando uno de los hooks disponibles:

add_action( 'init', 'wpse_228301' );

o

add_action( 'wp_loaded', 'wpse_228301' );
31 may 2016 15:11:02
Comentarios

después de usar require_once(ABSPATH .'wp-includes/pluggable.php'); al principio el error desapareció pero no se suben imágenes a la biblioteca multimedia

raxa raxa
31 may 2016 18:41:14

Te recomiendo encarecidamente que desarrolles el plugin como debería ser, así que utiliza los hooks de acción init o wp_loaded para inicializar el plugin. De esa manera todas las funciones de WordPress estarán disponibles para ti. La forma en que lo estás manejando ahora con la inclusión de archivos funciona en la mayoría de los casos pero definitivamente no es la forma correcta de hacerlo. Además, mi objetivo era eliminar tu mensaje de error, no revisé todo tu código así que si el error que tenías desapareció, alguna otra parte de tu código no está funcionando correctamente.

Jebble Jebble
1 jun 2016 10:35:32

He subido una imagen usando este código <input type="file" name="my_file_upload" id="my_file_upload"><?php require_once( ABSPATH . 'wp-admin/includes/image.php' ); require_once( ABSPATH . 'wp-admin/includes/file.php' ); require_once( ABSPATH . 'wp-admin/includes/media.php' ); $attach_id = media_handle_upload( 'my_file_upload', $post_id ); if ( is_numeric( $attach_id ) ) { update_post_meta( $post_id, '_my_file_upload', $attach_id ); } ?> en mi archivo team.php. Ahora quiero mostrarla en el archivo post-type.php. ¿Puedes decirme cómo mostrarla?

raxa raxa
1 jun 2016 11:41:41

Deberías crear una nueva publicación para esto y evitar el desorden, ya que este problema está resuelto, pero lo guardas como meta del post "_my_file_upload" para que puedas recuperarlo en el front-end obteniendo ese meta del post:

$attachment = get_post_meta( get_the_ID(), '_my_file_upload' );

Jebble Jebble
1 jun 2016 12:26:32

$attachment = get_post_meta( get_the_ID(), '_my_file_upload' ); me devuelve un array vacío

raxa raxa
1 jun 2016 12:59:55

Esto no va a funcionar en los comentarios. Por favor, abre un nuevo tema para esto :)

Jebble Jebble
1 jun 2016 13:09:46

He pegado mi código aquí, por favor revísenlo http://pastebin.com/mXNC2UMJ

raxa raxa
1 jun 2016 13:40:14

Una vez más, por favor crea un nuevo tema con suficiente información para que yo y otras personas podamos tener un post adecuado con el que trabajar.

Jebble Jebble
1 jun 2016 14:03:10

Continuemos esta discusión en el chat.

raxa raxa
2 jun 2016 10:45:04
Mostrar los 4 comentarios restantes