Estoy tratando de buscar e insertar imágenes fuera del entorno de WordPress en una publicación personalizada a través de PHP.
¿Cómo mover / cargar esa imagen al formato de carpeta de fecha de año del directorio de carga de WordPress al igual que WordPress y configurar esa imagen como imagen destacada en la publicación personalizada?
¿También para subir imágenes a la galería de publicaciones personalizadas?
Abajo está mi código
$filename = $image['name'];
$target_path = "../wp-content/uploads/";
$target_path = $target_path . $filename;
$wp_filetype = wp_check_filetype(basename($filename), null );
$wp_upload_dir = wp_upload_dir();
$attachment = array(
'guid' => $wp_upload_dir['baseurl'] . '/' . basename( $filename ),
'post_mime_type' => $wp_filetype['type'],
'post_title' => preg_replace('/\.[^.]+$/', '', basename($filename)),
'post_content' => '',
'post_status' => 'inherit',
);
$attach_id = wp_insert_attachment( $attachment, $target_path, $post_id );
$attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
wp_update_attachment_metadata( $attach_id, $attach_data );
set_post_thumbnail( $post_id, $attach_id );
He logrado subir la imagen a mi directorio de cargas pero no puedo crear la carpeta de año y fecha. ¿Hay alguna función de wp para ello?
fuente
media_sideload_image
que'id'
y va a devolver el nuevo identificador de archivo adjunto. Por ejemplo:$new_att_id = media_sideload_image($image, $post_id, "image description...", 'id'); if(!is_wp_error($new_att_id)) { set_post_thumbnail($post_id, $new_att_id); }
Pruebe esta explicación de carga mediante una ruta y una ID de publicación .
Aquí está el código (para legado):
fuente
Consulte el siguiente código que establece la imagen destacada mediante programación. http://www.pearlbells.co.uk/code-snippets/set-featured-image-wordpress-programmatic/
fuente
Tal vez estoy malentendido, pero ¿por qué querrías hacer eso fuera del entorno de WordPress? ¡Replicar esta funcionalidad sería mucho trabajo! WordPress hace mucho más que simplemente cargar el archivo y colocarlo en un directorio específico, por ejemplo, controlar qué usuarios tienen permiso para cargar archivos, agregar registros de bases de datos para cargas y configurar relaciones de imágenes destacadas, ejecutar acciones y filtros para complementos externos que dependen de carga de archivos: todo mientras se adhiere a la configuración del sitio (en lo que respecta a las convenciones de nomenclatura, ubicación de carga de medios, etc.).
Si simplemente busca cargar archivos sin haber iniciado sesión en la sección de administración de WordPress, por ejemplo, para cargar archivos desde un sitio externo, es posible que desee echar un vistazo a la API XML-RPC y específicamente al
uploadFile
método.Otra opción podría ser escribir una mini API usted mismo. Básicamente, lo que te gustaría hacer es esto:
wp_upload_dir()
para obtener la ruta del directorio de carga ysanitize_file_name()
para construir la ruta y escribir el archivo en la ubicación resultante.wp_insert_attachment()
para almacenar el archivo adjunto en la base de datos (wp_check_filetype()
será útil para la configuraciónpost_mime_type
). Opcionalmente también establecepost_parent
y la_thumbnail_id
meta clave si lo deseas.wp_create_nonce()
ywp_verify_nonce()
para que el formulario sea un poco más seguro.fuente
wp_insert_attachment()
, creo que debería hacer mucho de lo que necesita. Me desaconsejaría modificar manualmente la base de datos fuera de WordPress si eso es lo que está haciendo. En cambio, solo mire la fuente de WordPress e intente identificar las partes responsables de agregar datos de publicación, manejar cargas de archivos e insertar archivos adjuntos. En otras palabras, más o menos lo que describí en mi respuesta anterior.