Skip to content

Commit 1ec6fe1

Browse files
committed
🔧 Release v1.0.14 – refactoring debug layer, sidebar toggle fixes, localized AJX_CLP_DB
1 parent 8e91874 commit 1ec6fe1

5 files changed

Lines changed: 199 additions & 138 deletions

File tree

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,5 @@ wp-config.php
4949
.DS_Store
5050
/.vscode
5151
/mu-plugins/codecorn/ajax-blog-search/assets/css/_STASH
52+
README_*
53+
TODO_*

README.md

Lines changed: 152 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -1,93 +1,99 @@
11
# MU CC Ajax Blog Search
22

3-
**MU plugin** per WordPress che trasforma il widget di ricerca del blog in una **ricerca AJAX live** , senza cambiare il markup del tema .
3+
**MU plugin** per WordPress che trasforma il classico _widget di ricerca del blog_ in una **ricerca AJAX live**, senza modificare il markup del tema.
44

5-
Pensato per essere drop in in `wp-content / mu-plugins` , con codice organizzato sotto `codecorn / ajax-blog-search` e un piccolo bootstrap che registra hook e asset .
5+
Pensato per essere drop-in” dentro `wp-content/mu-plugins`, con codice strutturato in `codecorn/ajax-blog-search` e un bootstrap minimale che registra hook e asset.
66

77
---
88

9-
## Caratteristiche
9+
## 🚀 Caratteristiche principali
1010

11-
- Ricerca **AJAX** sui post del blog direttamente dal widget `widget_search`
12-
- Nessuna modifica al template del tema : il form rimane quello standard
13-
- Risultati mostrati **sotto al campo di ricerca** , con titolo , data ed excerpt
14-
- Fallback automatico :
15-
- se JS non è disponibile → il form continua a funzionare in modo classico
16-
- Struttura pulita :
17-
- bootstrap MU in `mu-cc-ajax-blog-search.php`
18-
- core in `codecorn / ajax-blog-search / src / Plugin.php`
19-
- JS e CSS sotto `assets /`
20-
- Namespace dedicato `CodeCorn \ AjaxBlogSearch`
11+
- 🔍 Ricerca **AJAX** sui post del blog direttamente dal widget `widget_search`
12+
- 🧩 Nessuna modifica al template del tema → il form rimane quello standard
13+
- 💬 Risultati mostrati sotto il campo di ricerca, con titolo, data ed excerpt
14+
- ⚙️ Fallback automatico: se JS è disattivo, il form continua a funzionare in modo classico
15+
- 🧱 Struttura pulita e organizzata:
16+
17+
- bootstrap MU → `mu-cc-ajax-blog-search.php`
18+
- core PHP → `codecorn/ajax-blog-search/src/Plugin.php`
19+
- asset → `assets/js` e `assets/css`
20+
21+
- 🧭 Namespace dedicato `CodeCorn\AjaxBlogSearch`
2122

2223
---
2324

24-
## Requisiti
25+
## 🧰 Requisiti
2526

26-
- WordPress 5 . x o superiore
27-
- PHP 7 . 4 o superiore consigliato
28-
- jQuery attivo sul frontend ( WordPress lo carica di default sui temi classici )
27+
- WordPress 5.x o superiore
28+
- PHP 7.4 o superiore (consigliato)
29+
- jQuery frontend attivo (WordPress lo include di default nei temi classici)
2930

3031
---
3132

32-
## Struttura del plugin
33-
34-
All interno di `wp-content / mu-plugins` :
33+
## 📁 Struttura del plugin
3534

