Esiste un'API JavaScript? Come accedere ai dati pubblici e privati ​​in JS?


8

Secondo questo post non esiste un'API JavaScript integrata per Wordpress. Pertanto, gli sviluppatori che vogliono basarsi su AJAX sembrano escogitare tutti con la propria soluzione che non mi sembra giusta.

Ciò che mi manca davvero, a parte il recupero di post o qualsiasi altro dato con un'API integrata, è un piccolo insieme di funzioni JavaScript per gestire l'interfaccia back-end e front-end. Ora, c'è qualcosa in programma per quanto riguarda questo problema?

Ad esempio, mi piacerebbe saperlo

  • il menu principale a sinistra è compresso,
  • quale utente ha effettuato l'accesso
  • che gruppo è,
  • anche i dati dei client come il browser

e così via.


1
Solo una richiesta, questo non è il tuo primo post, utilizza interruzioni di riga e paragrafi. Rendi i tuoi post più leggibili dagli altri. Scrivere tutto in un grande paragrafo è un po 'troppo e tendi a perdere lettori e possibili aiutanti in questo modo. Grazie
Pieter Goosen,

grazie, scusa, ero un po 'di fretta, non succederà più!
StackOverclan

2
Per chiunque abbia votato per chiudere questo come principalmente basato sull'opinione : leggi la domanda prima di esprimere un voto.
fuxia

1
Nessun problema. E 'solo un suggerimento per aiutare voi in futuro. È un dato di fatto che domande chiare ben scritte ottengano buone risposte :-). Per fortuna non ho votato, questa volta sono innocente, lol :-)
Pieter Goosen

Risposte:


6

TL; DR

Non esiste un'API JavaScript nel core di WordPress e nessuno è pianificato, ma in realtà non ce n'è bisogno.

backend

Innanzitutto diciamo che, per quanto riguarda il backend, alcune informazioni utili possono essere recuperate da variabili globali JavaScript già presenti (WordPress adora tutti i gusti globali).

Per esempio

  • ajaxurlper l' admin-ajax.phpURL da utilizzare nelle chiamate Ajax
  • pagenow per l'attuale slug della pagina di amministrazione, ad esempio "dashboard"
  • adminpage per il file della pagina di amministrazione corrente, ad es. 'index-php' (i punti vengono sostituiti con hiphens)
  • typenowper il tipo di post corrente in edit.php, post.phpopost-new.php
  • userSettings può essere utilizzato per ottenere informazioni sull'utente attualmente registrato

Tali informazioni forniscono un "contesto" dello stato dell'applicazione mentre ci si trova nel back-end.

Per le altre cose menzionate nella domanda, non è necessaria alcuna "API", poiché le funzioni jQuery semplicissime possono fare il trucco. Ad esempio, per sapere se il menu di amministrazione è chiuso, è possibile verificare la classe "piegata" nel corpo:

if ( $(body).hasClass('folded') ) {
  alert( 'Admin left menu is closed!' );
} else {
  alert( 'Admin left menu is open!' );
}

Mancanza di documentazione

Per cose come i frammenti precedenti non vale la pena creare funzioni. WP ha già troppe funzioni in PHP. Spero davvero che funzioni aggiuntive come quelle non vengano aggiunte al core.

Ciò di cui JavaScript ha davvero bisogno in WordPress è una maggiore documentazione per le funzionalità esistenti: nessuna delle cose che ho scritto sopra è documentata in documenti ufficiali come il Codex o nei file sorgente.

Fine frontale?

Fino a qui ho parlato solo del backend.

Questo perché praticamente tutte le cose che accadono sul frontend sono correlate al tema attualmente in uso. Immaginiamo che ci sia un file JavaScript fornito da WordPress contenente funzioni per ottenere informazioni sullo stato corrente dell'applicazione; se un tema non accoda quel file JS, quelle funzioni non sono disponibili e forzare un tema ad accodare un tale script sarebbe assolutamente sbagliato.

Non c'è bisogno di (un'altra) API

Tuttavia, in WordPress, tutte le informazioni che puoi ottenere tramite PHP possono essere facilmente utilizzate anche in JavaScript e senza alcuna richiesta AJAX. Quella funzione che lo rende possibile è wp_localize_script().

Supponiamo che tu voglia ottenere l'utente corrente e i dati dell'utente come il suo ruolo utente nel tuo JavaScript e vuoi anche conoscere le variabili di query utilizzate nella pagina corrente, puoi fare quanto segue:

$data = array(
  'user'       => wp_get_current_user(),
  'query_vars' => $GLOBALS['wp']->query_vars
);

wp_localize_script( 'myscript', 'MyScriptData', $data );

Facendo così nel tuo script, la MyScriptData.uservariabile sarà un oggetto JavaScript con tutte le informazioni degli utenti tutte le variabili della query.

