Custom Tools
Wordpress plugin. Created for deborahlocastro.com
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/f4rizzo/wp-plugin_custom-tools/archive/refs/heads/main.zipPlugin WordPress custom per il sito, orientato a:
- gestione contenuti custom (Portfolio, Matrimoni e altri CPT via ACF JSON)
- integrazione ACF + Elementor
- shortcode per rendering dinamico
- supporto lightbox e gallerie modulari
- miglioramenti UX nell'admin del CPT Portfolio
NOTA: Per funzionare, è necessario che siano installati e attivi i Plugin:
- ACF Pro
- Elementor Pro
Informazioni Plugin
- Nome:
Custom Tools - File bootstrap:
custom-tools.php - Versione dichiarata:
1.0 - Autore dichiarato:
Fabrizio Rizzo
Cosa fa il plugin (in dettaglio)
1. Bootstrap delle funzionalita
Il file custom-tools.php carica i moduli PHP:
inc/register-cpt.phpinc/admin-columns.phpshortcodes/matrimonio.phpshortcodes/portfolio.phpshortcodes/modular-gallery.php
I moduli che usano get_field() vengono caricati su plugins_loaded solo se ACF
è attivo (vedi anche inc/dependencies.php).
2. Sync ACF JSON dentro la repo
Il plugin intercetta:
acf/settings/save_jsonacf/settings/load_json
e imposta come cartella JSON locale:
assets/acf-json
Comportamento:
- se la cartella non esiste, viene creata
- i gruppi campi e i post type ACF vengono versionati in repo
- ACF puo caricare automaticamente queste definizioni da qui
3. Formati immagine custom + Media Picker
Hook usato: after_setup_theme.
Image size registrati:
portfolio_thumb: larghezza 454, altezza libera, no cropgallery_wide: larghezza 1480, altezza libera, no cropgallery_tall: altezza 1200, larghezza libera, no crop
Hook usato: image_size_names_choose.
Effetto:
- i 3 formati compaiono anche nel selettore dimensioni del Media Picker.
4. Query personalizzata Elementor per Home Portfolio
Nel file inc/register-cpt.php viene agganciata la action:
elementor/query/home_portfolio_query
La query imposta una meta_query su campo ACF:
- key:
mostra_in_home - value:
1 - compare:
= - type:
BOOLEAN
Uso atteso:
- nel widget Loop Grid Elementor va impostato
Query ID = home_portfolio_query - in output passano solo i portfolio marcati come visibili in home
5. Colonne custom in admin per CPT Portfolio
File: inc/admin-columns.php.
Funzionalita:
- aggiunge colonna
Thumbssubito dopo la checkbox - renderizza thumb da ACF
immagine_anteprima_portfolio(sizethumbnail) - aggiunge colonna
Visibile in Home - mostra
checktestuale (Si) semostra_in_homee true, trattino altrimenti - applica CSS inline in
admin_headper larghezza/centratura colonne
Risultato:
- gestione editoriale piu rapida dalla lista Portfolio in backend.
6. Shortcode disponibili
[portfolio_lightbox_item]
File: shortcodes/portfolio.php.
Input impliciti (campi ACF sul post corrente):
immagine_anteprima_portfolioimmagine_originale_portfolio
Output:
- link
<a>con attributidata-elementor-open-lightbox="yes"e slideshowportfolio <img>preview con sizeportfolio_thumb(fallback su URL immagine base)- apertura lightbox dell'immagine originale
Se manca uno dei due campi immagine:
- ritorna stringa vuota (nessun output).
[matrimonio_titolo]
File: shortcodes/matrimonio.php.
Input:
nome_coniuge_1nome_coniuge_2
Output:
Il matrimonio di+ seconda riga con i due nomi- fallback:
Il matrimoniose uno dei nomi manca
[nomi_coniugi]
File: shortcodes/matrimonio.php.
Input:
nome_coniuge_1nome_coniuge_2
Output:
- stringa
Nome1 e Nome2 - stringa vuota se manca uno dei due
[info_matrimonio]
File: shortcodes/matrimonio.php.
Compone una griglia .matrimonio-info con:
- campi fissi:
matrimonio_location(labelVenue)matrimonio_luogo(labelLuogo)matrimonio_catering(labelCatering)
- elementi dinamici dal repeater
info_matrimonio:etichetta_info_matrimoniovalore_info_matrimonio
Output:
- markup solo se ci sono item valorizzati.
[modular_gallery field="..." slideshow="gallery"]
File: shortcodes/modular-gallery.php.
Attributi:
field(obbligatorio): nome campo gallery ACF (es.galleria_matrimonio_parte_1)slideshow(opzionale): gruppo lightbox Elementor, defaultgallery
Comportamento:
- legge immagini dal campo gallery del post corrente
- per ogni immagine sceglie miniatura via helper
get_gallery_thumb_url() - aggiunge classe base
.modular-gallery__item - aggiunge modificatore:
.widesegallery_image_size = wide.tallsegallery_image_size = tall- nessun modificatore se valore nullo/non previsto
- output con
loading="lazy"e lightbox attiva via attributi Elementor
Messaggi di fallback:
Campo ACF non specificato.se mancafieldNessuna immagine disponibile.se la gallery e vuota
7. Helper immagini per la galleria modulare
Funzione: get_gallery_thumb_url($image_id, $size = null).
Se $size (valore di gallery_image_size) è già noto va passato, per evitare
una seconda lettura del campo ACF.
Mappatura campo ACF gallery_image_size -> size WP:
wide->gallery_widetall->gallery_tall- default ->
large
Fallback finale:
- se la size non e disponibile, usa URL originale attachment.
Lo shortcode fa il prime della meta cache (update_meta_cache) su tutti gli
attachment della galleria prima del loop: una query invece di N.
Modello dati incluso (ACF JSON)
Post Type ACF definiti in assets/acf-json
portfolio
- public: true
- has_archive: true
- supports:
title,thumbnail,custom-fields - icona admin:
dashicons-format-image
matrimonio
- public: true
- hierarchical: true
- rewrite slug:
real-wedding - supports:
title,author,editor,excerpt,revisions,page-attributes,thumbnail,custom-fields,post-formats - icona admin:
dashicons-heart
side-project
- public: true
- hierarchical: true
- supports estesi (simili a
matrimonio) - icona admin:
dashicons-palmtree
real-life
- public: true
- hierarchical: true
- supports estesi (simili a
matrimonio) - icona admin:
dashicons-welcome-learn-more
Nota tecnica:
- nel codice non ci sono chiamate dirette a
register_post_type(). - i CPT risultano gestiti tramite definizioni ACF JSON (post type export).
Gruppi campi ACF principali
Dettagli Elemento Portfolio(post typeportfolio)
immagine_anteprima_portfolio(image, returnarray)immagine_originale_portfolio(image, returnurl)descrizione_portfolio(textarea)mostra_in_home(true/false)
Dettagli Matrimonio(post typematrimonio)
- anagrafica/contenuto:
nome_coniuge_1nome_coniuge_2img_header_matrimoniointro_matrimonioimg_hero_matrimonio
- dettagli evento:
matrimonio_locationmatrimonio_luogomatrimonio_catering- repeater
info_matrimonio(etichetta_info_matrimonio,valore_info_matrimonio)
- gallery/story:
galleria_matrimonio_parte_1storia_matrimonio_parte_1galleria_matrimonio_parte_2storia_matrimonio_parte_2
Image - Meta data(location attachmentimage/jpeg)
gallery_image_size(select:wide,tall, nullable)- usato da shortcode modular gallery per il layout.
Dipendenze operative
Dipendenze richieste per funzionalita complete:
- ACF Pro:
- funzioni
get_field,have_rows,get_sub_field - gestione field groups da JSON
- gestione post type da JSON ACF
- funzioni
- Elementor (in pratica Elementor Pro per loop/query custom e lightbox):
- hook
elementor/query/home_portfolio_query - attributi lightbox
data-elementor-open-lightbox
- hook
Dipendenze non strettamente bloccanti ma coerenti con i JSON:
- ACF Extended (diverse chiavi
acfe_*nei file JSON).
Controllo automatico (inc/dependencies.php)
All'avvio il plugin verifica le dipendenze e mostra un avviso nella bacheca di WordPress se manca qualcosa:
- ACF PRO mancante o versione free → avviso rosso (
notice-error); i moduli che usanoget_field()(CPT, colonne admin, shortcode) non vengono caricati, per evitare errori fatali. - Elementor / Elementor Pro mancante → avviso giallo (
notice-warning); gli shortcode restano attivi ma senza l'effetto atteso (loop, lightbox).
Rilevamento: acf_is_pro() / ACF_PRO per ACF, ELEMENTOR_VERSION e
ELEMENTOR_PRO_VERSION per Elementor.
Installazione e setup consigliato
- Posizionare il plugin in
wp-content/plugins/custom-tools. - Attivare il plugin da backend WordPress.
- Verificare che ACF sia attivo (e preferibilmente Elementor).
- Controllare che
assets/acf-jsonsia leggibile/scrivibile. - In Elementor Loop Grid per home portfolio, impostare
Query IDahome_portfolio_query. - Inserire shortcode nei template Elementor dove serve.
- Se le nuove size non esistono su media vecchi, rigenerare thumbnails.
Esempi d'uso shortcode
Portfolio item in loop:
[portfolio_lightbox_item]
Titolo pagina matrimonio:
[matrimonio_titolo]
Nomi sposi:
[nomi_coniugi]
Dettagli matrimonio:
[info_matrimonio]
Gallery parte 1 con gruppo lightbox dedicato:
[modular_gallery field="galleria_matrimonio_parte_1" slideshow="matrimonio-parte-1"]
Struttura directory
custom-tools/
|- custom-tools.php
|- inc/
| |- register-cpt.php
| |- admin-columns.php
| `- dependencies.php
|- shortcodes/
| |- portfolio.php
| |- matrimonio.php
| `- modular-gallery.php
`- assets/
|- acf-json/
`- js/custom-tools.js
Limiti attuali / note di manutenzione
assets/js/custom-tools.jse vuoto (nessuna logica JS attiva).- il file
inc/register-cpt.phpnon registra CPT in PHP: contiene solo query Elementor. - non ci sono CSS front-end nel plugin per
.modular-galleryo.matrimonio-info: lo styling e demandato a tema/template. - il campo attachment
gallery_image_sizee limitato alla locationimage/jpegnel JSON corrente.
Checklist QA rapida post deploy
- Verificare presenza menu CPT (
Portfolio,Matrimoni, eventuali altri CPT ACF). - Aprire lista Portfolio in admin e controllare colonne
Thumbs+Visibile in Home. - Testare Loop Grid home con Query ID
home_portfolio_query. - Testare
[portfolio_lightbox_item]su item con entrambe le immagini. - Testare
[modular_gallery]su galleria con immagini marcate wide/tall. - Verificare fallback quando campi ACF sono vuoti.