Saltar al contenido principal
Versión: 0.2.0-alpha

Medios

Permite localizar archivos adjuntos en la biblioteca de medios, detectar archivos huérfanos o desvinculados, inspeccionar tipos MIME y resolver URLs y dimensiones según cada tamaño registrado.

La arquitectura de gestión de medios consta de tres componentes interconectados:

  1. Servicio Media (Media): El punto de entrada principal para búsquedas de archivos adjuntos por ID numérico, slug, título o URL/ruta, descubrimiento de archivos adjuntos huérfanos, inspección de tipos MIME, eliminación y encadenamiento del constructor de consultas.
  2. Modelo Attachment (Attachment): Una entidad que representa un archivo adjunto individual de WordPress, exponiendo propiedades normalizadas (ID, title, caption, description, alt, mime_type, url, file_path, filesize, filesize_human, dimensions, sizes, date, modified, author_id, parent_id), métodos de resolución específicos de tamaño (get_url(), get_path(), get_dimensions()) y eliminación (delete()).
  3. Modelo PostMeta (PostMeta): Un repositorio de metadatos accesible mediante attachment.meta que proporciona operaciones CRUD de metadatos e integración del constructor de consultas vinculada al archivo adjunto principal.

Acceso y recuperación de archivos adjuntos​

Media.get()​

Recupera una única instancia del modelo Attachment por identificador (ID numérico, slug, título, URL, ruta relativa o nombre de archivo), o ejecuta las condiciones acumuladas del constructor de consultas cuando se llama sin argumentos.

Media.get(
int|string|null:identifier = null
): Attachment|array|null

