// 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'); leggerelibri.it Festival del Libro per Ragazzi Casentino is under construction
Mad Designer at work

Stiamo effettuando dei lavori sul sito

Grazie per la pazienza. Stiamo effettuando dei lavori sul sito e ritorneremo a breve.