¿Cómo adjuntar archivos multimedia a una publicación mediante programación en WordPress?

3 minutos de lectura

avatar de usuario
henrywright

En WordPress, si se carga un archivo multimedia dentro de la pantalla de edición de publicaciones del administrador de WP, se adjuntará automáticamente a la publicación actual que se está editando. Sin embargo, permito que los autores de mi sitio carguen imágenes a través del front-end. El formulario de carga que he creado se encuentra en la página de la publicación (dentro del bucle), por lo que tengo disponible el ID de la publicación cuando cargue la imagen.

¿Hay alguna manera de adjuntar automáticamente la imagen cargada a la publicación? Actualmente cuando visito el Medios de comunicación en la sección de administración de WP, todas las imágenes cargadas hasta el momento están marcadas como ‘sin adjuntar’.

Árbitro:

https://codex.wordpress.org/Using_Image_and_File_Attachments#Attachment_to_a_Post

Editar: Debo mencionar que estoy usando WordPress Liveblog: https://github.com/Automattic/liveblog – las imágenes se cargan cuando un usuario pega una URL de imagen en el formulario.

avatar de usuario
Hüseyin BABAL

Puede ejecutar la siguiente función después de enviar el formulario de carga. Digamos que su formulario de carga es el siguiente:

<form action="your_action.php" method="post"
enctype="multipart/form-data">
    <input type="file" name="attachment" />
    <input type="hidden" name="post_id" value="<?php global $post; echo $post->ID; ?>" />
</form>

Y en su parte de manejo de carga:

<?php

$filename = $_FILES["file"]["attachment"];

$post_id = $_POST["post_id"];

$filetype = wp_check_filetype( basename( $filename ), null );

$wp_upload_dir = wp_upload_dir();

$attachment = array(
    'guid'           => $wp_upload_dir['url'] . "https://stackoverflow.com/" . basename( $filename ), 
    'post_mime_type' => $filetype['type'],
    'post_title'     => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ),
    'post_content'   => '',
    'post_status'    => 'inherit'
);


$attachment_id = wp_insert_attachment( $attachment, $filename, $post_id );
require_once( ABSPATH . 'wp-admin/includes/image.php' );
$attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
wp_update_attachment_metadata( $attach_id, $attach_data );

  • Gracias por la idea. Debería haber mencionado que estoy usando WordPress Liveblog: github.com/Automattic/liveblog – las imágenes se cargan cuando un usuario pega una URL de imagen en el área de texto del formulario y envía el formulario. he editado mi pregunta

    – henry wright

    07/04/2014 a las 14:07


  • ¿Cómo inserta Liveblog la imagen en la biblioteca multimedia? Si supiera esto, podría intentar aplicar tu solución.

    – henry wright

    07/04/2014 a las 14:42

  • Estoy analizando liveblog. Proporcionaré una solución ya que encontré la forma exacta.

    – Huseyin BABAL

    07/04/2014 a las 14:43

  • ¡Gracias! Por lo que puedo decir, Plupload se usa para hacer la carga. Un usuario debe ingresar la URL de la imagen y presionar enviar. Las imágenes parecen estar cargadas en la carpeta /uploads/ de WordPress y la imagen aparece en el administrador de medios en el administrador de WP. Sin embargo, cada imagen está marcada como ‘sin adjuntar’

    – henry wright

    7 abr 2014 a las 15:26

  • Creo que lo he resuelto. En liveblog.php, add_default_plupload_settings() configura algunas configuraciones predeterminadas de Plupload. post_id necesitaba ser configurado aquí para que esté disponible para media_handle_upload() más tarde a lo largo de la línea. Gracias por tu ayuda.

    – henry wright

    07/04/2014 a las 16:46

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad