Consumare un'API esterna in WordPress?
Ho un cliente che ha un sito WordPress e vuole estenderlo per aggiungere nuove funzionalità. Queste funzionalità sono incluse in un sito web che ho già realizzato (una specie di motore di ricerca su un database, con alcuni filtri) e che è in fase di miglioramento.
Quello che intendo fare è creare un'API JSON del mio sito web (con tutte le funzioni di ricerca sul mio database) e fare in modo che il sito WordPress consumi questa API, così dovrò solo creare le viste per mostrare i risultati della ricerca.
Il problema è che non conosco affatto WordPress (per me è qualcosa dove si possono aggiungere articoli tramite pannello di amministrazione...) e non so come si possa scrivere il proprio codice lato server al suo interno. Ho cercato su Google e ho trovato qualcosa chiamato "plugin", ma mi chiedo se sia possibile farlo e se sia il modo più semplice dato che non ho bisogno che il codice venga utilizzato da terze parti. Se fosse possibile modificare un'installazione WordPress per aggiungere i miei file PHP, codificare ciò di cui ho bisogno (le mie viste con lo stesso CSS di WordPress) sarebbe più semplice, ma non so se sia possibile.

Una breve introduzione allo sviluppo WordPress che potrebbe aiutarti o confonderti:
La cosa principale da tenere a mente: è tutto solo PHP. E inoltre: non modificare i file core di WordPress, perché avrai problemi quando aggiornerai a una versione più recente in seguito. L'unico codice che dovresti modificare è quello dei plugin e dei temi.
Se hai solo bisogno di aggiungere qualcosa a una pagina esistente, potrebbe funzionare modificare semplicemente il file del tema giusto. Tuttavia, se hai bisogno di fare qualcosa di avanzato (e aggiungere una "view" extra, come a uno specifico URL, è più avanzato in WordPress), devi aggiungere il codice in un posto che verrà caricato prima nel processo di avvio di WordPress.
Il motivo è che WordPress esegue sempre una query sui post per te, in base all'URL. Se vai su /category/banana/
, interrogherà i post della categoria banana
e caricherà il file template corretto dove devi solo ciclarli e visualizzarli. Tuttavia, se vai su /custom-view/
, WordPress probabilmente non troverà alcun post e caricherà il template 404 - senza darti un modo semplice per recuperare!
Alcune persone risolvono questo creando "pagine stub": creano una Pagina in WordPress dove il contenuto non è importante, solo il template lo è: lì fanno qualsiasi cosa vogliono fare. Questo è un po' un hack, ma funziona. Il modo pulito sarebbe definire delle rewrite rules extra, che fanno sapere a WordPress che /custom-view/
è un URL valido, ma che qualcos'altro dovrebbe accadere lì.
Se vuoi fare questo, devi agganciarti al sistema core di WordPress. La parte importante qui è agganciarsi, non modificare. WordPress ha azioni e filtri. Un'azione è solo un annuncio ("Ehi, stiamo scrivendo il tag <head>
. Vuoi aggiungere qualcosa anche tu?"). Un filtro ti permette di modificare una variabile ("Questo è il titolo del post. Se vuoi modificarlo, restituisci un nuovo valore"). Ovviamente, il trucco ora è sapere quali azioni e filtri dovresti usare. Questo dipende dal modo che scegli (pagine stub o nuove rewrite rules), quindi non entrerò nei dettagli qui.
Definisci le azioni e i filtri che vuoi usare in un file plugin o nel file functions.php del tuo tema. Sono speciali perché vengono caricati mentre WordPress si sta avviando, quindi prima che la query principale venga eseguita e così via. Un file plugin è solo un file PHP, posizionato nella directory wp-content/plugins/
, con un header speciale così WordPress può leggere il suo nome e visualizzarlo nell'area di amministrazione dove puoi abilitarlo e disabilitarlo (così puoi lasciare il plugin nella directory ma disabilitarlo temporaneamente).

Basi
Devi conoscere le basi per i plugin e i temi. In breve: sono aggiunte alla funzionalità principale di WordPress. Normalmente i "Plugin" riguardano più la funzionalità, mentre i "Temi" riguardano più la "visualizzazione". Potresti anche voler leggere qualcosa sull'"API dei Plugin".
JSON
Potresti voler utilizzare lo script json2 integrato nel core per fornire un'API "sicura".
Esempio JSON
Il resto sarebbe qualcosa del genere:
$response = json_encode( array(
'data' => $your_output
) );
header( "Content-Type: application/json" );
echo $response;
XML Rpc
Il Codex ha anche qualcosa sull'"XML Rpc".
API HTTP
Un'altra possibilità potrebbe essere le richieste HTTP. Assicurati di leggere i riferimenti in fondo al link.
Webhooks
Questo è aggiuntivo, in quanto riguarda più il fornire un'API utilizzabile. Spiegazione qui. C'è anche un plugin chiamato HookPress che fa questo lavoro per te. Alcune slide dall'autore.

Suppongo che tu conosca PHP? O anche quello è un ostacolo?
Fondamentalmente, i plugin in WordPress sono una convenzione su come impacchettare codice PHP in modo che venga riconosciuto e gestito dal core di WordPress. È un formato, piuttosto che una funzionalità.
Per quanto riguarda la funzionalità effettiva, puoi praticamente eseguire PHP arbitrario, ma è buona pratica utilizzare le API di WP per compatibilità e affidabilità.
Pensa al tuo codice nel contesto di WP come a un include
(che tecnicamente sarà). Da lì, sarà l'ambito delle tue esigenze e risorse a determinare quanto di esso dovrà essere riscritto per essere specifico per WordPress.

Sì, è possibile.
la maggior parte dei plugin sono creati attraverso quelli che vengono chiamati hook:
ad esempio:
add_action("hook", "function")
è abbastanza semplice costruirsi un plugin una volta che si capisce come funziona questo framework... ti consiglio di familiarizzare con esso, il posto più completo per le informazioni (anche se non il più organizzato - come php.net) è il codex di WordPress.