36-
```text
37-
mu-plugins /
35+
```
36+
mu-plugins/
3837
mu-cc-ajax-blog-search.php # bootstrap MU
39-
codecorn /
40-
ajax-blog-search /
38+
codecorn/
39+
ajax-blog-search/
4140
index.php # stub di sicurezza
42-
src /
43-
Plugin.php # core del plugin , namespace CodeCorn \ AjaxBlogSearch
44-
assets /
45-
js /
41+
src/
42+
Plugin.php # core del plugin (namespace CodeCorn\AjaxBlogSearch)
43+
assets/
44+
js/
4645
ajax-blog-search.js # logica AJAX lato client
47-
css /
48-
ajax-blog-search.css # stile minimo risultati ( opzionale )
46+
css/
47+
ajax-blog-search.css # stile minimo risultati
4948
```
5049

5150
---
5251

53-
## Installazione
52+
## ⚙️ Installazione
5453

55-
1 . Clona la repo dentro `wp-content / mu-plugins` :
54+
1. **Clona la repo** in `wp-content/mu-plugins`:
5655

57-
```bash
58-
cd wp-content / mu-plugins
59-
git clone https : / / github . com / CodeCornTech / mu-cc-ajax-blog-search . git
60-
```
56+
```bash
57+
cd wp-content/mu-plugins
58+
git clone https://github.com/CodeCornTech/mu-cc-ajax-blog-search.git
59+
```
6160

62-
Assicurati che il file `mu-cc-ajax-blog-search.php` si trovi **direttamente** dentro `mu-plugins /` , e la cartella `codecorn / ajax-blog-search /` sia accanto .
61+
Assicurati che:
6362

64-
2 . Verifica che WordPress stia caricando il MU plugin :
63+
- `mu-cc-ajax-blog-search.php` sia **direttamente** dentro `mu-plugins/`
64+
- la cartella `codecorn/ajax-blog-search/` sia accanto.
6565

66-
- vai in **Bacheca → Plugin → Plugin uso obbligato ( Must Use )**
67-
- dovresti vedere `MU CC Ajax Blog Search` nella lista
66+
2. Vai in **Bacheca → Plugin → Plugin uso obbligato (Must Use)**
67+
e verifica che **MU CC Ajax Blog Search** sia visibile.
6868

69-
3 . Verifica che il tema usi un **widget di ricerca** standard , ad esempio il classico widget `Cerca` nella sidebar del blog :
69+
3. Il tema deve usare un **widget di ricerca** standard (`widget_search`).
70+
Se nel markup trovi:
7071

71-
- se il markup contiene `<aside class="widget widget_search">` e un `<form class="search-form">` , il plugin può agganciarsi automaticamente
72+
```html
73+
<aside class="widget widget_search">
74+
<form class="search-form" ...></form>
75+
</aside>
76+
```
7277

73-
Non serve alcuna configurazione nel backend .
78+
allora il plugin si aggancia automaticamente.
79+
Nessuna configurazione aggiuntiva necessaria.
7480

7581
---
7682

77-
## Come funziona
83+
## ⚙️ Come funziona
7884

7985
### Lato PHP
8086

81-
La classe principale `CodeCorn \ AjaxBlogSearch \ Plugin` :
87+
La classe principale `CodeCorn\AjaxBlogSearch\Plugin`:
8288

83-
- registra lo script JS e , se presente , il CSS
84-
- espone un endpoint AJAX :
89+
- registra JS + CSS quando serve
90+
- espone un endpoint AJAX:
8591

8692
- `action = cc_ajax_blog_search`
87-
- disponibile sia per utenti loggati che non loggati
93+
- disponibile per utenti loggati e ospiti
8894

89-
- esegue una query `WP_Query` sui post del blog usando il parametro `s` passato dal client
90-
- restituisce un JSON del tipo :
95+
- esegue una `WP_Query` con il termine `s` passato dal client
96+
- restituisce un JSON strutturato così:
9197

9298
```json
9399
{
@@ -96,130 +102,158 @@ La classe principale `CodeCorn \ AjaxBlogSearch \ Plugin` :
96102
"results": [
97103
{
98104
"title": "Esempio articolo",
99-
"url": "https : / / sito . it / esempio articolo /",
105+
"url": "https://sito.it/esempio-articolo/",
100106
"date": "10 Novembre 2025",
101-
"excerpt": "Estratto accorciato del contenuto …"
107+
"excerpt": "Estratto accorciato del contenuto …",
108+
"thumb": "https://sito.it/wp-content/uploads/2025/11/thumb.jpg"
102109
}
103110
]
104111
}
105112
}
106113
```
107114

108-
### Lato JS
115+
---
109116

110-
Lo script `assets / js / ajax-blog-search.js` :
117+
### Lato JS
111118

112-
- cerca tutti i form `.widget_search form . search-form`
113-
- per ciascuno :
119+
Lo script `assets/js/ajax-blog-search.js`:
114120

115-
- crea un container `<div class = "cc-ajax-search-results">` subito dopo il form
116-
- intercetta `submit` del form e i `keyup` nel campo di ricerca
117-
- effettua una richiesta AJAX a `admin - ajax . php` con :
121+
- trova tutti i form `.widget_search form.search-form`
122+
- crea un box risultati `<div class="cc-ajax-search-results">` subito dopo il form
123+
- intercetta:
118124

119-
- `action = cc_ajax_blog_search`
120-
- `nonce` per sicurezza
121-
- parametro `s` con il valore digitato
125+
- `submit` → effettua AJAX
126+
- `keyup` → ricerca live con debounce
122127

123-
- renderizza i risultati sotto il form
128+
- richiama `admin-ajax.php?action=cc_ajax_blog_search` passando `s` e `nonce`
129+
- renderizza dinamicamente titolo, data, excerpt e thumb (opzionale)
124130

125-
Se il campo di ricerca è vuoto , la box risultati viene svuotata .
131+
Se il campo è vuoto, la box risultati viene svuotata.
126132

127133
---
128134

129-
## Personalizzazione
130-
131-
### Limitare a un numero diverso di risultati
135+
## 🧩 Filtri e personalizzazioni
132136

133-
Di default vengono restituiti i **5** post più rilevanti .
134-
Nel file `src / Plugin.php` , nell array di query :
137+
### 🔹 Miniatura (thumbnail)
135138

136139
```php
137-
'posts_per_page' => 5 ,
140+
add_filter('cc_ajax_blog_search_show_thumbnail', '__return_true');
141+
142+
// opzionale: dimensione immagine
143+
add_filter('cc_ajax_blog_search_thumbnail_size', function () {
144+
return 'medium'; // oppure una image-size custom
145+
});
138146
```
139147

140-
puoi aumentare o ridurre il valore .
148+
---
141149

142-
### Limitare la ricerca a una categoria
150+
### 🔹 Sidebar mobile collapsabile / floating
143151

144-
Puoi aggiungere `cat` o `category__in` agli argomenti della query :
152+
Permette di trasformare i widget della sidebar in un pannello mobile a comparsa (overlay o barra top).
153+
Disattivato di default.
145154

146155
```php
147-
$args = array(
148-
'post_type' => 'post' ,
149-
's' => $term ,
150-
'posts_per_page' => 5 ,
151-
'cat' => 59 , // id categoria "News"
152-
);
156+
// attiva la feature
157+
add_filter('cc_ajax_blog_search_sidebar_toggle_enabled', '__return_true');
158+
159+
// modalità: 'floating' (default) oppure 'top'
160+
add_filter('cc_ajax_blog_search_sidebar_toggle_mode', function () {
161+
return 'floating'; // oppure 'top'
162+
});
163+
164+
// breakpoint mobile (px)
165+
add_filter('cc_ajax_blog_search_sidebar_toggle_breakpoint', function () {
166+
return 992;
167+
});
168+
169+
// label del pulsante toggle
170+
add_filter('cc_ajax_blog_search_sidebar_toggle_label', function () {
171+
return 'Filtri & ricerca';
172+
});
153173
```
154174

155-
Oppure , in una futura versione , leggere il valore da un filtro o costante .
175+
Quando disattivato o non definito, il CSS non modifica il comportamento della sidebar.
156176

157-
👉 Per attivare i thumb ti basta , da tema / altro mu-plugin:
177+
---
158178

159-
```php
160-
add_filter( 'cc_ajax_blog_search_show_thumbnail', '__return_true' );
179+
### 🔹 Debug Layer
161180

