Cree eventos recurrentes programáticamente con el calendario de eventos
El calendario de eventos de Modern Tribe es probablemente el complemento de calendario más popular disponible para WordPress. He hablado sobre consultar eventos usando WP_Query en una publicación anterior, pero eso se aplica tanto a la versión gratuita como a la premium.
La versión premium ofrece muchas características excelentes, pero si está buscando manipular el calendario mediante programación, es un poco más difícil trabajar con él.
- no hay documentación clara sobre cómo aprovechar ciertas características desde la perspectiva de un desarrollador
- los lugares donde la gente ha preguntado cómo hacerlo de vez en cuando dejan algo que desear.
Caso en cuestión: cuando necesitamos crear eventos recurrentes mediante programación.
Para ser justos, creo que el complemento es para usuarios versus desarrolladores, por lo que proporcionar documentación sobre cómo aprovechar algún aspecto de su código interno no es una obligación de su parte.
En segundo lugar, es de código abierto. Entonces, para aquellos de nosotros que tenemos la necesidad de invocar parte de su código, tenemos el tiempo y un depurador a mano, no es terriblemente difícil sentarse y ver cómo funciona.
La ventaja del código abierto, ¿verdad?
Dicho esto, la forma de crear eventos recurrentes mediante programación con Calendario de eventos requiere que usemos la Tribe__Events__Pro__Recurrence__Metaclase.
Esto supone que está utilizando la última versión del complemento (como el momento de esta publicación) y que está familiarizado con el mecanismo de cola integrado en el complemento. Cubriré esto más después del código a continuación.
Para crear un evento recurrente, las cosas más básicas que necesitas son:
- el tipo de evento recurrente,
- como va a terminar,
- la fecha de inicio,
- la fecha de finalización.
El resto puede ser una serie de valores por defecto. Luego, se trata de tomar una instancia de una clase, establecer los valores y llamar a un método.
<?php
// First, create the main event. `$event` is defined prior to this call.
$event_id = tribe_create_event( $event );
// Set the arguments for the recurring event.
$data = array(
'recurrence' => array(
'rules' => array(
array(
'type' => 'Every Year',
'end-type' => 'Never',
'end' => '',
'end-count' => '',
'EventStartDate' => $start_date,
'EventEndDate' => $end_date,
'custom' => array(),
'occurrence-count-text' => 'events',
),
),
),
);
// Instantiate and set it in motion.
$recurrence_meta = new Tribe__Events__Pro__Recurrence__Meta();
$recurrence_meta->updateRecurrenceMeta( $event_id, $data );
Observe que el primer parámetro de la updateRecurrenceMetafunción asume que tiene el ID de un evento (que se recupera cuando crea un evento por primera vez).
En segundo lugar, dependiendo de la cantidad de eventos en los que esté trabajando, es posible que se tarden unos minutos en crearlos todos en la base de datos. Esto se debe a la forma en que el complemento pone en cola una serie de eventos.
En lugar de crearlos todos a la vez, serializará los eventos y luego los creará en lotes. Esta es una forma inteligente de manejarlo. Y si está buscando aprovecharlo mediante programación, esta es una forma de obtener toda esa funcionalidad de forma gratuita.