Aujourd’hui, de nombreux développeurs parlent de l’utilisation de l’api WordPress rest avec le cadre JavaScript. Bien que ce processus fonctionne bien, jrsquoai exploré la façon drsquoassocier lrsquoAPI rest au cadre MVC PHP, en particulier laraver. Dans je me concentrerai sur quelques façons différentes d’intégrer l’api WordPress rest dans laraver. J’ai récemment créé une application Web qui fournit des conseils et des liens utiles dans mon plugin Caldera forms WordPress. La plupart du contenu que envoyez existe dans WordPress, donc je pense que je devrais créer un plug in qui peut fonctionner sur le site Caldera forms. Même si c’est tout à fait faisable, je n’aime pas le défi d’extensibilité que pose ce rôle supplémentaire pour notre site WordPress.
Au lieu d’ajouter toutes ces requêtes supplémentaires à la charge de travail de notre site WordPress, j’ai créé une petite application laraver sur un autre serveur qui peut interroger l’api WordPress rest sur le site principal pour le contenu. Crsquoest le meilleur choix à ce jour, car il donne une place drsquoautorité à mon contenu. ne connaissez pas les bases de laraver, consultez la documentation de laraver et envisagez de consulter laracast. De plus, avant de continuer, envisagez de consulter mon article sur les conteneurs drsquoinjection de dépendances, car la deuxième moitié de cet article traite de lrsquoinjection de services drsquoenregistrement de conteneurs pour les dépendances laravel.
On y va. Eric Barnes, un client API très simple pour laraver News, a publié un tutoriel sur la façon de synchroniser les messages dans la base de données laraver en utilisant l’api WordPress rest, puis de visualiser le contenu avec cette base de données. Vous pouvez également simplifier davantage cette approche. Au lieu drsquoécrire des articles dans la base de données, pouvez utiliser la mise en cache et la mise à jour une fois div
O. par conséquent, ajustons le premier exemple pour mettre en cache redis, Memcached en utilisant des objets persistants dans laraver.
Cela permettra de remplir une courte copie des données dans laraver avec une charge minimale sur WordPress. Refactor the WordPress rest API client shown above to use the cache. Laraver fournit une abstraction simple des différents systèmes de cache via la façade de cache. Voici les clients API reconfigurés: lsquo WP v2 postsrsquo,
G)
Getaddons (int $page = 1) {
Retourner $this gt get (lsquopostrsquo,
[2]
[1]
)
}
Getaddon (entier $ID)
{Y}
Retourner $this gt get (lsquoCF addonrsquo, [], $ID)
}
Getposts (int $page = 1, int $per _ page = 50)
{Y}
Retourner $this gt get (lsquopostrsquo,
[2]
« par page» = gt $par page
[1]
)
}
Getpost Common Function (int $ID)
{Y}
Renvoie $this gt get (lsquopostrsquo, [], $ID)
}
C’est un bon début, mais j’espère qu’il fonctionnera avec des bases de données non persistantes comme redis, donc c’est plus comme un cache devant l’api WordPress rest. En drsquoautres termes, les modèles ne sont pas vraiment nécessaires ici. Une fois que le client de lrsquoAPI rest devient un fournisseur de services, il peut être injecté directement dans le Contrôleur laraver sans avoir besoin drsquoun stockage de base de données persistant dans laraver.
Avec ce système, jrsquoai besoin drsquoun système pour entrer les données dans la base de données laraver. Jrsquoai utilisé deux interfaces. Le premier est pour le client API WordPress et le second pour l’importation de contenu. Mes cas drsquoutilisation implémenteront les deux fonctions, mais les implémentations individuelles de ce système que jrsquoutilise traitent le contenu et les produits différemment. Il srsquoagit de la première interface du client API: lt?php
spazio dei nomi app
usa IlluminaSupportFacadesCache
classe WpApi {
$url statico protetto = 039https:calderaforms.comwp-jsonwpv2039
funzione statica pubblica getPost(int $id )
{
$url = self::$url . 039post039 . $id
return self::getJson( $url )
}
funzione pubblica statica getPosts( int $page )
{
$url = self::$url . 039posts?per_page=039 . $pagina
return collect( self::getJson( $url ) )
}
funzione statica protetta getJson( $url)
{
$ cache = cache:: get ( md5 ( $ url ) )
if( vuoto( $cache ) ){
$risposta = file_get_contents($url, false)
$json = json_decode( $risposta)
conservare per 12 ore (12*60 minuti)
Cache::put( md5( $url ), $json, 720 )
restituisce $json
}altro{
restituisce $cache
}
}
} Creazione di un fornitore di servizi L039ultima soluzione può essere utilizzata per aggiungere un blog gestito da WordPress a un039app Laravel. Nel mio esempio, non era quello che stavo facendo: invece, avevo bisogno di servire i contenuti archiviati nel database locale, ma volevo un modo per importarne alcuni da WordPress tramite l039API REST.
La fine di ciò che la mia applicazione mostra è solo una piccola parte del contenuto e un collegamento alla fonte. Per questo motivo, anche se ho finito per duplicare il contenuto nel database di WordPress, ho archiviato solo il titolo del post, l039estratto, una serie di categorie, una serie di tag, immagine in primo piano, URL e permalink. Per farlo funzionare in un modo che mi consentisse di utilizzare più percorsi e aggiungere facilmente il supporto per altri siti WordPress, ho finito per creare un modello, un client API REST e un fornitore di servizi. Non posso condividere un sistema completo e astratto qui. Ma se hai familiarità con Laravel, puoi usare ciò che ho da condividere per mettere insieme il tuo sistema.
Ecco il modello, che come ho spiegato ha solo le parti del post che mi servivano: lsquo Adresse URL
* *
Tableau des variables
*
Protégé $routeconfig
* *
API root URL
* *
Chaîne variable
*
Dollars É. U.
Racines protégées
* *
Chemin vers cette API
* *
Var Routing Collection
*
$chemin protégé
Fonction publique Construct () {
$this gt Routing = New Routing Collection ()
$this gt constructroutecollection ()
}
Getroot (): String {
$this gt root
}
Getroutes (): routecollection {
Retourner $ceci gt pourrir
}
Fonction publique get (String $PATH, Array $Parameter = [], int $id = 0) {
Essayez {
$PATH = $this gt Path gt get path ($PATH)
Capture ( exception $e) {
Renvoie $E
}
(0 = = ID $)
$URL = $this gt trailingslahit ($this gt root) $ Chemin gt URL.
Autres
$URL = $this gt trailingslahit ($this gt root) $ Ceci gt trailingslahit ($route gt URL).
}
Renvoie json _ decode (File get Contents ($URL))
}
Buildroutecollection () {fonctions protégées
(IS _ array ($this gt routeconfig) amp amp amp! NULL ($this gt Routing configuration) {
Foreach ($this gt route configured as $name = gt $URL) {
$PATH = Path:: Factory ($name, $URL)
$this gt Routing gt add Routing ($Routing)
}
}
}
Trailingslahit Protective Function ($String) {
Retourner $this gt untrainingslahit ($String)
}
Fonction protégée untrailingslahit ($String) {
Renvoie Rtrim ($String,
}
} Vous remarquerez que dans cette classe, le routage est utilisé pour créer une représentation drsquoobjet de routage pour la collection de routage. Cet objet simplifie la représentation des données de cheminement dans l’api de repos WordPress. Ces classes dépendent des bibliothèques drsquoobjets sur github. Voici la classe path, qui est le conteneur pour le nom du chemin et lrsquoURL: Nom = $nom
$Object gt URL = $URL
Renvoie $Object
}
} Voici une collection de routes qui recueillent des objets de route: lt?php
spazio dei nomi AppContratti
usa AppWPAPIRouteCollection
interfaccia WPAPI {
**
* Ottieni i percorsi per questa API
*
* @return RouteCollection
*
funzione pubblica getRoutes() : RouteCollection
**
* Ottieni l039URL di root per l039API
*
* @return stringa
*
funzione pubblica getRoot() : string
} E la seconda interfaccia per i contenuti:
lt?php
spazio dei nomi AppContratti
usa AppPost
interfaccia contenuto {
**
* Ricevi post tramite ID WordPress
*
* @param int $wp_id ID articolo WordPress
*
* @return Post
*
funzione pubblica getPost( int $wp_id ): Posta
} Ho implementato la prima interfaccia in una classe astratta per creare un client API REST generico: (route)
Retourner $this gt route [$name]
}
Lancer une nouvelle exception (
}
Addroute (route $route) fonction publique