162-
// opzionale : size custom
163-
add_filter( 'cc_ajax_blog_search_thumbnail_size', function () {
164-
return 'medium'; // o una image size custom
165-
});
181+
Il sistema di debug è gestito interamente da PHP ed esposto al JS tramite `wp_localize_script`.
182+
183+
Puoi attivarlo in 3 modi:
184+
185+
#### 1. via `wp-config.php`
186+
187+
```php
188+
define('CC_AJAX_BLOG_SEARCH_DEBUG', true);
166189
```
167190

168-
Toggled o floating sidebar Esempio di attivazione dal tema / altro mu-plugin:
191+
#### 2. via filtro (vince sul define)
169192

170193
```php
171-
add_filter( 'cc_ajax_blog_search_sidebar_toggle_enabled', '__return_true' );
172-
// floating (default) oppure 'top'
173-
add_filter( 'cc_ajax_blog_search_sidebar_toggle_mode', function () {
174-
return 'floating'; // oppure 'top'
175-
});
194+
add_filter('cc_ajax_blog_search_debug', '__return_true');
176195
```
177-
### Traduzioni testi frontend
178196

179-
I testi mostrati dal JS vengono passati tramite `wp_localize_script` :
197+
#### 3. via console JS (solo runtime)
198+
199+
```js
200+
window.AJX_CLP_DB = true;
201+
```
202+
203+
Quando attivo, tutti i log `console.log` debug del plugin vengono stampati con prefisso `[AJX-SIDEBAR]`.
204+
205+
---
206+
207+
### 🔹 Traduzioni frontend
208+
209+
I testi mostrati dal JS sono passati via `wp_localize_script`:
180210

