'!Ymd',
'/^\d{4}-\d{2}-\d{2}$/' => '!Y-m-d',
'/^\d{2}\/\d{2}\/\d{4}$/' => '!d/m/Y',
);
foreach ( $formats as $pattern => $format ) {
if ( preg_match( $pattern, $value ) ) {
$date = DateTimeImmutable::createFromFormat( $format, $value, $tz );
return $date instanceof DateTimeImmutable ? $date : null;
}
}
return null;
}
function lnz_current_event_id() {
$event_id = (int) get_queried_object_id();
return $event_id && LNZ_EVENT_CPT === get_post_type( $event_id )
? $event_id
: 0;
}
function lnz_related_program_ids( $event_id ) {
$value = lnz_raw_field( LNZ_EVENT_PROGRAMS, $event_id );
if ( empty( $value ) ) {
return array();
}
$value = is_array( $value ) ? $value : array( $value );
$ids = array();
foreach ( $value as $item ) {
if ( $item instanceof WP_Post ) {
$ids[] = (int) $item->ID;
} elseif ( is_numeric( $item ) ) {
$ids[] = (int) $item;
}
}
return array_values( array_unique( array_filter( $ids ) ) );
}
/* Filtra el Loop Grid para mostrar solo los programas relacionados con el evento. */
function lnz_elementor_program_query( $query ) {
$event_id = lnz_current_event_id();
$ids = $event_id ? lnz_related_program_ids( $event_id ) : array();
$query->set( 'post_type', LNZ_PROGRAM_CPT );
$query->set( 'post_status', 'publish' );
$query->set( 'post__in', $ids ? $ids : array( 0 ) );
$query->set( 'posts_per_page', -1 );
$query->set( 'ignore_sticky_posts', true );
$query->set( 'no_found_rows', true );
$start = $event_id ? lnz_parse_date( lnz_raw_field( LNZ_EVENT_START, $event_id ) ) : null;
$end = $event_id ? lnz_parse_date( lnz_raw_field( LNZ_EVENT_END, $event_id ) ) : null;
if ( $start && $end && $end >= $start ) {
$meta_query = $query->get( 'meta_query' );
$meta_query = is_array( $meta_query ) ? $meta_query : array();
$meta_query[] = array(
'key' => LNZ_PROGRAM_DATE,
'value' => array( $start->format( 'Ymd' ), $end->format( 'Ymd' ) ),
'compare' => 'BETWEEN',
'type' => 'NUMERIC',
);
$query->set( 'meta_query', $meta_query );
}
$query->set( 'meta_key', LNZ_PROGRAM_DATE );
$query->set(
'orderby',
array(
'meta_value_num' => 'ASC',
'menu_order' => 'ASC',
'title' => 'ASC',
)
);
}
add_action( 'elementor/query/' . LNZ_QUERY_ID, 'lnz_elementor_program_query' );
/* Añádelo una vez dentro de la plantilla Loop Item. */
function lnz_program_date_marker() {
$program_id = (int) get_the_ID();
$date = lnz_parse_date( lnz_raw_field( LNZ_PROGRAM_DATE, $program_id ) );
if ( ! $date || LNZ_PROGRAM_CPT !== get_post_type( $program_id ) ) {
return '';
}
return sprintf(
' ',
esc_attr( $date->format( 'Y-m-d' ) )
);
}
add_shortcode( 'programa_fecha_data', 'lnz_program_date_marker' );
/* Shortcode que genera todos los días del evento y marca los que tienen programas. */
function lnz_program_filter_shortcode( $atts ) {
$event_id = lnz_current_event_id();
if ( ! $event_id ) {
return '';
}
$atts = shortcode_atts(
array( 'grid' => '#programacion-loop' ),
$atts,
'filtro_programacion'
);
$start = lnz_parse_date( lnz_raw_field( LNZ_EVENT_START, $event_id ) );
$end = lnz_parse_date( lnz_raw_field( LNZ_EVENT_END, $event_id ) );
if ( ! $start || ! $end || $end < $start ) {
return current_user_can( 'edit_post', $event_id )
? '
Revisa los nombres y valores de los campos ACF de inicio y finalización.
'
: '';
}
$counts = array();
foreach ( lnz_related_program_ids( $event_id ) as $program_id ) {
$date = lnz_parse_date( lnz_raw_field( LNZ_PROGRAM_DATE, $program_id ) );
if ( $date && $date >= $start && $date <= $end ) {
$key = $date->format( 'Y-m-d' );
$counts[ $key ] = isset( $counts[ $key ] ) ? $counts[ $key ] + 1 : 1;
}
}
$months = array( 1 => 'ENE', 'FEB', 'MAR', 'ABR', 'MAY', 'JUN', 'JUL', 'AGO', 'SEP', 'OCT', 'NOV', 'DIC' );
$period = new DatePeriod( $start, new DateInterval( 'P1D' ), $end->modify( '+1 day' ) );
$month = '';
ob_start();
?>
format( 'Y-m-d' );
$month_key = $date->format( 'Y-m' );
$available = isset( $counts[ $key ] );
?>
format( 'n' ) ] ); ?>
format( 'j' ) ); ?>
format( 'j' ) ); ?>
No hay programación para este día.
button.dataset.date === date) || null;
}
function getItems(grid) {
const loopItems = Array.from(grid.querySelectorAll('.e-loop-item'));
return loopItems.length
? loopItems
: Array.from(grid.querySelectorAll('.elementor-loop-container > *'));
}
function applyFilter(filter, date) {
let grid;
try {
grid = document.querySelector(filter.dataset.grid || '#programacion-loop');
} catch (error) {
return;
}
if (!grid) return;
filter.querySelectorAll('.lnz-program-day.is-available').forEach((button) => {
const selected = Boolean(date && button.dataset.date === date);
button.classList.toggle('is-selected', selected);
button.setAttribute('aria-pressed', selected ? 'true' : 'false');
});
let visible = 0;
getItems(grid).forEach((item) => {
const marker = item.querySelector('.lnz-program-date');
const itemDate = marker ? marker.dataset.programDate : '';
const show = !date || itemDate === date;
item.classList.toggle('lnz-program-hidden', !show);
if (show) visible++;
});
filter.dataset.selectedDate = date || '';
const message = filter.querySelector('.lnz-program-empty-message');
if (message) message.hidden = visible > 0;
}
function init() {
document.querySelectorAll('.lnz-program-filter').forEach((filter) => {
if (filter.dataset.initialized === '1') return;
filter.dataset.initialized = '1';
const requested = new URL(window.location.href).searchParams.get('programacion_fecha') || '';
applyFilter(filter, findButton(filter, requested) ? requested : '');
});
}
document.addEventListener('click', (event) => {
const button = event.target.closest('.lnz-program-day.is-available');
if (!button) return;
const filter = button.closest('.lnz-program-filter');
const date = button.classList.contains('is-selected') ? '' : button.dataset.date;
applyFilter(filter, date);
const url = new URL(window.location.href);
date ? url.searchParams.set('programacion_fecha', date) : url.searchParams.delete('programacion_fecha');
window.history.replaceState({}, '', url.toString());
});
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
if (window.jQuery) {
window.jQuery(window).on('elementor/frontend/init', init);
}
}());
JS;
wp_add_inline_script( 'jquery', $js, 'after' );
}
add_action( 'wp_enqueue_scripts', 'lnz_program_filter_assets', 20 );
Ir al contenido
2018 Ver archivo / programa original
2019 Ver archivo / programa original
20 Jun – 2 Jul 2022 Ver archivo / programa original
2023 The XVIII edition of Flamenco Festival London 2023 will take place at Sadler's Wells Theatre, King's Place, Rich Mix and Cervantes Theatre in London from July 5th to 15th, featuring a total of 17 companies and 22 performances. Ver archivo / programa original
4 – 15 junio 2024 Flamenco was made to be felt. Be a part of the love, pain and heat at Sadler’s Wells this summer with a roster of flamenco’s rising stars and lasting legends. Experience the traditional flamenco of Vicente Amigo and the revolutionary new sounds of Israel Fernández and Diego del Morao. Eva […]
Now in its 21st year, Flamenco Festival London presents an exceptional programme bringing together some of the most prominent figures in contemporary flamenco. The festival will once again take place at leading venues such as Sadler’s Wells Theatre, Lilian Baylis Studio, Sadler’s Wells East and Jazz Café, with a programme that encompasses dance, singing and […]