Según esta publicación, no hay una API JavaScript incorporada para Wordpress. Por lo tanto, los desarrolladores que quieren construir en AJAX parecen tener su propia solución que no me parece correcta.
Lo que realmente extraño, aparte de buscar publicaciones o cualquier dato con una API incorporada, es un pequeño conjunto de funciones de JavaScript para lidiar con la interfaz de back-end y front-end. Ahora, ¿hay algo planeado con respecto a este problema?
Por ejemplo, me encantaría saber que
- el menú principal izquierdo está colapsado,
- qué usuario ha iniciado sesión
- de qué grupo es,
- incluso datos del cliente como navegador
Etcétera.
ajax
javascript
wp-enqueue-script
api
wp-localize-script
stackoverclan
fuente
fuente
Respuestas:
TL; DR
No hay una API de JavaScript en el núcleo de WordPress y nadie está planeado, pero en realidad, no es necesario.
Backend
En primer lugar, digamos que, con respecto al backend, se puede obtener información útil de las variables globales de JavaScript ya presentes (WordPress ama todos los sabores globales).
P.ej
ajaxurl
para que laadmin-ajax.php
url se use en llamadas ajaxpagenow
para el slug de la página de administración actual, por ejemplo, 'tablero'adminpage
para el archivo de la página de administración actual, por ejemplo, 'index-php' (los puntos se reemplazan con guiones)typenow
para el tipo de publicación actual mientras está enedit.php
,post.php
opost-new.php
userSettings
se puede utilizar para obtener información sobre el usuario registrado actualEsa información le brinda un "contexto" del estado de la aplicación mientras está en el back-end.
Para otras cosas mencionadas en la pregunta, no necesita ninguna "API", porque las funciones súper simples de jQuery pueden hacer el truco. Por ejemplo, para saber si el menú de administración está cerrado, puede verificar la clase "doblada" en el cuerpo:
Falta de documentación
Para cosas como los fragmentos anteriores, no vale la pena crear funciones. WP ya tiene demasiadas funciones en PHP. Realmente espero que funciones adicionales como esas no se agreguen al núcleo.
Lo que realmente necesita JavaScript en WordPress es más documentación para las funciones existentes: ninguna de las cosas que he escrito anteriormente está documentada en ningún documento oficial como el Codex o en los archivos fuente.
¿Interfaz?
Hasta aquí solo he hablado del backend.
Esto se debe a que casi todas las cosas que suceden en la interfaz están relacionadas con el tema actualmente en uso. Imaginemos que hay un archivo JavaScript proporcionado por WordPress que contiene funciones para obtener información sobre el estado actual de la aplicación; si un tema no pone en cola ese archivo JS, esas funciones no están disponibles y forzar a un tema a poner en cola tal script sería absolutamente incorrecto.
Sin necesidad de (otra) API
Sin embargo, en WordPress, toda la información que puede obtener a través de PHP también se puede usar fácilmente en JavaScript y sin ninguna solicitud de AJAX. Esa función que hace esto posible es
wp_localize_script()
.Supongamos que desea obtener los datos actuales del usuario y del usuario, como su rol de usuario en su JavaScript, y también desea conocer las variables de consulta utilizadas en la página actual, puede hacer lo siguiente:
Al hacerlo en su script, la
MyScriptData.user
variable será un objeto JavaScript con toda la información de los usuarios y todas las variables de consulta.Esto es válido para los scripts de backend y frontend (en otras palabras: para ambos "lados"). No hay necesidad de ninguna API JavaScript adicional solo para obtener esa información. PHP es suficiente si utiliza las formas adecuadas para pasar información de PHP a JS.
Backbone.js
Backbone.js , es un marco de JavaScript que permite un (más o menos) patrón de desarrollo MVC con JavaScript. Se incluyó en el núcleo con WP 3.5, principalmente para manejar la galería de medios.
Esta biblioteca no es una API de JavaScript de WordPress, porque seguramente permite un desarrollo de JavaScript más potente, pero no se ha agregado ninguna función específica de WordPress a esa biblioteca y es el único uso central actual de Backbone.js. La biblioteca de medios está más o menos indocumentada y no tiene API pública. Y AFAIK no está planeado para llenar ese vacío. (Más que feliz de cambiar / eliminar esa declaración, si alguien puede demostrar que estoy equivocado).
WP-API
Como señalaron Rarst y Brian Fegter , la API de WP será parte del núcleo (probablemente comenzando con WP 4.1).
Pero tengo que decir que es no una API de JavaScript. Simplemente permite conectar una solicitud HTTP a un punto final de la aplicación que es controlada por la WP-API. Y la API obtiene datos de la base de datos y los devuelve JSON formateados allí. Ejemplo de los documentos:
Como las solicitudes HTTP y las respuestas JSON relacionadas se pueden manejar con cualquier lenguaje que admita solicitudes HTTP y formato de datos JSON (entre ellos PHP, Ruby, Python, ASP, etc.), el objetivo principal de la API de WP es permitir obtener y establecer datos de WordPress de aplicaciones no WP. Eso significa desde cualquier aplicación , no solo WordPress.
Claro, dado que JavaScript es un lenguaje que puede manejar tanto las solicitudes HTTP como el formato JSON, también puede usar la API de WP desde JavaScript de WordPress. Alguien también está trabajando en un cliente WP js para esa API, pero
usando
wp_enqueue_script()
+ las funciones Ajax API + WordPress PHP es posible recuperar toda la información que necesita sin ninguna API adicional. Y dado que los tres "ingredientes" son estándares establecidos por WP, usarlos no es una "solución propia". Simplemente utiliza soluciones estándar para realizar tareas personalizadas (y comunes), que es de lo que se trata este desarrollo de complementos.Incluso es posible utilizar JavaScript para utilizar la API de WP. Solo porque WP-API devuelve JSON, no lo convierte en una API de JavaScript. No hay ninguna función de JavaScript involucrada (se envía una solicitud HTTP y se devuelve un repositorio JSON. Más o menos lo mismo que sucede al usar la API AJAX). De lo contrario, cualquier servicio que devuelva JSON debe considerarse una API JS de WordPress. La WP-API debe considerarse una API de servicio externo que devuelve JSON, y puede darse el caso de que el sitio que consume este servicio JSON sea el mismo que lo proporciona.
No hay una sola cosa que se pueda hacer con la API de WP que no se pueda hacer también usando la API de AJAX. Pero hay muchas cosas que se pueden hacer con la API AJAX. pero no con la WP-API.
Una nota sobre WP-API + Backbone.js
Con Backbone.js, es posible obtener y guardar información en aplicaciones que admiten solicitudes HTTP RESTful .
El problema es que WordPress, tanto en solicitudes "regulares" como en AJAX, es RESTful: solo admite
$_GET
y$_POST
solicita por defecto, y usar uno u otro con la misma URL termina en ... el mismo resultado .Por el contrario, la API de WP es RESTful, por lo que las aplicaciones basadas en Backbone pueden aprovecharla para poderosas aplicaciones de JavaScript, pero me mantendría alejado de definir Backbone o WP API o Backbone + WP API como una API de JavaScript para WordPress por cosas que dicen encima.
fuente
SHORTINIT
puede hacer que ajax sea mucho más rápido. Hacer lo mismo con WP API sería mucho más difícil. Btp, ¿qué es una aplicación realmente ágil? Consejo: no uses WordPress.Ha habido bastante desarrollo en torno a la API JSON REST que se supone que se fusionará con la versión 4.1 . Creo que oficialmente se llamará 'WP API'. Puede comenzar a usar la base de código ahora y mantenerse al día con los últimos desarrollos aquí hasta que llegue al núcleo. Ryan McCue y su equipo han desarrollado una documentación bastante buena aquí .
fuente
Si bien históricamente WP ha estado centrado en el back-end, hace años que se ha hecho una declaración sobre avanzar hacia el uso intensivo de JS. Teniendo en cuenta los compromisos de compatibilidad con versiones anteriores, es cuestionable que JS logre la paridad o se haga cargo de PHP en el corto plazo (en mi opinión), pero ha habido algún progreso al respecto.
El administrador de WordPress ahora viene con Backbone y Underscore, que había sido una gran parte de la última iteración de la biblioteca de medios. Desafortunadamente, los detalles específicos de la implementación están críticamente indocumentados y el uso de terceros ha sido relativamente impopular.
El complemento REST API se está desarrollando como "complemento de características" con la intención oficial de ser incluido en el núcleo de WordPress en el futuro.
fuente
Para responder a su declaración:
No hay una "solución propia" para hacer. Puede facilitar las cosas mediante el uso de ATP con
ajax_template_part()
por @GM o plugins similares y tomar un atajo, pero todavía no hay manera no estándar para ir con AJAX en WordPress. Esas "soluciones propias" / formas (en su mayoría) lo están haciendo mal . Las llamadas AJAX se hacen (aproximadamente) así:$.ajax()
y funciones similares para reaccionar ante la interacción del usuario. Trabaje con el objeto JS global (localizado) para devolver datos a la devolución de llamada PHP.wp_send_json_success()
y funciones similares.Si un complemento o tema no lo está haciendo de esa manera, entonces el autor no leyó las cosas o no miró los ejemplos. No es un esqueleto para la que debe utilizarse.
Puede encontrar información más detallada sobre cómo manejar AJAX en WP en el libro de la comunidad "WordPressTheRightWay" .
WordPress simplemente no es específico en lo que necesita hacer con AJAX. Es por eso que puede incluir casi todo en una matriz localizada / globalizada y tenerlo disponible para sus llamadas AJAX. Y eso va perfectamente en línea con la forma en que funciona Backbone: tienes que hacer las cosas que te gustan que quieras hacer.
Si desea utilizar un marco MVC JavaScript de opinión como AngularJs, entonces está en el lugar equivocado. Hay otros CMS como OctoberCMS, Drupal8, etc. que son mucho mejores para proporcionar una base para eso. WordPress requeriría que cree un conjunto personalizado de puntos finales de reescritura donde pueda devolver conjuntos de datos para sus controladores JS.
fuente