Extensión del metabox de eventos
El panel Events settings del evento se construye a partir de una matriz de configuración, expuesta mediante un filtro para que las integraciones puedan añadir pestañas y campos.
El filtro
add_filter( 'web_events_custom_meta', function ( $events ) {
// Add tabs or inputs to the event panel.
return $events;
} );
La matriz describe el panel: un título, una posición y un conjunto de pestañas que, a su vez, contienen entradas.
La estructura existente
| Clave de la pestaña | Título | Se muestra cuando |
|---|---|---|
date_time |
Date & Time | Siempre |
info |
Event info | Siempre |
form |
Registration form | Funcionalidad de asistentes activada |
attendants |
Attendants | Funcionalidad de asistentes activada |
ecommerce |
E-Commerce | WooCommerce activo |
Dos de ellas son condicionales, por lo que un código que dé por hecho que una pestaña existe fallará en algunos sitios. Compruébalo antes de modificar una.
Añadir una pestaña
add_filter( 'web_events_custom_meta', function ( $events ) {
$events['tabs']['my_extras'] = array(
'title' => __( 'Extras', 'my-plugin' ),
'inputs' => array(
'my_stream_url' => array(
'label' => __( 'Stream URL', 'my-plugin' ),
'type' => 'url',
),
'my_is_hybrid' => array(
'label' => __( 'Hybrid event', 'my-plugin' ),
'type' => 'toggle',
),
),
);
return $events;
} );
Añadir un campo a una pestaña existente
add_filter( 'web_events_custom_meta', function ( $events ) {
if ( ! isset( $events['tabs']['info']['inputs'] ) ) {
return $events;
}
$events['tabs']['info']['inputs']['my_room'] = array(
'label' => __( 'Room', 'my-plugin' ),
'type' => 'text',
);
return $events;
} );
Protege el acceso a la matriz. Las pestañas form y attendants puede que no existan.
Dónde se almacenan los valores
Los campos declarados de esta forma se guardan dentro de la matriz de metadatos pom del evento, junto a los valores propios del plugin:
$meta = get_post_meta( $event_id, 'pom', true );
$room = $meta['my_room'] ?? '';
En cambio, un campo declarado con la opción propia del framework «guardar como meta» se almacena como una clave de metadatos de entrada independiente: el plugin la utiliza para los valores sobre los que necesita hacer consultas, como las fechas y horas y el interruptor para ocultar la fecha.
Elige en consecuencia: dentro de pom para los valores de visualización y de forma independiente para todo aquello sobre lo que vayas a hacer consultas.
Nomenclatura
Añade un prefijo a las claves de tus campos. La matriz pom se comparte con los valores propios del plugin, y una colisión sobrescribe silenciosamente uno de ellos.
Contenido relacionado en las entradas
La misma cadena de filtros añade una pestaña Events al editor de entradas que incluye Related events. Si amplías el lado de las entradas, hazlo mediante la configuración de metadatos propia del tema en lugar de reutilizar el filtro de eventos.
Renderizar tu campo
Añadir un campo almacena un valor; no imprime nada de forma pública. Para renderizarlo, usa los ganchos de plantilla — consulta Integración de plantillas.
El Custom event hashtag propio del plugin es un ejemplo de un campo almacenado que la plantilla suministrada no imprime.
Protección para el tema
El panel solo existe en el tema POM. Engancha tarde y comprueba:
add_action( 'init', function () {
if ( ! post_type_exists( 'event' ) ) {
return;
}
add_filter( 'web_events_custom_meta', 'my_events_panel' );
}, 20 );