Modos de resolución​

  • Por ID numérico (int o cadena numérica): Consulta a través de get_post(absint($identifier)) y verifica que post_type === 'attachment'. Devuelve una instancia del modelo Attachment, o null si el archivo adjunto no existe.
  • Por URL, ruta o nombre de archivo (string que coincida con formatos de URL, que comience con http:// o https://, que contenga separadores de ruta / o que termine con una extensión de archivo como .jpg, .png, .pdf):
    1. Si se resuelve un ID, consulta get_post() y verifica post_type === 'attachment'.
    2. Devuelve una instancia del modelo Attachment, o null si no se encuentra ningún archivo adjunto coincidente.
  • Por slug o nombre del archivo adjunto (string): Consulta a través de get_posts() con name = sanitize_title($identifier) con post_type = 'attachment' y post_status = 'any'. Devuelve una instancia del modelo Attachment, o null si no hay coincidencias.
  • Por título (string): Consulta a través de get_posts() con title = $identifier con post_type = 'attachment' y post_status = 'any'. Devuelve una instancia del modelo Attachment, o null si no hay coincidencias.
  • Sin argumentos (null): Ejecuta las condiciones acumuladas del QueryBuilder contra wp_posts, replica las filas coincidentes en una tabla SQLite en memoria, vacía el búfer y devuelve los resultados como un arreglo de objetos de fila.

Ejemplos​

/* Buscar archivo adjunto por ID numérico */
Media.get(42)
/* Buscar archivo adjunto por URL del archivo original */
Media.get('https://example.com/wp-content/uploads/2026/08/hero-banner.jpg')
/* Buscar archivo adjunto utilizando una URL de dimensión de miniatura generada */
Media.get('https://example.com/wp-content/uploads/2026/08/hero-banner-300x200.jpg')
/* Buscar archivo adjunto utilizando una URL de imagen escalada de WordPress */
Media.get('https://example.com/wp-content/uploads/2026/08/hero-banner-scaled.jpg')
/* Buscar archivo adjunto por ruta de subida relativa */
Media.get('2026/08/hero-banner.jpg')
/* Buscar archivo adjunto por slug */
Media.get('hero-banner')

Media.resolve_id()​

Resuelve cualquier URL de un archivo adjunto, URL de miniatura, URL de variante generada, ruta relativa o nombre de archivo a su ID de post correspondiente en WordPress.

Media.resolve_id(string:url): ?int

Parámetros​

  • url (string, requerido): La URL del archivo adjunto, URL de miniatura de tamaño secundario, ruta de subida relativa o nombre de archivo a resolver.

Pipeline de resolución​

resolve_id() aplica un algoritmo secuencial de coincidencia heurística en 5 etapas:

  1. Resolución de URL nativa directa: Normaliza URLs relativas usando home_url() y ejecuta attachment_url_to_postid($full_url).
  2. Eliminación de sufijos de dimensión y modificadores: Elimina sufijos de dimensión de miniatura generados (-300x200, -1024x768) y modificadores de procesadores de imágenes (-scaled, -rotated) mediante el patrón /-(?:\d+x\d+|scaled|rotated)(?=\.[a-zA-Z0-9]+$)/i y vuelve a consultar attachment_url_to_postid().
  3. Ruta relativa a uploads y búsqueda en metadatos: Extrae la ruta relativa a wp_upload_dir()['baseurl'] o /wp-content/uploads/ y realiza las siguientes comprobaciones en la base de datos:
    • Coincidencia directa contra _wp_attached_file en wp_postmeta.
    • Coincidencia de ruta relativa limpia contra _wp_attached_file sin sufijos de dimensión ni -scaled.
    • Coincidencia de nombre de archivo contra _wp_attached_file por nombre base (meta_value = filename o meta_value LIKE '%/filename').
    • Búsqueda de tamaño secundario dentro de filas serializadas _wp_attachment_metadata que coincidan con el nombre base de la miniatura.
  4. Por GUID (fallback): Consulta wp_posts donde post_type = 'attachment' comparando guid con la URL sin procesar o la URL completa normalizada.
  5. Por defecto (fallback): Devuelve null si todas las heurísticas no logran resolver un ID.

Ejemplos​

/* Resolver ID desde una URL completa de miniatura */
Media.resolve_id('https://example.com/wp-content/uploads/2026/08/product-photo-150x150.jpg')
/* Resolver ID desde una ruta relativa */
Media.resolve_id('/wp-content/uploads/2026/08/document.pdf')

Media.unattached()​

Recupera archivos adjuntos no asignados (archivos huérfanos en la biblioteca de medios donde post_parent = 0 y post_status = 'inherit').

Media.unattached(int:limit = 50): array

Parámetros​

  • limit (int, opcional): Número máximo de archivos adjuntos sin asignar a devolver. El valor predeterminado es 50.

Valor de retorno​

Devuelve un arreglo de instancias del modelo Attachment que representan archivos adjuntos sin asignar.

Ejemplos​

/* Recuperar hasta 50 archivos adjuntos sin asignar */
Media.unattached()
/* Recuperar hasta 10 archivos adjuntos sin asignar */
Media.unattached(10)

Media.mime_types()​

Recupera una lista alfabética de todos los tipos MIME distintos almacenados en la biblioteca de medios de WordPress.

Media.mime_types(): array

Valor de retorno​

Devuelve un arreglo indexado de cadenas que contiene tipos MIME únicos encontrados en wp_posts donde post_type = 'attachment' (por ejemplo, ['application/pdf', 'image/jpeg', 'image/png', 'image/webp', 'video/mp4']).

Ejemplo​

/* Recuperar todos los tipos MIME distintos en la biblioteca de medios */
Media.mime_types()

Media.delete()​

Elimina un archivo adjunto de la base de datos y borra todos los archivos físicos asociados (archivo original y miniaturas de tamaños secundarios generadas) del sistema de archivos del servidor de forma definitiva.

Media.delete(
int:attachment_id,
bool:force = false
): bool

Parámetros​

  • attachment_id (int, requerido): El ID del archivo adjunto a eliminar.
  • force (bool, opcional): Cuando es true, omite la papelera y elimina el registro y los archivos de forma definitiva. El valor predeterminado es false.

Valor de retorno​

Devuelve true si el archivo adjunto fue resuelto y eliminado, o false en caso de error.

Protección contra Escritura

Eliminar archivos adjuntos modifica tanto la base de datos como el sistema de archivos del servidor.

Lanza una excepción si EXPRESSION_LAB_DATABASE_READONLY o EXPRESSION_LAB_FILESYSTEM_READONLY están establecidos en true. Ambas constantes deben establecerse en false en wp-config.php.

Ejemplos​

/* Enviar archivo adjunto a la papelera por ID numérico */
Media.delete(42)
/* Eliminar de forma definitiva el archivo adjunto y los archivos físicos omitiendo la papelera */
Media.delete(42, true)
/* Eliminar archivo adjunto identificado por URL de miniatura */
Media.delete('https://example.com/wp-content/uploads/2026/08/obsolete-image-300x200.jpg', true)

Constructor de consultas de archivos adjuntos (query builder)​

El servicio Media incorpora métodos encadenables de constructor de consultas dirigidos a la tabla wp_posts. Todas las operaciones encadenadas en Media se delimitan a archivos adjuntos mediante una condición base interna (post_type = 'attachment'). Las condiciones se acumulan en grupos y se compilan en SQL parametrizado cuando se ejecutan mediante get() o query(). Los datos replicados se colocan en una tabla SQLite en memoria y se descartan al vaciar el búfer.

Media.where()​

Agrega una condición WHERE combinada con lógica AND dentro del grupo de condiciones actual.

Media.where(
string:column,
mixed:operator_or_value,
mixed:value = null
): Media

Firmas de llamada​

  • Igualdad (Dos argumentos): Media.where('column', 'value')
  • Condición IN (Dos argumentos con arreglo): Media.where('column', ['val1', 'val2'])
  • Operador de comparación (Tres argumentos): Media.where('column', 'operator', 'value')

Operadores de comparación compatibles​

La forma de tres argumentos Media.where(column, operator, value) acepta operadores de comparación estándar de SQL como cadenas:

OperadorDescripciónEjemplo
'='Igualdad exacta (predeterminado)Media.where('post_mime_type', '=', 'image/png').get(), o Media.where('post_mime_type', 'image/png').get()
'>'Mayor queMedia.where('ID', '>', 100).get()
'>='Mayor o igual queMedia.where('ID', '>=', 100).get()
'<'Menor queMedia.where('ID', '<', 50).get()
'<='Menor o igual queMedia.where('ID', '<=', 50).get()
'!=', '<>'No igualMedia.where('post_mime_type', '!=', 'image/jpeg').get()
'like'Coincidencia de patrones SQL LIKEMedia.where('post_title', 'like', '%logo%').get()
'not like'Coincidencia de patrones SQL LIKE negadaMedia.where('post_title', 'not like', '%draft%').get()
'in'Pertenencia a conjuntos (el valor debe ser un arreglo)Media.where('post_mime_type', 'in', ['image/jpeg', 'image/png']).get()
'not in'Pertenencia a conjuntos negada (el valor debe ser un arreglo)Media.where('post_mime_type', 'not in', ['image/gif', 'image/bmp']).get()
'between'Comprobación de rango (el valor debe ser un arreglo de dos elementos [min, max])Media.where('post_date', 'between', ['2026-01-01', '2026-12-31']).get()
Sintaxis de QueryBuilder vs Database.mirror

Los métodos del QueryBuilder (where(), or_where()) aceptan cadenas de operadores SQL estándar ('>', 'like', 'between') y las compilan en los objetos de condición recursivos con prefijo $ requeridos por Database.mirror().

Ejemplos​

/* Consultar imágenes JPEG */
Media.where('post_mime_type', 'image/jpeg').get()
/* Consultar archivos adjuntos subidos por un usuario específico */
Media.where('post_author', 1).get()
/* Consultar documentos PDF que coincidan con un patrón de título */
Media.where('post_mime_type', 'application/pdf').where('post_title', 'like', '%Report%').get()

Media.or_where()​

Agrega una condición WHERE que inicia un nuevo grupo de condiciones combinado con los grupos anteriores mediante lógica OR. Las condiciones añadidas dentro de cada grupo usando where() se combinan mediante AND. La delimitación a post_type = 'attachment' se conserva en todos los grupos.

Media.or_where(
string:column,
mixed:operator_or_value,
mixed:value = null
): Media

Ejemplo​

/* Recuperar archivos adjuntos que sean imágenes PNG o documentos PDF */
Media.where('post_mime_type', 'image/png')
.or_where('post_mime_type', 'application/pdf')
.get()

Media.order_by()​

Especifica el ordenamiento de columnas para los resultados de la consulta. Se puede encadenar varias veces para aplicar ordenamiento multi-columna.

Media.order_by(
string:column,
string:direction = 'ASC'
): Media

Parámetros​

  • column (string, requerido): Nombre de la columna por la cual ordenar (por ejemplo, 'ID', 'post_date', 'post_title', 'post_mime_type').
  • direction (string, opcional): Dirección de ordenamiento ('ASC' o 'DESC'). El valor predeterminado es 'ASC'.

Ejemplos​

/* Ordenar archivos adjuntos por fecha de creación descendente */
Media.order_by('post_date', 'DESC').get()
/* Ordenamiento multi-columna: ordenar por tipo MIME ascendente, luego por ID descendente */
Media.order_by('post_mime_type', 'ASC')
.order_by('ID', 'DESC')
.get()

Media.limit()​

Establece el número máximo de registros de archivos adjuntos a devolver.

Media.limit(int:limit): Media

Ejemplo​

/* Recuperar los 10 archivos adjuntos más recientes */
Media.order_by('post_date', 'DESC')
.limit(10)
.get()

Media.offset()​

Establece el número de filas a omitir para la paginación.

Media.offset(int:offset): Media

Ejemplo​

/* Omitir 20 registros y recuperar los siguientes 10 */
Media.order_by('ID', 'DESC')
.offset(20)
.limit(10)
.get()

Media.query()​

Replica la tabla wp_posts en SQLite utilizando las condiciones acumuladas (incluyendo la restricción post_type = 'attachment') y opciones, luego ejecuta una consulta SQL SELECT arbitraria contra la base de datos SQLite en memoria. Reinicia el estado del constructor tras la ejecución.

Media.query(string:sql): array

Ejemplo​

/* Ejecutar agregación SQL arbitraria en archivos adjuntos replicados */
Media.query('SELECT post_mime_type, COUNT(*) AS total FROM wp_posts GROUP BY post_mime_type ORDER BY total DESC')
Extensión SQLite3 Requerida

La extensión de PHP SQLite3 debe estar instalada y habilitada en el servidor para que Media.query() funcione.


Media.count()​

Cuenta registros coincidentes en la base de datos MySQL sin almacenar filas en memoria ni inicializar una tabla SQLite. Aplica post_type = 'attachment'. Reinicia el estado del constructor tras la ejecución.

Media.count(): int

Ejemplos​

/* Contar el total de archivos adjuntos en la biblioteca de medios */
Media.count()
/* Contar imágenes PNG subidas por el usuario 1 */
Media.where('post_mime_type', 'image/png').where('post_author', 1).count()

Media.to_sql()​

Compila y devuelve la cadena de consulta SQL para las condiciones acumuladas sin ejecutarla. Aplica la delimitación post_type = 'attachment'. Reinicia el estado del constructor tras la compilación.

Media.to_sql(bool:is_count = false): string

Parámetros​

  • is_count (bool, opcional): Cuando es true, compila una consulta SELECT COUNT(*) en lugar de una proyección de columnas. El valor predeterminado es false.

Ejemplos​

/* Previsualizar consulta SQL SELECT compilada */
Media.where('post_mime_type', 'image/webp')
.order_by('ID', 'DESC')
.limit(5)
.to_sql()
/* Previsualizar consulta SQL COUNT compilada */
Media.where('post_mime_type', 'image/webp').to_sql(true)

Estadísticas y distribución​

Media.stats()​

Calcula un desglose estadístico de todos los archivos adjuntos en la tabla wp_posts agrupados por tipo MIME, generando visualizaciones interactivas en la consola de Expression Lab.

Media.stats(): array

Qué genera stats()​

Al ejecutarse en Expression Lab, Media.stats() consulta MySQL y renderiza:

  1. Tabla de visualización (Table: Media distribution by MIME type): Distribución tabular que muestra mime_type y count de registros.
  2. Gráfico radial Vega-Lite (Graph: Media distribution by MIME type): Gráfico circular/radial interactivo que agrupa los recuentos por mime_type.

Valor de retorno​

Devuelve un arreglo de arreglos asociativos con la siguiente estructura:

[
{
mime_type: 'image/jpeg',
count: 245
},
{
mime_type: 'image/png',
count: 84
},
{
mime_type: 'application/pdf',
count: 19
}
]

Ejemplo​

/* Generar estadísticas y visualizaciones de distribución de tipos MIME de archivos adjuntos */
Media.stats()

Propiedades del modelo Attachment​

Las instancias del modelo Attachment representan un archivo adjunto individual de WordPress y sus metadatos asociados.

Attachment.ID​

El identificador numérico de clave primaria del archivo adjunto en la tabla wp_posts.

Attachment.ID: ?int
  • Tipo: ?int (Solo lectura)
  • Descripción: ID de post en base de datos mapeado desde WP_Post::$ID.

Ejemplo​

Media.get(42).ID

Attachment.title​

El título del archivo adjunto.

Attachment.title: string
  • Tipo: string (Solo lectura)
  • Descripción: Valor de cadena mapeado desde WP_Post::$post_title.

Ejemplo​

Media.get(42).title

Attachment.caption​

La leyenda del archivo adjunto.

Attachment.caption: string
  • Tipo: string (Solo lectura)
  • Descripción: Valor de cadena mapeado desde WP_Post::$post_excerpt.

Ejemplo​

Media.get(42).caption

Attachment.description​

El cuerpo de descripción del archivo adjunto.

Attachment.description: string
  • Tipo: string (Solo lectura)
  • Descripción: Valor de cadena mapeado desde WP_Post::$post_content.

Ejemplo​

Media.get(42).description

Attachment.alt​

El texto alternativo para imágenes.

Attachment.alt: string
  • Tipo: string (Solo lectura)
  • Descripción: Valor recuperado del metadato de post _wp_attachment_image_alt.

Ejemplo​

Media.get(42).alt

Attachment.mime_type​

El tipo MIME del archivo adjunto.

Attachment.mime_type: string
  • Tipo: string (Solo lectura)
  • Descripción: Valor de cadena (por ejemplo, 'image/jpeg', 'image/png', 'application/pdf') mapeado desde WP_Post::$post_mime_type.

Ejemplo​

Media.get(42).mime_type

Attachment.url​

La URL pública completa al archivo original.

Attachment.url: string
  • Tipo: string (Solo lectura)
  • Descripción: Cadena URL resuelta mediante wp_get_attachment_url().

Ejemplo​

Media.get(42).url

Attachment.file_path​

La ruta absoluta del sistema de archivos al archivo original en el servidor.

Attachment.file_path: string
  • Tipo: string (Solo lectura)
  • Descripción: Cadena de ruta absoluta resuelta a través de get_attached_file().

Ejemplo​

Media.get(42).file_path

Attachment.filesize​

El tamaño físico en bytes del archivo original en disco.

Attachment.filesize: int
  • Tipo: int (Solo lectura)
  • Descripción: Recuento entero de bytes calculado a partir de filesize($file_path). Devuelve 0 si el archivo no existe en el disco.

Ejemplo​

Media.get(42).filesize

Attachment.filesize_human​

El tamaño de archivo formateado y legible para humanos del archivo original.

Attachment.filesize_human: string
  • Tipo: string (Solo lectura)
  • Descripción: Cadena formateada con el sufijo de unidad binaria apropiado (por ejemplo, '1.24 MB', '450.5 KB', '0 B').

Ejemplo​

Media.get(42).filesize_human

Attachment.dimensions​

Las dimensiones de ancho y alto del archivo original.

Attachment.dimensions: array
  • Tipo: array (Solo lectura)
  • Descripción: Arreglo asociativo con claves enteras width y height extraídas de _wp_attachment_metadata. Arreglo vacío [] si no está disponible o no es una imagen.

Ejemplo​

Media.get(42).dimensions

Attachment.sizes​

Un diccionario que asigna cada nombre de tamaño de imagen secundario registrado a sus metadatos y rutas completos.

Attachment.sizes: array
  • Tipo: array (Solo lectura)
  • Descripción: Arreglo asociativo donde cada clave es un slug de tamaño (por ejemplo, 'thumbnail', 'medium', 'medium_large', 'large') que apunta a un objeto con los siguientes campos:
CampoTipoDescripción
filestringNombre de archivo del tamaño secundario generado (por ejemplo, 'banner-300x200.jpg').
widthintAncho del tamaño secundario en píxeles.
heightintAlto del tamaño secundario en píxeles.
mime_typestringTipo MIME del archivo de tamaño secundario.
urlstringURL pública completa a la imagen de tamaño secundario.
pathstringRuta absoluta del sistema de archivos del servidor al archivo de tamaño secundario.
filesizeintTamaño del archivo en bytes (si lo proporcionan los metadatos de WordPress).

Ejemplo​

Media.get(42).sizes

Attachment.date​

La marca de tiempo de creación del archivo adjunto.

Attachment.date: string
  • Tipo: string (Solo lectura)
  • Descripción: Cadena de marca de tiempo MySQL formateada como YYYY-MM-DD HH:MM:SS, mapeada desde WP_Post::$post_date.

Ejemplo​

Media.get(42).date

Attachment.modified​

La marca de tiempo de última modificación del archivo adjunto.

Attachment.modified: string
  • Tipo: string (Solo lectura)
  • Descripción: Cadena de marca de tiempo MySQL formateada como YYYY-MM-DD HH:MM:SS, mapeada desde WP_Post::$post_modified.

Ejemplo​

Media.get(42).modified

Attachment.author_id​

El ID de base de datos del usuario que subió el archivo adjunto.

Attachment.author_id: int
  • Tipo: int (Solo lectura)
  • Descripción: ID numérico del usuario autor mapeado desde WP_Post::$post_author.

Ejemplo​

Media.get(42).author_id

Attachment.parent_id​

El ID de base de datos de la publicación superior a la que está vinculado el archivo adjunto.

Attachment.parent_id: int
  • Tipo: int (Solo lectura)
  • Descripción: ID numérico de la publicación principal mapeado desde WP_Post::$post_parent. Devuelve 0 si el archivo adjunto no está asignado o es huérfano.

Ejemplo​

Media.get(42).parent_id

Attachment.meta​

La instancia delimitada del repositorio de metadatos PostMeta asociada con este archivo adjunto.

Attachment.meta: ?PostMeta
  • Tipo: ?PostMeta (Solo lectura)
  • Descripción: Proporciona operaciones CRUD de metadatos (get, set, delete, all) y filtrado con constructor de consultas delimitado al ID de base de datos de este archivo adjunto.

Ejemplos​

/* Recuperar metadatos de ruta de archivo adjunto */
Media.get(42).meta.get('_wp_attached_file')
/* Recuperar todos los metadatos registrados para el archivo adjunto */
Media.get(42).meta.all()

Métodos del modelo Attachment​

Attachment.get_url()​

Recupera la URL pública completa para un tamaño de imagen registrado específico o el archivo original.

Attachment.get_url(string:size = 'full'): string

Parámetros​

  • size (string, opcional): Slug del tamaño de imagen registrado (por ejemplo, 'thumbnail', 'medium', 'large', 'full'). El valor predeterminado es 'full'.

Valor de retorno​

Devuelve la cadena URL resuelta a través de wp_get_attachment_image_src() o el registro interno de tamaños del modelo. Devuelve la URL del archivo original si es 'full' o está vacío.

Ejemplos​

/* Obtener URL del archivo original/completo */
Media.get(42).get_url()
/* Obtener URL de miniatura mediana */
Media.get(42).get_url('medium')
/* Obtener URL de miniatura personalizada */
Media.get(42).get_url('thumbnail')

Attachment.get_path()​

Recupera la ruta absoluta del sistema de archivos en el servidor para un tamaño de imagen registrado específico o el archivo original.

Attachment.get_path(string:size = 'full'): string

Parámetros​

  • size (string, opcional): Slug del tamaño de imagen registrado (por ejemplo, 'thumbnail', 'medium', 'large', 'full'). El valor predeterminado es 'full'.

Valor de retorno​

Devuelve la cadena de ruta absoluta del sistema de archivos al archivo de tamaño especificado. Devuelve el file_path original si es 'full' o está vacío.

Ejemplos​

/* Obtener ruta absoluta del sistema de archivos al archivo original */
Media.get(42).get_path()
/* Obtener ruta absoluta del sistema de archivos a la miniatura mediana */
Media.get(42).get_path('medium')

Attachment.get_dimensions()​

Recupera las dimensiones en píxeles (width y height) para un tamaño de imagen registrado específico o la imagen original.

Attachment.get_dimensions(string:size = 'full'): array

Parámetros​

  • size (string, opcional): Slug del tamaño de imagen registrado (por ejemplo, 'thumbnail', 'medium', 'large', 'full'). El valor predeterminado es 'full'.

Valor de retorno​

Devuelve un arreglo asociativo con claves enteras width y height (por ejemplo, { width: 300, height: 200 }).

Ejemplos​

/* Obtener dimensiones de la imagen original */
Media.get(42).get_dimensions()
/* Obtener dimensiones de la miniatura mediana */
Media.get(42).get_dimensions('medium')

Attachment.delete()​

Elimina este archivo adjunto de la base de datos y borra todos los archivos físicos asociados del sistema de archivos de forma definitiva.

Attachment.delete(bool:force = false): bool

Parámetros​

  • force (bool, opcional): Cuando es true, omite la papelera y elimina el registro y los archivos de forma definitiva. El valor predeterminado es false.

Valor de retorno​

Devuelve true tras una eliminación exitosa, o false en caso de error.

Protección contra Escritura

Eliminar un archivo adjunto modifica tanto la base de datos como el sistema de archivos del servidor.

Lanza una excepción si EXPRESSION_LAB_DATABASE_READONLY o EXPRESSION_LAB_FILESYSTEM_READONLY están establecidos en true. Ambas constantes deben establecerse en false en wp-config.php para permitir la eliminación.

Ejemplos​

/* Enviar archivo adjunto a la papelera */
Media.get(42).delete()
/* Eliminar de forma definitiva el archivo adjunto y los archivos físicos */
Media.get(42).delete(true)

Gestión de metadatos de archivos adjuntos​

Las operaciones de metadatos de archivos adjuntos se acceden a través de la propiedad meta en una instancia del modelo Attachment (por ejemplo, Media.get(42).meta).

PostMeta.get()​

Recupera un valor de metadatos para el archivo adjunto utilizando get_post_meta(), o ejecuta las condiciones acumuladas del constructor de consultas en wp_postmeta cuando se llama sin argumentos.

PostMeta.get(
?string:key = null,
bool:single = true
): mixed

Parámetros​

  • key (?string, opcional): El nombre de la clave de metadatos. Si se omite o es null, ejecuta las condiciones acumuladas del constructor de consultas en wp_postmeta para este archivo adjunto. El valor predeterminado es null.
  • single (bool, opcional): Si se devuelve un valor único (true) o un arreglo de valores (false). El valor predeterminado es true.

Valor de retorno​

Devuelve el valor de metadatos almacenado, o un arreglo de resultados del constructor de consultas cuando $key es null.

Ejemplos​

/* Recuperar un valor único de metadatos */
Media.get(42).meta.get('_wp_attachment_image_alt')
/* Recuperar todos los valores para una clave meta no única */
Media.get(42).meta.get('custom_tags', false)

PostMeta.all()​

Recupera todas las entradas de metadatos para el archivo adjunto desde wp_postmeta. Los valores se procesan mediante maybe_unserialize().

PostMeta.all(): array

Valor de retorno​

Devuelve un arreglo asociativo que asigna cada clave meta a su valor (o arreglo de valores para claves con múltiples entradas).

Ejemplo​

/* Inspeccionar todos los metadatos registrados para un archivo adjunto */
Media.get(42).meta.all()

PostMeta.set()​

Establece o actualiza una entrada de metadatos para el archivo adjunto.

PostMeta.set(
string:key,
mixed:value
): bool

Parámetros​

  • key (string, requerido): El nombre de la clave de metadatos.
  • value (mixed, requerido): El valor a almacenar.

Valor de retorno​

Devuelve true si la base de datos se actualizó, false en caso contrario.

Protección contra Escritura

Lanza una excepción si EXPRESSION_LAB_DATABASE_READONLY está establecido en true.

Ejemplo​

/* Actualizar metadatos personalizados */
Media.get(42).meta.set('license_type', 'CC-BY-4.0')

PostMeta.delete()​

Elimina una entrada de metadatos para el archivo adjunto de wp_postmeta.

PostMeta.delete(string:key): bool

Parámetros​

  • key (string, requerido): El nombre de la clave de metadatos a eliminar.

Valor de retorno​

Devuelve true si se eliminó con éxito, false en caso contrario.

Protección contra Escritura

Lanza una excepción si EXPRESSION_LAB_DATABASE_READONLY está establecido en true.

Ejemplo​

/* Eliminar entrada de metadatos */
Media.get(42).meta.delete('temp_import_hash')

Constructor de consultas en metadatos de archivos adjuntos​

El modelo PostMeta implementa el trait QueryBuilder. Todas las operaciones del constructor de consultas encadenadas en Attachment.meta se delimitan al archivo adjunto principal mediante post_id = Attachment.ID.

Los registros de metadatos replicados se colocan en una tabla SQLite en memoria y se descartan al vaciar el búfer.

PostMeta.where()​

Agrega una condición WHERE combinada con lógica AND dentro del grupo de condiciones actual en wp_postmeta.

PostMeta.where(
string:column,
mixed:operator_or_value,
mixed:value = null
): PostMeta

Firmas de llamada​

  • Igualdad (Dos argumentos): attachment.meta.where('column', 'value')
  • Condición IN (Dos argumentos con arreglo): attachment.meta.where('column', ['val1', 'val2'])
  • Operador de comparación (Tres argumentos): attachment.meta.where('column', 'operator', 'value')

Operadores de comparación compatibles​

OperadorDescripciónEjemplo
'='Igualdad exacta (predeterminado)Media.get(42).meta.where('meta_key', '=', '_wp_attached_file').get()
'>'Mayor queMedia.get(42).meta.where('meta_id', '>', 100).get()
'>='Mayor o igual queMedia.get(42).meta.where('meta_id', '>=', 100).get()
'<'Menor queMedia.get(42).meta.where('meta_id', '<', 500).get()
'<='Menor o igual queMedia.get(42).meta.where('meta_id', '<=', 500).get()
'!=', '<>'No igualMedia.get(42).meta.where('meta_key', '!=', '_wp_attached_file').get()
'like'Coincidencia de patrones SQL LIKEMedia.get(42).meta.where('meta_key', 'like', '_wp_%').get()
'not like'Coincidencia de patrones SQL LIKE negadaMedia.get(42).meta.where('meta_key', 'not like', '_wp_%').get()
'in'Pertenencia a conjuntos (el valor debe ser un arreglo)Media.get(42).meta.where('meta_key', 'in', ['_wp_attached_file', '_wp_attachment_metadata']).get()
'not in'Pertenencia a conjuntos negada (el valor debe ser un arreglo)Media.get(42).meta.where('meta_key', 'not in', ['_wp_attached_file', '_edit_lock']).get()
'between'Comprobación de rango (el valor debe ser un arreglo de dos elementos [min, max])Media.get(42).meta.where('meta_id', 'between', [100, 200]).get()

Ejemplos​

/* Consultar claves de metadatos que comiencen con _wp_ */
Media.get(42).meta.where('meta_key', 'like', '_wp_%').get()
/* Consultar claves de metadatos específicas */
Media.get(42).meta.where('meta_key', 'in', ['_wp_attached_file', '_wp_attachment_metadata']).get()

PostMeta.or_where()​

Agrega una condición WHERE que inicia un nuevo grupo de condiciones combinado con los grupos anteriores mediante lógica OR. Las condiciones añadidas dentro de cada grupo usando where() se combinan mediante AND. La delimitación a post_id = Attachment.ID se conserva en todos los grupos.

PostMeta.or_where(
string:column,
mixed:operator_or_value,
mixed:value = null
): PostMeta

Ejemplo​

/* Consultar claves de metadatos que coincidan con cualquiera de dos patrones */
Media.get(42).meta.where('meta_key', '_wp_attached_file')
.or_where('meta_key', '_wp_attachment_metadata')
.get()

PostMeta.order_by()​

Especifica el ordenamiento de columnas para los resultados de consultas de metadatos replicados.

PostMeta.order_by(
string:column,
string:direction = 'ASC'
): PostMeta

Parámetros​

  • column (string, requerido): Nombre de la columna por la cual ordenar ('meta_id', 'meta_key', 'meta_value').
  • direction (string, opcional): Dirección de ordenamiento ('ASC' o 'DESC'). El valor predeterminado es 'ASC'.

Ejemplo​

/* Ordenar filas de metadatos por meta_id descendente */
Media.get(42).meta.where('meta_key', 'like', '_wp_%')
.order_by('meta_id', 'DESC')
.get()

PostMeta.limit()​

Establece el número máximo de filas de metadatos a devolver.

PostMeta.limit(int:limit): PostMeta

Ejemplo​

/* Recuperar las primeras 5 filas de metadatos */
Media.get(42).meta.order_by('meta_id', 'ASC')
.limit(5)
.get()

PostMeta.offset()​

Establece el número de filas a omitir para la paginación a través de las filas de metadatos.

PostMeta.offset(int:offset): PostMeta

Ejemplo​

/* Paginar filas de metadatos */
Media.get(42).meta.order_by('meta_id', 'ASC')
.offset(5)
.limit(5)
.get()

PostMeta.query()​

Replica la tabla wp_postmeta en SQLite utilizando las condiciones acumuladas (incluyendo la restricción de post_id principal) y opciones, luego ejecuta una consulta SQL SELECT arbitraria contra la base de datos SQLite en memoria. Reinicia el estado del constructor tras la ejecución.

PostMeta.query(string:sql): array

Ejemplo​

/* Ejecutar consulta SQL directa contra metadatos de archivo adjunto replicados */
Media.get(42).meta.where('meta_key', 'like', '_%')
.query('SELECT meta_id, meta_key, meta_value FROM wp_postmeta ORDER BY meta_id ASC')
Extensión SQLite3 Requerida

La extensión de PHP SQLite3 debe estar instalada y habilitada en el servidor para que PostMeta.query() funcione.


PostMeta.count()​

Cuenta registros de metadatos coincidentes para el archivo adjunto en MySQL sin almacenar filas en memoria ni inicializar una tabla SQLite. Aplica la delimitación de post_id. Reinicia el estado del constructor tras la ejecución.

PostMeta.count(): int

Ejemplos​

/* Contar todas las filas de metadatos para un archivo adjunto */
Media.get(42).meta.count()
/* Contar claves de metadatos ocultas/privadas */
Media.get(42).meta.where('meta_key', 'like', '_%').count()

PostMeta.to_sql()​

Compila y devuelve la cadena de consulta SQL para la consulta de metadatos del archivo adjunto sin ejecutarla. Aplica la delimitación post_id = Attachment.ID. Reinicia el estado del constructor tras la compilación.

PostMeta.to_sql(bool:is_count = false): string

Parámetros​

  • is_count (bool, opcional): Cuando es true, compila una consulta SELECT COUNT(*) en lugar de una proyección de columnas. El valor predeterminado es false.

Ejemplos​

/* Previsualizar SQL de consulta de metadatos */
Media.get(42).meta.where('meta_key', 'like', '_wp_%').order_by('meta_id', 'DESC').to_sql()
/* Previsualizar SQL de conteo de metadatos */
Media.get(42).meta.where('meta_key', 'like', '_wp_%').to_sql(true)