Sitios de red
Permite descubrir, configurar e inspeccionar sitios en una red WordPress Multisite sin escribir llamadas a switch_to_blog() ni consultas SQL directas.
El servicio NetworkSites solo funciona en entornos de WordPress Multisite. En instalaciones de sitio único, NetworkSites.current se evalúa como null, y llamar a métodos como get(), list() o build() lanzará una excepción indicando que las funciones de red requieren el modo multisite.
La gestión de redes multisite involucra tres componentes principales:
- Servicio NetworkSites (
NetworkSites): El punto de entrada principal para descubrir, consultar, listar y construir instancias de sitios. - Modelo Site (
Site): Una entidad que representa un sitio individual en la red con propiedades, métodos de configuración (setters), gestión de membresía de usuarios y métodos de persistencia (save(),delete()). - Modelo SiteOptions (
SiteOptions): Accesible a través desite.options, proporciona operaciones CRUD de opciones con comprobación de compatibilidad de formato y gráficos de distribución de autocarga para ese subsitio específico.
Acceso y listado de sitios
NetworkSites.current
Una propiedad que devuelve la instancia del modelo Site correspondiente al contexto del sitio activo donde se está ejecutando la consola de Expression Lab.
NetworkSites.current: ?Site
Ejemplo
/* Inspeccionar el sitio actual */
NetworkSites.current
NetworkSites.get()
Resuelve y devuelve una instancia del modelo Site por su ID numérico de blog o por su combinación de dominio y ruta.
NetworkSites.get(
int|string:id_or_path
): Site
Modos de resolución
- Por ID Numérico (Entero o cadena numérica):
Se especifica un valor numérico (por ejemplo,
1,2o'2') para buscar el sitio por sublog_id. - Por dominio o ruta:
Se especifica un dominio o ruta relativa (por ejemplo,
'sub.example.com','sub.example.com/site/'o'subsite'). El servicio normaliza los protocolos (http://,https://) y las barras de ruta para encontrar registros coincidentes.
Si no se encuentra ningún sitio coincidente en la red, se lanza una excepción.
Ejemplos
/* Buscar sitio por ID numérico */
NetworkSites.get(2)
/* Buscar sitio por dominio y subruta */
NetworkSites.get('example.com/client-a/')
/* Buscar sitio de subdominio */
NetworkSites.get('shop.example.com')
NetworkSites.list()
Consulta y devuelve una lista paginada de los sitios registrados en la red, generando una tabla de visualización interactiva en la consola de Expression Lab.
NetworkSites.list(
?int:limit = 100,
int:offset = 0
): array
Parámetros
limit(?int, opcional): El número máximo de registros de sitios a recuperar. Limitado a un umbral de seguridad de1000para evitar el agotamiento de memoria en redes masivas. El valor predeterminado es100.offset(int, opcional): Número de registros de sitios a omitir para paginación. El valor predeterminado es0.
Campos devueltos
Cada elemento de sitio en el arreglo devuelto contiene:
| Campo | Tipo | Descripción |
|---|---|---|
blog_id | int | ID único del blog. |
site_id | int | ID de la red (por lo general 1). |
domain | string | Nombre de dominio sin protocolo. |
path | string | Ruta del subsitio con barras inicial y final (por ejemplo, /subsite/). |
registered | string | Marca de tiempo de creación del sitio. |
last_updated | string | Marca de tiempo de la última actualización del registro del sitio. |
public | int | Indicador de indexación en motores de búsqueda (1 para público, 0 para privado). |
archived | int | Indicador de estado archivado (1 si está archivado). |
mature | int | Indicador de contenido para adultos (1 si está marcado como maduro). |
spam | int | Indicador de spam (1 si está marcado como spam). |
deleted | int | Indicador de eliminación (1 si está marcado como eliminado). |
lang_id | int | Identificador de idioma asociado con el sitio. |
Ejemplo
/* Listar los primeros 20 sitios de la red */
NetworkSites.list(20, 0)
NetworkSites.build()
Instancia una nueva instancia no guardada del modelo Site preconfigurada para la red actual (site_id).
NetworkSites.build(): Site
Este método de fábrica permite una configuración fluida antes de guardar el nuevo sitio en la base de datos.
Ejemplo
/* Construir una nueva instancia de sitio */
NetworkSites.build()
.set_domain('example.com')
.set_path('/portal/')
.set_public(1)
Intentar acceder a site.options en una instancia de sitio no guardada lanzará una excepción: Cannot access site options on an unsaved site instance. Call save() first.. Debes llamar a save() para aprovisionar el sitio antes de interactuar con su tabla de opciones.
Propiedades del sitio
Las instancias del modelo Site exponen propiedades que describen el estado, la configuración y las opciones del subsitio:
Site.blog_id
Identificador numérico único (blog_id) para el subsitio. Mapeado desde WP_Site::$blog_id.
Site.blog_id: ?int
- Tipo:
?int(Solo lectura) - Descripción: Devuelve el ID numérico del blog si el sitio existe en la base de datos de la red. Evalúa a
nullsi la instancia proviene deNetworkSites.build()y aún no ha sido guardada.
Ejemplos
Sitio actual:
NetworkSites.current.blog_id
Sitio específico:
NetworkSites.get(2).blog_id
Site.site_id
El identificador de la red (instalación multisite) donde reside este sitio.
Site.site_id: int
- Tipo:
int(Solo lectura) - Descripción: Mapeado desde
WP_Site::$site_id. Por lo general1en instalaciones estándar de WordPress multisite.
Ejemplos
Sitio actual:
NetworkSites.current.site_id
Sitio específico:
NetworkSites.get(2).site_id
Site.domain
El nombre de dominio del subsitio.
Site.domain: string
- Tipo:
string - Descripción: Nombre de dominio sin protocolo (por ejemplo,
'example.com'o'sub.example.com').
Ejemplos
Sitio actual:
NetworkSites.current.domain
Sitio específico:
NetworkSites.get(2).domain
Site.path
La ruta relativa y estructura de directorios del subsitio.
Site.path: string
- Tipo:
string - Descripción: Ruta del subsitio con barras inicial y final (por ejemplo,
'/','/portal/','/client-a/').
Ejemplos
Sitio actual:
NetworkSites.current.path
Sitio específico:
NetworkSites.get(2).path
Site.registered
La fecha y hora en que se creó el subsitio.
Site.registered: string
- Tipo:
string(Solo lectura) - Descripción: Cadena de marca de tiempo MySQL formateada como
YYYY-MM-DD HH:MM:SS.
Ejemplos
Sitio actual:
NetworkSites.current.registered
Sitio específico:
NetworkSites.get(2).registered
Site.last_updated
La fecha y hora en que se modificó por última vez el registro del subsitio.
Site.last_updated: string
- Tipo:
string(Solo lectura) - Descripción: Cadena de marca de tiempo MySQL formateada como
YYYY-MM-DD HH:MM:SS.
Ejemplos
Sitio actual:
NetworkSites.current.last_updated
Sitio específico:
NetworkSites.get(2).last_updated
Site.public
Ajuste de visibilidad e indexación en motores de búsqueda para el subsitio.
Site.public: int
- Tipo:
int - Descripción: Indicador de visibilidad pública.
1indica que la indexación pública está permitida;0disuade a los motores de búsqueda de indexar el sitio.
Ejemplos
Sitio actual:
NetworkSites.current.public
Sitio específico:
NetworkSites.get(2).public
Site.archived
Estado de archivo del subsitio.
Site.archived: int
- Tipo:
int - Descripción:
1si el subsitio está marcado como archivado;0si está activo.
Ejemplos
Sitio actual:
NetworkSites.current.archived
Sitio específico:
NetworkSites.get(2).archived
Site.mature
Indicador de si el subsitio está marcado como contenido para adultos.
Site.mature: int
- Tipo:
int - Descripción:
1si está marcado como contenido para adultos;0si es estándar.
Ejemplos
Sitio actual:
NetworkSites.current.mature
Sitio específico:
NetworkSites.get(2).mature
Site.spam
Indicador de si el subsitio está marcado como spam.
Site.spam: int
- Tipo:
int - Descripción:
1si el subsitio está marcado como spam;0si no es spam.
Ejemplos
Sitio actual:
NetworkSites.current.spam
Sitio específico:
NetworkSites.get(2).spam
Site.deleted
Estado de eliminación y papelera del subsitio.
Site.deleted: int
- Tipo:
int - Descripción:
1si el subsitio está marcado como eliminado/en papelera;0si está activo.
Ejemplos
Sitio actual:
NetworkSites.current.deleted
Sitio específico:
NetworkSites.get(2).deleted
Site.lang_id
Identificador de idioma asociado con el registro del subsitio.
Site.lang_id: int
- Tipo:
int - Descripción: Número de ID de idioma almacenado en la base de datos de red de WordPress.
Ejemplos
Sitio actual:
NetworkSites.current.lang_id
Sitio específico:
NetworkSites.get(2).lang_id
Site.options
Instancia aislada del repositorio SiteOptions vinculada a este subsitio.
Site.options: SiteOptions
- Tipo:
SiteOptions(Solo lectura) - Descripción: Proporciona acceso a operaciones CRUD de opciones (
get,get_raw,update,update_raw,delete) y análisis de distribución de autocarga (stats) vinculadas a la tablawp_{blog_id}_optionsdel subsitio sin necesidad deswitch_to_blog().
Intentar acceder a site.options en una instancia no guardada (donde blog_id es null) lanzará una excepción: Cannot access site options on an unsaved site instance. Call save() first.. Debes llamar a save() para aprovisionar el sitio antes de interactuar con su repositorio de opciones.
Ejemplos
Sitio actual:
NetworkSites.current.options.get('blogname')
Sitio específico:
NetworkSites.get(2).options.get('blogname')
Configuración y setters del sitio
El modelo Site proporciona métodos setter fluidos y encadenables para configurar los atributos del sitio antes de llamar a save() o actualizar un registro existente. Cada setter valida y normaliza su entrada, devolviendo $this (Site):
Site.set_domain()
Establece y normaliza el dominio del sitio.
Site.set_domain(
string:domain
): Site
Parámetros
domain(string, requerido): El dominio a asignar. Los protocolos (http://,https://) y las barras finales se eliminan y sanitizan.
Valor de retorno
Devuelve la instancia actual de Site para encadenamiento de métodos.
Ejemplos
Sitio actual:
NetworkSites.current.set_domain('portal.example.com')
Sitio específico:
NetworkSites.get(2).set_domain('portal.example.com')
Site.set_path()
Establece y normaliza la subruta del sitio.
Site.set_path(
string:path
): Site
Parámetros
path(string, requerido): La subruta a asignar. Normaliza las barras iniciales y finales (por ejemplo,'portal'se convierte en'/portal/').
Valor de retorno
Devuelve la instancia actual de Site para encadenamiento de métodos.
Ejemplos
Sitio actual:
NetworkSites.current.set_path('/portal/')
Sitio específico:
NetworkSites.get(2).set_path('/portal/')
Site.set_public()
Establece la visibilidad en motores de búsqueda y el indicador de indexación pública.
Site.set_public(
int:public
): Site
Parámetros
public(int, requerido):1para permitir la indexación pública,0para privado.
Valor de retorno
Devuelve la instancia actual de Site para encadenamiento de métodos.
Ejemplos
Sitio actual:
NetworkSites.current.set_public(1)
Sitio específico:
NetworkSites.get(2).set_public(1)
Site.set_archived()
Establece el indicador de estado de archivo del sitio.
Site.set_archived(
int:archived
): Site
Parámetros
archived(int, requerido):1para marcar el sitio como archivado,0para activo.
Valor de retorno
Devuelve la instancia actual de Site para encadenamiento de métodos.
Ejemplos
Sitio actual:
NetworkSites.current.set_archived(0)
Sitio específico:
NetworkSites.get(2).set_archived(0)
Site.set_mature()
Establece el indicador de contenido para adultos del sitio.
Site.set_mature(
int:mature
): Site
Parámetros
mature(int, requerido):1para marcar como contenido maduro,0para estándar.
Valor de retorno
Devuelve la instancia actual de Site para encadenamiento de métodos.
Ejemplos
Sitio actual:
NetworkSites.current.set_mature(0)
Sitio específico:
NetworkSites.get(2).set_mature(0)
Site.set_spam()
Establece el indicador de spam para el sitio.
Site.set_spam(
int:spam
): Site
Parámetros
spam(int, requerido):1para marcar como spam,0para no spam.
Valor de retorno
Devuelve la instancia actual de Site para encadenamiento de métodos.
Ejemplos
Sitio actual:
NetworkSites.current.set_spam(0)
Sitio específico:
NetworkSites.get(2).set_spam(0)
Site.set_deleted()
Establece el indicador de eliminación/papelera para el sitio.
Site.set_deleted(
int:deleted
): Site
Parámetros
deleted(int, requerido):1para marcar el sitio como eliminado,0para activo.
Valor de retorno
Devuelve la instancia actual de Site para encadenamiento de métodos.
Ejemplos
Sitio actual:
NetworkSites.current.set_deleted(0)
Sitio específico:
NetworkSites.get(2).set_deleted(0)
Site.set_lang_id()
Establece el identificador de idioma para el sitio.
Site.set_lang_id(
int:lang_id
): Site
Parámetros
lang_id(int, requerido): El número de identificador de idioma.
Valor de retorno
Devuelve la instancia actual de Site para encadenamiento de métodos.
Ejemplos
Sitio actual:
NetworkSites.current.set_lang_id(1)
Sitio específico:
NetworkSites.get(2).set_lang_id(1)
Ciclo de vida del sitio y gestión de usuarios
Site.save()
Persiste el sitio en la base de datos de WordPress.
Site.save(): Site
- Creación de un nuevo sitio: Si
blog_ides nulo,save()ejecutawp_insert_site(), genera todas las tablas de base de datos centrales para el subsitio, asignablog_id, inicializa el repositoriosite.optionsy devuelve la instancia hidratada deSite. - Actualización de un sitio existente: Si
blog_idestá presente,save()actualiza el registro del sitio enwp_blogs/wp_sitea través dewp_update_site().
Ejemplos
Persistir actualizaciones en el sitio actual:
NetworkSites.current
.set_public(1)
.save()
Aprovisionar un nuevo subsitio:
NetworkSites.build()
/* Crear y aprovisionar un nuevo subsitio */
.set_domain('example.com')
.set_path('/staging/')
.set_public(0)
.save()
/* Configurar opciones iniciales de inmediato */
.options.update('blogname', 'Portal de Pruebas')
Site.delete()
Elimina el sitio de la red utilizando wp_delete_site() del núcleo de WordPress.
Site.delete(): bool
Eliminar un sitio borra sus registros y tablas de forma definitiva. Se debe comprobar el blog_id de destino antes de ejecutar la acción.
Ejemplos
Sitio específico por ID:
/* Eliminar el sitio con ID 5 y borrar todas sus tablas de base de datos */
NetworkSites.get(5).delete()
Sitio específico por dominio y ruta:
NetworkSites.get('example.com/demo/').delete()
Site.list_users()
Devuelve un arreglo de instancias del modelo User que representan las cuentas de usuario asignadas a este subsitio específico.
Site.list_users(): User[]
Si se llama en una instancia de Site no guardada (blog_id es null), devuelve un arreglo vacío [].
Ejemplos
Sitio actual:
NetworkSites.current.list_users()
Sitio específico:
NetworkSites.get(2).list_users()
Site.add_user()
Asigna una cuenta de usuario de WordPress a este sitio con el rol especificado.
Site.add_user(
User:user,
string:role = 'subscriber'
): bool
Parámetros
user(User): Una instancia del modeloUsera agregar al sitio (recuperada medianteUsers.get()).role(string, opcional): El rol a asignar al usuario en este sitio (por ejemplo,'subscriber','author','editor','administrator'). El valor predeterminado es'subscriber'.
Valor de retorno
Devuelve true en caso de éxito, o false en caso de error.
Ejemplos
Sitio actual:
NetworkSites.current.add_user( Users.get('anderson'), 'editor' )
Sitio específico:
NetworkSites.get(2).add_user( Users.get('anderson'), 'editor' )
Site.remove_user()
Elimina la asociación y roles de un usuario de este subsitio específico. La cuenta de usuario en sí permanece intacta en toda la red.
Site.remove_user(
User:user
): bool
Parámetros
user(User): La instancia del modeloUsera remover del sitio.
Valor de retorno
Devuelve true en caso de éxito, o false en caso de error.
Ejemplos
Sitio actual:
NetworkSites.current.remove_user( Users.get('anderson') )
Sitio específico:
NetworkSites.get(2).remove_user( Users.get('anderson') )
Gestión de opciones del sitio
Cada instancia del modelo Site proporciona un repositorio dedicado Site.options (SiteOptions), permitiendo operaciones CRUD y análisis de autocarga vinculados a la tabla wp_{blog_id}_options de ese subsitio sin requerir llamadas manuales a switch_to_blog().
Site.options.get()
Lee y decodifica o deserializa una opción de la tabla de opciones del subsitio.
Site.options.get(
string:key,
mixed:default = null
): mixed
Ejemplos
Sitio actual:
NetworkSites.current.options.get('blogname')
Sitio específico:
NetworkSites.get(2).options.get('blogname')
Site.options.get_raw()
Recupera la carga útil en cadena de texto sin procesar y sin modificar almacenada en la columna option_value del subsitio.
Site.options.get_raw(
string:key,
mixed:default = null
): ?string
Ejemplos
Sitio actual:
NetworkSites.current.options.get_raw('rewrite_rules')
Sitio específico:
NetworkSites.get(2).options.get_raw('rewrite_rules')
Site.options.update()
Actualiza o crea de forma segura una opción en el subsitio con protecciones contra conflictos de formato (evitando la corrupción accidental entre datos serializados de PHP y JSON).
Site.options.update(
string:key,
mixed:value,
string:serialization_type = Options.FORMAT_SERIALIZED
): bool
Ejemplos
Sitio actual:
NetworkSites.current.options.update('custom_theme_mods', { dark_mode: true, brand_color: '#2271b1' })
Sitio específico:
NetworkSites.get(2).options.update('custom_theme_mods', { dark_mode: true, brand_color: '#2271b1' })
Site.options.update_raw()
Escribe un valor de cadena sin procesar en la tabla de opciones del subsitio y purga la caché de objetos de ese sitio.
Site.options.update_raw(
string:key,
string:value,
string|bool|null:autoload = null
): bool
Ejemplos
Sitio actual:
NetworkSites.current.options.update_raw('custom_value', 'Personalizado!')
Sitio específico:
NetworkSites.get(2).options.update_raw('custom_value', 'Personalizado!')
Site.options.delete()
Elimina una opción del subsitio y purga su caché.
Site.options.delete(
string:key
): bool
Ejemplos
Sitio actual:
NetworkSites.current.options.delete('custom_value')
Sitio específico:
NetworkSites.get(2).options.delete('custom_value')
Site.options.stats()
Ejecuta un análisis forense optimizado en memoria sobre la tabla wp_{blog_id}_options del subsitio, generando gráficos interactivos de Vega-Lite y desgloses tabulares de prefijos de opciones y huellas de autocarga.
site.options.stats(
?int:sample_limit = 100000,
int:graph_limit = 20
): array
Ejemplos
Sitio actual:
NetworkSites.current.options.stats()
Sitio específico:
NetworkSites.get(3).options.stats()