181211
- `no_results_text`
182212
- `error_text`
183213

184-
Puoi sovrascriverli tramite filtro in un altro MU plugin o nel tema :
214+
Puoi sovrascriverli in un altro MU plugin o nel tema:
185215

186216
```php
187-
add_filter( 'cc_ajax_blog_search_i18n' , function ( $strings ) {
188-
$strings['no_results_text'] = 'Nessun risultato per la tua ricerca .';
217+
add_filter('cc_ajax_blog_search_i18n', function ($strings) {
218+
$strings['no_results_text'] = 'Nessun risultato per la tua ricerca.';
219+
$strings['error_text'] = 'Errore temporaneo, riprova più tardi.';
189220
return $strings;
190221
});
191222
```
192223

193-
( hook da aggiungere in una versione successiva se ti va di internazionalizzare pesante )
194-
195224
---
196225

197-
## Debug
198-
199-
Se vuoi controllare che l AJAX funzioni :
200-
201-
1 . Apri la pagina blog con sidebar
202-
2 . Premi `F12` → tab **Network**
203-
3 . Scrivi nel campo di ricerca almeno 3 caratteri
204-
4 . Dovresti vedere chiamate a :
226+
## 🧪 Debug manuale
205227

206-
- `admin - ajax . php ? action = cc_ajax_blog_search & s = ...`
228+
1. Apri la pagina del blog
229+
2. Premi `F12 → Network`
230+
3. Digita almeno 3 caratteri nel campo ricerca
231+
4. Dovresti vedere chiamate a:
207232

208-
Se la risposta è `200` con un JSON valido , il lato PHP è ok .
233+
```
234+
/wp-admin/admin-ajax.php?action=cc_ajax_blog_search&s=...
235+
```
209236

210-
Se non vedi il container risultati , verifica il CSS del tema o eventuali conflitti JS .
237+
Se la risposta è `200 OK` e contiene JSON valido → il backend è ok.
238+
Se non compare il box risultati → verifica CSS del tema o conflitti JS.
211239

212240
---
213241

214-
## Roadmap
242+
## 🧭 Roadmap
215243

216-
- Filtro per post type custom
217-
- Opzione per usare un template markup personalizzato via hook PHP
218-
- Supporto per multiple istanze con comportamenti diversi
219-
- Tiny helper per limitare in automatico la ricerca alla categoria del blog corrente
244+
- [ ] Filtro per post type custom
245+
- [ ] Hook per template markup personalizzato
246+
- [ ] Supporto multi-istanza con config separate
247+
- [ ] Internazionalizzazione completa (`cc_ajax_blog_search_i18n`)
248+
- [ ] Auto-scope alla categoria corrente del blog
220249

221250
---
222251

223-
## Licenza
252+
## ⚖️ Licenza
253+
254+
**MIT License** — usa, forka, migliora e manda una PR ✨
224255

225-
MIT . Usa , forka , migliora e mandaci una pull request ✨
256+
© CodeCorn Technology SRLS — _Federico Girolami_
257+
_“Digital Solution Architecture with Style.”_
258+
259+
---

0 commit comments

Comments
 (0)