// Creazione dello shortcode per restituire il giorno della settimana da una data in formato giorno/mese/anno
function ll_giorno_shortcode($atts) {
// Recupera gli attributi passati allo shortcode
$atts = shortcode_atts(array(
'field' => '', // Nome del campo ACF
'post_id' => '', // ID del post (opzionale)
), $atts);
// Ottieni il valore del campo ACF
$field_value = get_field($atts['field'], $atts['post_id'] ? $atts['post_id'] : get_the_ID());
// Se il campo è vuoto, restituisci una stringa vuota
if (!$field_value) {
return '';
}
// Converte la data dal formato giorno/mese/anno al formato standard accettato da strtotime
$data_parts = explode('/', $field_value);
if (count($data_parts) === 3) {
$data_riordinata = $data_parts[2] . '-' . $data_parts[1] . '-' . $data_parts[0]; // Trasforma in formato anno-mese-giorno
} else {
return ''; // Restituisci vuoto se il formato non è valido
}
// Controlla se la data riorganizzata è valida
if (strtotime($data_riordinata)) {
// Converte la data in timestamp
$timestamp = strtotime($data_riordinata);
// Recupera il giorno della settimana con iniziale maiuscola
$giorno_settimana = ucfirst(date_i18n('l', $timestamp)); // Es: "Lunedì", "Martedì", ecc.
// Restituisce solo il giorno della settimana
return $giorno_settimana;
}
// Se non è una data valida, restituisci una stringa vuota
return '';
}
add_shortcode('ll_giorno', 'll_giorno_shortcode');
// Creazione dello shortcode per un singolo campo ACF
function ll_acf_shortcode($atts) {
// Recupera gli attributi passati allo shortcode
$atts = shortcode_atts(array(
'field' => '', // Nome del campo ACF
'post_id' => '', // ID del post (opzionale)
), $atts);
// Ottieni il valore del campo ACF
$field_value = get_field($atts['field'], $atts['post_id'] ? $atts['post_id'] : get_the_ID());
// Restituisci il valore o un messaggio di default
return $field_value ? $field_value : '';
}
add_shortcode('ll_acf', 'll_acf_shortcode');
// ORDINA EVENTI PASSATI PER DATA TRAMITE QUERY ID eventi_passati
add_action('elementor/query/eventi_ordinati', function ($query) {
// Ottieni la data di oggi in formato corretto
$oggi = date('d/m/Y'); // Formato corrispondente a quello registrato nel custom field
// Converti la data di oggi in un formato utilizzabile
$oggi_obj = DateTime::createFromFormat('d/m/Y', $oggi);
$oggi_obj->modify('-1 day');
$oggi_mysql = $oggi_obj->format('Y-m-d');
// Filtra gli eventi mostrando solo quelli precedenti alla data di oggi
$query->set('meta_query', array(
'relation' => 'AND',
array(
'key' => 'data_evento',
'value' => $oggi_mysql,
'compare' => '>', // Mostra solo eventi precedenti alla data di oggi
'type' => 'DATE',
),
array(
'key' => 'ora_evento',
'compare' => 'EXISTS',
'type' => 'TIME',
),
));
// Ordina prima per data_evento in ordine decrescente e poi per ora_evento
$query->set('meta_key', 'data_evento');
$query->set('orderby', array(
'meta_value' => 'ASC', // Ordina gli eventi passati dalla data più recente
'meta_value_num' => 'ASC', // Ordina le ore in ordine crescente
));
});
// ORDINA EVENTI PER DATA TRAMITE QUERY ID eventi_ordinati E NASCONDE EVENTI IL GIORNO SUCCESSIVO ALLA DATA DELL'EVENTO
add_action('elementor/query/eventi_passati', function ($query) {
// Ottieni la data di oggi in formato corretto
$oggi = date('d/m/Y'); // Formato corrispondente a quello registrato nel custom field
// Converti la data di oggi in un formato utilizzabile
$oggi_obj = DateTime::createFromFormat('d/m/Y', $oggi);
$oggi_mysql = $oggi_obj->format('Y-m-d');
// Calcola la data di ieri
$ieri_obj = clone $oggi_obj;
// $ieri_obj->modify('-1 day');
$ieri_mysql = $ieri_obj->format('Y-m-d');
// Filtra gli eventi per escludere quelli il giorno successivo alla loro data_evento
$query->set('meta_query', array(
'relation' => 'AND',
array(
'key' => 'data_evento',
'value' => $ieri_mysql,
'compare' => '<', // Esclude gli eventi il giorno successivo alla data_evento
'type' => 'DATE',
),
array(
'key' => 'ora_evento',
'compare' => 'EXISTS',
'type' => 'TIME',
),
));
// Ordina prima per data_evento in ordine decrescente e poi per ora_evento
$query->set('meta_key', 'data_evento');
$query->set('orderby', array(
'meta_value' => 'DESC', // Ordina gli eventi passati dalla data più recente
'meta_value_num' => 'ASC', // Ordina le ore in ordine crescente
));
});
// Creazione dello shortcode per verificare se un evento è in corso o scaduto
function shortcode_stato_evento($atts) {
// Recupera gli attributi passati allo shortcode
$atts = shortcode_atts(array(
'post_id' => '', // ID del post per ottenere il campo ACF
), $atts);
// Ottieni il valore del campo ACF "data_evento"
$post_id = $atts['post_id'] ? $atts['post_id'] : get_the_ID();
$data_evento = get_field('data_evento', $post_id);
// Se il campo è vuoto, restituisci una stringa vuota
if (empty($data_evento)) {
return '';
}
// Ottieni la data di oggi in formato corrispondente
$oggi = date('d/m/Y');
// Converte le date in formato utilizzabile
$data_evento_obj = DateTime::createFromFormat('d/m/Y', $data_evento);
$oggi_obj = DateTime::createFromFormat('d/m/Y', $oggi);
// Confronta le date
if ($data_evento_obj >= $oggi_obj) {
return 'In corso';
} else {
return 'Scaduto';
}
}
add_shortcode('stato_evento', 'shortcode_stato_evento');
// Creazione dello shortcode per generare una URL di Google Maps da un indirizzo ACF con nome cliccabile
function shortcode_luogo_maps($atts) {
// Recupera gli attributi passati allo shortcode
$atts = shortcode_atts(array(
'post_id' => '', // ID del post per ottenere il campo ACF
), $atts);
// Ottieni il valore del campo ACF "luogo_evento"
$post_id = $atts['post_id'] ? $atts['post_id'] : get_the_ID();
$address = get_field('luogo_evento', $post_id);
// Se l'indirizzo è vuoto, restituisci una stringa vuota
if (empty($address)) {
return '';
}
// Sostituisci gli spazi con '+' e codifica i caratteri speciali per la querystring
$encoded_address = urlencode($address);
// Genera la URL di Google Maps
$google_maps_url = 'https://www.google.com/maps/search/?api=1&query=' . $encoded_address;
// Restituisci il nome cliccabile con il link
return '' . esc_html($address) . '';
}
add_shortcode('luogo_maps', 'shortcode_luogo_maps');
// Creazione dello shortcode per generare solo la URL di Google Maps da un indirizzo ACF
function shortcode_luogo_url($atts) {
// Recupera gli attributi passati allo shortcode
$atts = shortcode_atts(array(
'post_id' => '', // ID del post per ottenere il campo ACF
), $atts);
// Ottieni il valore del campo ACF "luogo_evento"
$post_id = $atts['post_id'] ? $atts['post_id'] : get_the_ID();
$address = get_field('luogo_evento', $post_id);
// Se l'indirizzo è vuoto, restituisci una stringa vuota
if (empty($address)) {
return '';
}
// Sostituisci gli spazi con '+' e codifica i caratteri speciali per la querystring
$encoded_address = urlencode($address);
// Genera la URL di Google Maps
$google_maps_url = 'https://www.google.com/maps/search/?api=1&query=' . $encoded_address;
// Restituisci solo la URL
return esc_url($google_maps_url);
}
add_shortcode('luogo_url', 'shortcode_luogo_url');
function mostra_autori_personalizzato($atts) {
global $post;
// Recupera gli ID degli autori dal campo ACF "a_cura_di"
$autori_ids = get_field('a_cura_di', $post->ID);
// Se non ci sono autori, esci con un messaggio vuoto (evita di stampare "Nessun autore associato")
if (!$autori_ids || !is_array($autori_ids)) {
return '';
}
// Attributi dello shortcode: di default tutto è disattivato
$atts = shortcode_atts(array(
'titolo' => 'no',
'descrizione' => 'no',
'foto' => 'no',
'link' => 'no'
), $atts);
$output = '';
foreach ($autori_ids as $autore_id) {
$autore = get_post($autore_id);
if (!$autore) continue;
// Se richiesto, mostra il titolo
if ($atts['titolo'] == 'yes') {
$output .= get_the_title($autore->ID) . "\n";
}
// Se richiesto, mostra la descrizione
if ($atts['descrizione'] == 'yes') {
$output .= get_the_excerpt($autore->ID) . "\n";
}
// Se richiesto, mostra solo l'URL della foto (senza HTML)
if ($atts['foto'] == 'yes') {
$output .= get_the_post_thumbnail_url($autore->ID, 'thumbnail') . "\n";
}
// Se richiesto, mostra il link alla pagina dell'autore
if ($atts['link'] == 'yes') {
$output .= get_permalink($autore->ID) . "\n";
}
}
return trim($output); // Rimuove eventuali spazi bianchi extra
}
add_shortcode('mostra_autori', 'mostra_autori_personalizzato');
add_filter('wpc_filter_post_meta_term_name', 'show_author_title_instead_id', 10, 2);
function show_author_title_instead_id($term_name, $entity_name) {
if ($entity_name === 'a_cura_di' && is_numeric($term_name)) {
$title = get_the_title($term_name);
return $title ? $title : $term_name;
}
return $term_name;
}
function stampa_acf_a_cura_di_inline( $atts ) {
$autori = get_field('a_cura_di');
if ( !$autori ) return '';
$titoli = array();
if ( is_array($autori) ) {
foreach ( $autori as $autore ) {
$id = is_object($autore) ? $autore->ID : $autore;
$titoli[] = esc_html( get_the_title($id) );
}
} else {
$id = is_object($autori) ? $autori->ID : $autori;
$titoli[] = esc_html( get_the_title($id) );
}
return implode(', ', $titoli);
}
add_shortcode('acf_a_cura_di', 'stampa_acf_a_cura_di_inline');
function stampa_acf_generico( $atts ) {
$atts = shortcode_atts( array(
'field' => '', // es: field="nome_campo_acf"
'post_id' => get_the_ID(),
'sep' => ', ', // separatore per multipli (default virgola)
), $atts );
if ( empty($atts['field']) ) return '';
$val = get_field( $atts['field'], $atts['post_id'] );
if ( is_array($val) ) {
$out = array();
foreach ($val as $item) {
$id = is_object($item) ? $item->ID : $item;
$out[] = get_the_title($id) ?: $id;
}
return implode($atts['sep'], $out);
} elseif (is_object($val) && isset($val->post_title)) {
return $val->post_title;
} else {
return esc_html($val);
}
}
add_shortcode('acf_field', 'stampa_acf_generico');
add_filter('wpc_filter_post_meta_term_name', 'flrt_format_date_european', 10, 2);
function flrt_format_date_european($term_name, $entity_name) {
// Sostituisci 'nome_del_campo_data' con il nome reale del campo data ACF usato nel filtro
if ($entity_name === 'data_evento' && preg_match('/^\d{4}-\d{2}-\d{2}$/', $term_name)) {
// Formatto la data in DD/MM/YYYY
return date_i18n('d/m/Y', strtotime($term_name));
}
return $term_name;
}
add_action('save_post_evento', function( $post_id ) {
$data = get_field('data_evento', $post_id);
$ora = get_field('ora_evento', $post_id);
if( $data && $ora ) {
// Uniforma l'ora a due cifre se necessario (09:30)
if (preg_match('/^\d:\d{2}$/', $ora)) {
$ora = '0' . $ora;
} elseif (preg_match('/^\d{2}:\d{2}$/', $ora)) {
// ok
}
$data_ora = $data . ' ' . $ora;
update_field('data_ora_evento', $data_ora, $post_id);
}
}, 10, 1);
function data_evento_italiana_shortcode( $atts ) {
$atts = shortcode_atts( array(
'post_id' => get_the_ID(),
'field' => 'data_evento',
'format' => 'd/m/Y'
), $atts );
$data = get_field($atts['field'], $atts['post_id']);
if ($data) {
return date_i18n($atts['format'], strtotime($data));
} else {
return '';
}
}
add_shortcode('data_evento_ita', 'data_evento_italiana_shortcode');
function acf_autore_featured_image($atts) {
$atts = shortcode_atts( array(
'post_id' => get_the_ID(),
'field' => 'a_cura_di',
'size' => 'large', // puoi mettere 'medium', 'large', 'full'
'single' => '1' // '1' mostra solo il primo autore, '0' tutti
), $atts );
$autori = get_field($atts['field'], $atts['post_id']);
if (!$autori) return '';
if (!is_array($autori)) $autori = array($autori);
$output = '';
$count = 0;
foreach ($autori as $autore) {
$id = is_object($autore) ? $autore->ID : $autore;
// Recupera l'URL della featured image
$img_url = get_the_post_thumbnail_url($id, $atts['size']);
if ($img_url) {
$output .= '';
}
$count++;
if ($atts['single'] && $count==1) break;
}
return $output;
}
add_shortcode('autore_img', 'acf_autore_featured_image');
Grazie per la pazienza. Stiamo effettuando dei lavori sul sito e ritorneremo a breve.