Questo è valido per gli script backend e frontend (in altre parole: per entrambi i "lati"). Non è necessaria alcuna API JavaScript aggiuntiva solo per recuperare tali informazioni. PHP è sufficiente se si utilizzano i modi corretti per passare informazioni da PHP a JS.

Backbone.js

Backbone.js , è un framework JavaScript che consente un (tipo di) modello di sviluppo MVC con JavaScript. È stato incluso nel core con WP 3.5, principalmente per gestire la galleria multimediale.

Questa libreria non è un'API JavaScript di WordPress, perché sicuramente consente uno sviluppo JavaScript più potente, ma non una singola funzione specifica di WordPress è stata aggiunta a quella libreria ed è l'unico utilizzo corrente di Backbone.js. La libreria multimediale è più o meno priva di documenti e non ha API pubbliche. E AFAIK non prevede di colmare questa lacuna. (Più che felice di cambiare / rimuovere quella dichiarazione - se qualcuno può dimostrarmi che mi sbaglio).

WP-API

Come sottolineato da Rarst e Brian Fegter , l'API WP farà parte del core (probabilmente a partire da WP 4.1).

Ma devo dire che si tratta non di un'API JavaScript. Permette solo di connettere una richiesta HTTP a un endpoint dell'applicazione che è controllato dall'API WP. E l'API recupera i dati dal database e li restituisce JSON formattato lì. Esempio dai documenti:

Vuoi ricevere i post del tuo sito? Basta inviare una GETrichiesta a /wp-json/posts. Aggiorna utente con ID 4? Invia una POSTrichiesta a /wp-json/users/4. Ricevi tutti i post con il termine di ricerca "fantastico"? GET /wp-json/posts?filter[s]=awesome.

Poiché le richieste HTTP e le relative risposte JSON possono essere gestite con qualsiasi linguaggio che supporti le richieste HTTP e il formato dei dati JSON (tra cui PHP, Ruby, Python, ASP, ecc.), L' obiettivo principale dell'API WP è quello di consentire di ottenere e impostare dati WordPress da applicazioni non WP. Ciò significa che all'interno di qualsiasi applicazione , non solo WordPress.

Certo, poiché JavaScript è un linguaggio in grado di gestire sia le richieste HTTP sia il formato JSON, è possibile utilizzare l'API WP anche da WordPress JavaScript. Qualcuno sta anche lavorando su un client WP js per quell'API, ma

  • utilizzando wp_enqueue_script()+ l'API Ajax + le funzioni PHP di WordPress è possibile recuperare tutte le informazioni necessarie senza alcuna API aggiuntiva. E poiché tutti e tre gli "ingredienti" sono standard stabiliti dal WP, usarli non è una "soluzione propria". Fa solo uso di soluzioni standard per eseguire attività personalizzate (e comuni), che è lo scopo di questo sviluppo di plugin.

  • è anche possibile utilizzare JavaScript per utilizzare l'API WP. Solo perché l'API WP restituisce JSON, non lo rende un'API JavaScript. Non è coinvolta alcuna funzione JavaScript (viene inviata una richiesta HTTP e viene restituito un repository JSON. Praticamente lo stesso di ciò che accade utilizzando l'API AJAX). In caso contrario, qualsiasi servizio che restituisce JSON dovrebbe essere considerato un'API JS di WordPress. L'API WP deve essere considerata un'API di servizio esterna che restituisce JSON e può accadere che il sito che utilizza questo servizio JSON sia lo stesso che lo fornisce.

  • non c'è una sola cosa che può essere fatta con l'API WP che non può essere fatta anche usando l'API AJAX. Ma ci sono molte cose che possono essere fatte con l'API AJAX. ma non con l'API WP.

Una nota su WP-API + Backbone.js

Con Backbone.js è possibile ottenere e salvare informazioni in applicazioni che supportano richieste HTTP RESTful .

Il problema è che WordPress, sia nelle richieste "regolari" che in quelle AJAX, è quasi RESTful: supporta solo $_GETe $_POSTrichieste per impostazione predefinita, e l'utilizzo dell'uno o dell'altro con lo stesso URl finisce in ... lo stesso risultato .

Al contrario, l'API WP è RESTful, quindi le applicazioni basate su Backbone possono trarne vantaggio per potenti applicazioni JavaScript, ma starei lontano dalla definizione di Backbone o WP API o Backbone + WP API come API JavaScript per WordPress per le cose dette sopra.


bel lavoro! grazie per la risposta dettagliata; questo mi dà molte intuizioni e indicazioni, anche se non sono d'accordo su alcune parti come "non c'è bisogno". tuttavia, questa è la risposta!
StackOverclan

Come detto nella risposta WP API + Backbone, anche se IMHO non può essere considerato un'API JS, può darti molta potenza per creare applicazioni js molto complesse. Nel backbone wiki su GitHub c'è una raccolta di app avanzate che lo usano . WP API può fornire un RESTful un'interfaccia di dati WordPress che è necessario utilizzare tutta la potenza di backbone. Dai anche un'occhiata a queste diapositive su Backbone + WordPress. @ mc007
gmazzap

