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.

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 );