Agregar programáticamente una publicación de WordPress con un archivo adjunto

2 minutos de lectura

avatar de usuario
Salman Khimani

Obtengo post_title, post_content y otras cosas en $_REQUEST, así como un archivo de imagen. Quiero guardar todo eso como una publicación en la base de datos de wordpress. tengo en mi pagina

<?php
require_once("wp-config.php");
$user_ID; //getting it from my function
$post_title = $_REQUEST['post_title'];
$post_content = $_REQUEST['post_content'];
$post_cat_id = $_REQUEST['post_cat_id']; //category ID of the post
$filename = $_FILES['image']['name'];

//I got this all in a array

$postarr = array(
 'post_status' => 'publish',
 'post_type' => 'post',
 'post_title' => $post_title,
 'post_content' => $post_content,
 'post_author' => $user_ID,
 'post_category' => array($category) 
 );
$post_id = wp_insert_post($postarr);

?>

Esto obtendrá todas las cosas en la base de datos como publicación, pero no sé cómo agregar el archivo adjunto y su meta de publicación.

¿Cómo puedo hacer eso? Alguien puede ayudarme? Estoy realmente confundido y he pasado unos días tratando de resolver esto.

  • Debería incluir wp-load.php en lugar del archivo de configuración.

    – Juan Magnolia

    21 de mayo de 2013 a las 6:58

avatar de usuario
Todd Moisés

Para agregar un archivo adjunto, use wp_insert_attachment():

https://developer.wordpress.org/reference/functions/wp_insert_attachment/

EJEMPLO:

<?php
  $wp_filetype = wp_check_filetype(basename($filename), null );
  $attachment = array(
     'post_mime_type' => $wp_filetype['type'],
     'post_title' => preg_replace('/\.[^.]+$/', '', basename($filename)),
     'post_content' => '',
     'post_status' => 'inherit'
  );
  $attach_id = wp_insert_attachment( $attachment, $filename, 37 );
  // you must first include the image.php file
  // for the function wp_generate_attachment_metadata() to work
  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 );
?>

Para agregar metadatos, use wp_update_attachment_metadata():

https://developer.wordpress.org/reference/functions/wp_update_attachment_metadata/

  • creo que es solo copiar y pegar de esa url… ¿puedes decirme cómo puedo usar mis variables en ella? ¿Subirá la imagen que viene a través de la solicitud a wp-content/uploads?

    – Salman Khimani

    28 de septiembre de 2010 a las 6:00

  • $post_content va a post_content, $post_id lo obtienes de la inserción de la publicación, etc…

    –Todd Moisés

    28 de septiembre de 2010 a las 17:22

avatar de usuario
JD

Si necesita cargar el archivo adjunto además de insertarlo en la base de datos, debe usar media_handle_upload(), que hará todo eso por ti. Todo lo que tienes que hacer es darle el índice del archivo en el $_FILES array y el ID de la publicación principal:

$attachment_id = media_handle_upload( 'image', $post_id );
 
if ( is_wp_error( $attachment_id ) ) {
      // The upload failed.
} else {
      // The upload succeeded!
}

¿Ha sido útil esta solución?