il punto di accesso AJAX impiega troppo tempo per creare un'app scattante. è in realtà un no go!
stackoverclan

1
@stackoverclan Il punto di ingresso AJAX è lento perché carica l'intero ambiente WordPress. Ma lo stesso vale per l'API WP, quindi non ne trarrai alcun vantaggio. Sul campo, l'uso di SHORTINITte può rendere Ajax molto più veloce. Fare lo stesso con l'API WP sarebbe molto più difficile. Btp, sei una vera e propria app scattante? Suggerimento: non usare WordPress.
gmazzap

4

C'è stato un bel po 'di sviluppo attorno all'API REST JSON che dovrebbe essere unita alla versione 4.1 . Credo che sarà ufficialmente chiamata "API WP". Puoi iniziare a utilizzare il codebase ora e tenere il passo con gli ultimi sviluppi qui fino a quando non arriva al nocciolo. Ryan McCue e il team hanno messo a punto alcuni documenti piuttosto validi qui .


3

Mentre storicamente il WP è stato incentrato sul back-end, ormai da anni sono state fatte dichiarazioni su come muoversi verso un uso intenso di JS. Tenendo presenti gli impegni di compatibilità con le versioni precedenti, è discutibile che JS raggiungerà la parità o acquisirà PHP in qualsiasi momento presto (secondo me), ma ci sono stati alcuni progressi in merito.

L'amministratore di WordPress ora viene fornito con Backbone e Underscore, che erano stati gran parte dell'ultima iterazione della libreria multimediale. Sfortunatamente le specifiche dell'implementazione sono criticamente prive di documenti e l'uso da parte di terzi è stato relativamente impopolare.

Il plug-in API REST è stato sviluppato come "plug-in di funzionalità" con l'intenzione ufficiale di essere incluso nel core di WordPress in futuro.


fantastico, il link 'feature plugin' mi aiuta molto a capire cosa sta realmente succedendo, sicuramente da leggere prima di andare a caccia ;-)
stackoverclan

3

Per rispondere alla tua affermazione:

[...] non esiste un'API Javascript integrata per Wordpress. Pertanto, gli sviluppatori che vogliono basarsi su Ajax sembrano escogitare tutti con la propria soluzione che non mi sembra giusta.

Non esiste una "soluzione propria". Puoi facilitare le cose usando ATP conajax_template_part() by @GM o plugin simili e prendere una scorciatoia, ma non c'è ancora un modo non standard di andare con AJAX in WordPress. Quelle "soluzioni proprie" / modi (per lo più) lo stanno facendo male . Le chiamate AJAX sono (approssimativamente) fatte in questo modo:

  1. Registra callback AJAX su hook sensibile al contesto (pubblico o privato / loggato)
  2. Registra, accoda e localizza lo script
  3. Utilizzare jQuery $.ajax()e funzioni simili per reagire all'interazione dell'utente. Lavorare con l'oggetto JS globale (localizzato) per restituire i dati al callback PHP.
  4. All'interno del cb di PHP, convalidate, filtrate e disinfettate i dati, verificate la presenza di Nonces e referrer, eseguite i vostri dati DB e restituite i dati JSONify utilizzando wp_send_json_success()e funzioni simili.

Se un plug-in o un tema non lo sta facendo in questo modo, l'autore non ha letto le cose o non ha guardato gli esempi. V'è uno scheletro per quello che dovrebbe essere utilizzato.

Informazioni più dettagliate su come gestire AJAX in WP sono disponibili nel libro della comunità "WordPressTheRightWay" .

Ciò che mi manca davvero, a parte il recupero di post o qualsiasi altro dato con un'API integrata, è un piccolo insieme di funzioni Javascript per gestire l'interfaccia back-end e front-end. [...] Ad esempio, mi piacerebbe sapere che il menu principale di sinistra è compresso, o quale utente ha effettuato l'accesso o quale gruppo è, o anche dati client come browser e così via.

WordPress semplicemente non è specifico di ciò che devi fare con AJAX. Ecco perché puoi inserire praticamente tutto in un array localizzato / globalizzato e averlo disponibile per le tue chiamate AJAX. E questo è perfettamente in linea con il funzionamento di Backbone: devi fare cose che ti piacciono e che vuoi farle.

Se vuoi usare un framework MVC JavaScript supponente come AngularJs, allora sei nel posto sbagliato. Ci sono altri CMS come OctoberCMS, Drupal8, ecc. Che sono molto più bravi nel fornire una base per questo. WordPress richiederebbe di creare un set personalizzato di endpoint di riscrittura in cui è possibile restituire set di dati per i controller JS.


ciao, grazie per la risposta più dettagliata. mi piace perché hai già una guida e delle migliori pratiche.
StackOverclan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.