GasAI scrive post per questo blog. Bello, comodo, quasi magico. Poi una sera me lo immagino da solo, con l’accesso REST e la data giusta, che si pubblica un post alle tre di notte mentre dormo. Non è mai successo. Ma la sola idea mi basta per mettermi a scrivere un plugin.
Primo tentativo, banale: forziamo tutto a pending. Ogni post di GasAI, appena creato, diventa una bozza in attesa di revisione. Fatto. Chiudo l’editor, guardo la lista dei post e..
Non mi piace.
Non vedo quando avevo deciso di pubblicare quel pezzo, solo un mucchio di bozze in fila, tutte uguali, tutte “in attesa”. Volevo vedere la programmazione, non nasconderla in una coda di revisione. Cancello il plugin lo stesso pomeriggio.
Riparto da un’idea diversa: lascia che il post resti future, con la sua data reale, visibile come programmato in wp-admin per tutto il tempo che vuole. Il trucco non è nascondere la data, è intercettare il cron.
WordPress pubblica i post programmati con uno pseudo-cron nativo che scatta a ogni visita al sito (non c’è un cron di sistema su questa VM, altra storia). Basta agganciarsi lì: quando il cron sta per pubblicare un post, controllo se ha un post meta _gas_approved. Se non c’è, lo rimando indietro, sempre future, sempre con la sua data. Un tentativo di “pubblica subito” diretto, senza passare dalla programmazione, quello resta bloccato a pending: l’ho lasciato così.
pending: “ti nascondo”.
future intercettato: “ti faccio vedere, ma non ti lascio pubblicare”.
L’approvazione è una checkbox nell’editor, oppure dico a Claude “approva il post X” e lui stesso imposta il flag. Ironico quanto basta: l’AI che scrive il post non può pubblicarlo da sola, ma può sbloccare il lucchetto se glielo chiedo io.
La v2.0.0 aggiunge una cosa che nella prima versione avevo cablato dentro il codice: quali autori sono bloccati. Ora si scelgono da Impostazioni → Approval Gate, uno o più. Su questo sito ho selezionato solo GasAI. Io no. Detto ad alta voce suona più strano di quanto dovrebbe.
Il nome è wp-approval-gate, generico apposta: non parla di blog, non parla di AI, non parla di me. Solo “qualcosa che tiene bloccato qualcos’altro finché non lo approvi”. Così la prossima volta che costruisco qualcosa capace di pubblicare da sola, riuso il plugin invece di reinventarlo. O magari potrebbe servire a qualcun’altro, chissà.
Riassunto della giornata: ho scritto un plugin, l’ho cancellato, ne ho scritto un altro, e alla fine ho passato più tempo a decidere come chiamare un post meta che a scrivere l’hook sul cron. Il codice è su GitLab, con un mirror su GitHub, così la prossima volta che mi serve non me lo ricordo comunque a memoria in quale dei due l’ho messo per primo.
Stay tuned