Agregué una nueva página en "Páginas" en el administrador de WordPress, y agregué varios campos personalizados. También me gustaría poder agregar un campo de carga de imágenes al editor de página. ¿Hay alguna forma de hacerlo a través de campos personalizados?
¿O hay una dirección diferente que debo tomar si necesito esta habilidad?
Respuestas:
Para cualquiera que quiera saber más sobre la carga de archivos, aquí hay una introducción rápida que cubre los principales temas y puntos débiles. Esto está escrito con WordPress 3.0 en un cuadro de Linux en mente, y el código es solo una descripción básica para enseñar los conceptos. Estoy seguro de que algunas personas aquí podrían ofrecer consejos para mejorar la implementación.
Resuma su enfoque básico
Hay al menos tres formas de asociar imágenes con publicaciones: usando un campo post_meta para almacenar la ruta de la imagen, usando un campo post_meta para almacenar la ID de la biblioteca de medios de la imagen (más sobre eso más adelante), o asignando la imagen a la publicación como un archivo adjunto . Este ejemplo utilizará un campo post_meta para almacenar la ID de la biblioteca de medios de la imagen. YMMV.
Codificación multiparte
Por defecto, los formularios de creación y edición de WordPress no tienen enctype. Si desea cargar un archivo, necesitará agregar un "enctype = 'multipart / form-data'" a la etiqueta del formulario; de lo contrario, la colección $ _FILES no se introducirá en absoluto. En WordPress 3.0, hay un gancho para eso. En algunas versiones anteriores (no estoy seguro de los detalles), debe reemplazar la cadena de la etiqueta del formulario.
Crear el cuadro de meta y campo de carga
No iré muy lejos en la creación de meta cuadros, ya que la mayoría de ustedes probablemente ya saben cómo hacerlo, pero solo diré que solo necesitan un meta cuadro simple con un campo de archivo. En el ejemplo a continuación, he incluido un código para buscar una imagen existente y mostrarla si existe. También he incluido algunas funciones simples de error / retroalimentación que pasan errores usando un campo post_meta. Querrá cambiar esto para usar la clase WP_Error ... es solo para demostración.
Manejo de la carga de archivos
Este es el más importante: en realidad manejar la carga del archivo enganchándose a la acción save_post. He incluido una función muy comentada a continuación, pero me gustaría señalar las dos funciones clave de WordPress que usa:
wp_handle_upload () hace toda la magia de, bueno, manejar la carga. Simplemente pasa una referencia a tu campo en la matriz $ _FILES y una variedad de opciones (no te preocupes demasiado por estas, la única importante que debes configurar es test_form = false. Confía en mí). Sin embargo, esta función no agrega el archivo cargado a la biblioteca de medios. Simplemente realiza la carga y devuelve la ruta del nuevo archivo (y, de manera práctica, también la URL completa). Si hay un problema, devuelve un error.
wp_insert_attachment () agrega la imagen a la biblioteca de medios y genera todas las miniaturas apropiadas. Simplemente le pasa una variedad de opciones (título, estado de la publicación, etc.) y la ruta LOCAL (no la URL) al archivo que acaba de cargar. Lo mejor de poner sus imágenes en la biblioteca de medios es que puede eliminar fácilmente todos los archivos más tarde llamando a wp_delete_attachment y pasándole el ID de la biblioteca de medios del elemento (que estoy haciendo en la función a continuación). Con esta función, también necesitará usar wp_generate_attachment_metadata () y wp_update_attachment_metadata (), que hacen exactamente lo que espera que hagan: generar metadatos para el elemento multimedia.
Permisos, propiedad y seguridad
Si tiene problemas para cargar, puede que tenga que ver con los permisos. No soy un experto en la configuración del servidor, así que corrígeme si esta parte no funciona bien.
Primero, asegúrese de que su carpeta wp-content / uploads exista y que sea propiedad de apache: apache. Si es así, debería poder establecer los permisos en 744 y todo debería funcionar. La propiedad es importante: incluso establecer permisos a 777 a veces no ayudará si el directorio no es propiedad.
También debe considerar limitar los tipos de archivos cargados y ejecutados usando un archivo htaccess. Esto evita que las personas carguen archivos que no son imágenes y ejecuten scripts disfrazados de imágenes. Probablemente deberías buscar esto en Google para obtener más información autorizada, pero puedes limitar el tipo de archivo de esta manera:
fuente
if ( ! function_exists( 'wp_handle_upload' ) ) require_once( ABSPATH . 'wp-admin/includes/file.php' );
El código que @MathSmath proporcionó es correcto. Sin embargo, si maneja muchos campos de carga o desea cargar varios archivos, entonces debe modificarlo mucho.
Además, no utiliza la biblioteca de medios de WordPress para cargar archivos (que hace todo el trabajo sucio detrás de la escena).
Te sugiero que eches un vistazo a un complemento como Meta Box . El complemento admite ambas formas de cargar archivos:
input[type="file"]
, que usa un código similar arriba (ver documentos ) yPuede ayudarlo a reducir el esfuerzo de escribir y mantener el código, especialmente cuando desea crear múltiples cargas.
Descargo de responsabilidad: soy el autor de Meta Box.
fuente