Creación de una página de configuración de WordPress usando la API REST de WordPress

Uno de los muchos grandes usos de la API REST de WordPress es mejorar el complemento o las pantallas de configuración del tema. Una vez que agregue la API REST personalizada de puntos finales, obtener la configuración guardada a través de AJAX y su ahorro a través de AJAX sin cargas de página adicionales, es más simple. El uso de REST API de WordPress en lugar de Admin-AJAX no solo es más eficiente, sino que también permite que WordPress Core haga la mayoría de las tareas pesadas en términos de higiene y validación. En este artículo, viajaremos cada uno de los pasos para crear un formulario de configuración y procesar el formulario utilizando la API REST WordPress.
Agregar la página de configuración antes de comenzar a diseñar nuestra página de configuración, necesitaremos agregar un menú o elemento de submenú al tablero de WordPress que puede poner en un formulario de configuración. En esta página, deberá cargar archivos CSS y JavaScript. Aquí hay una clase inicial para esto: assets_url = $ assets_url;
add_action (‘admin_men’, array ($ this, ‘add_page’));
add_action (‘admin_enqueue_scripts’, array ($ this, ‘registre_assets’));
}
/**
* Agregue la página PopUp CF Sumenity
*
* @From 0.0.3
*
* @uses “admin_men”
*/
Función pública add_page () {
add_menu_page (
__ (“Page Apex”, “Dominio-Text”),
__ (“Page Apex”, “Dominio-Text”),
‘Management_opions’, $ this-> slug,
Array ($ this, ‘render_admin’));
}
/**
* Grabar CSS y JS para Page
*
* @Uses la acción “Admin_enqueue_scripts”.
*/
Función pública Register_assets ()
{
wp_register_cript ($ this-> slug, $ this-> assets_url. ‘/js/admin.js’, array (‘jQuery’));
wp_register_style ($ this-> slug, $ this-> assets_url. ‘/css/admin.css’);
wp_localise_script ($ this-> slug, ‘apex’, array (
‘cadenas’ => matriz (
‘Guardado’ => __ (‘Configuración guardada’, ‘Texto-dominio’),
‘Error’ => __ (‘Error’, ‘Domain-Out’)
),
‘API’ => Matrix (
‘URL’ => ESC_URL_RAW (REST_URL (‘APEX-API/V1/SECTINGS’),
‘Nonce’ => wp_create_nonce (‘wp_rest’)
)
));
}
/**
* Poner la cola CSS y JS para la página
*/
Función pública enqueue_assets () {
if (! wp_script_is ($ this-> slug, ‘registrado’)) {
$ this-> register_assets ();
}
wp_enqueue_script ($ this-> slug);
wp_enqueue_style ($ this-> slug);
}
/**
* Página de administración de complementos de reproducción
*/
Función pública render_admin () {
$ this-> enquue_assets ();
Echo ‘¡Pon la forma aquí!’;
}
} En esta clase, uso add_men_page para crear un menú de nivel superior, pero es posible que desee reemplazar add_sub_men, dependiendo de sus necesidades. Hay dos cosas importantes para recordar.
La primera es la forma en que usamos wp_localise_cript (). Esta característica le brinda una forma de crear una variable de JavaScript global usando PHP, cada vez que se carga el script especificado en el primer argumento. Inicialmente fue diseñado para proporcionar el navegador traducido, ubicado. Esto es parte de la forma en que lo usamos, para proporcionar mensajes de éxito y error que se pueden traducir. Pero también se puede usar para transmitir valores dinámicos, como URL para el sitio actual, en este caso, un punto API final y un Nonce. Necesitaremos todo esto en JavaScript, pero será diferente para cada sitio, por lo que tenemos que usar PHP para generarlo. Además, tenga en cuenta que la URL raíz se transmite como una adicción a la clase. Me gusta hacer esto, porque es probable que esa URL se use en otros lugares en un complemento o tema y quiero un solo lugar para cambiarla o filtrar para todo el complemento. Tendremos que especificar esa URL cuando instantenemos la clase. Un buen lugar para hacerlo está en el archivo de complemento raíz, por lo que plugin_dir_url () generará la URL correcta. Veamos el archivo de complemento principal que configuraría esto: enquue_assets ();
?>

<? Php
} Me aseguré de que cada campo tenga una identificación. Esto me permitirá apuntar a cada uno con jQue.val () para obtener su valor. Esto también es importante para el almacenamiento semántico HTML, ya que las etiquetas de campo deben tener un atributo para el cual corresponde a una ID de campo. También le di una identificación al formulario y agregué un elemento vacío con la ID de "retroalimentación" que podemos colocar dinámicamente allí., Pero comencemos simple. Agregar una ruta REST REST antes de que pueda escribir JavaScript para enviar los datos al servidor a través de AJAX, necesitamos una ruta REST API. Escribí mucho al respecto, pero vale la pena repasar una ruta personalizada muy simple con un final y punto de publicación. La separación de la lógica comercial cree firmemente que las clases para las rutas API deben preocuparse solo por las solicitudes de gestión, no con la lógica comercial necesaria para esas solicitudes. En este caso, a través de la "lógica de negocios" me refiero a leer y escribir configuraciones reales. Entonces, primero, creemos una clase para lidiar con ella.
Esta clase será un envoltorio simple alrededor de get_option () y update_option () con una validación básica. Esta clase tiene un método get_settings () que recibe el valor guardado y luego usa wp_pars_args () para completar cualquier índice faltante guardado que esperaríamos. También tiene un método save_settings () que asegura que solo las claves en la lista blanca que se guardan se guarden en la pintura final que se guardan. “madera”,
‘suma’ => 42
);
/**
* Obtenga la configuración guardada
*
* @return matrix
*/
Función pública pública get_setts () {
$ Save = get_option (self :: $ option_key, array ());
if (! is_array ($ guardado) ||! vacía ($ guardado)) {
Devolver self :: $ defaults;
}
return wp_parse_args ($ guardado, self :: $ defaults);
}
/**
* Guarde la configuración
*
* Las claves de matriz deben incluirse en la lista blanca (es decir, deben ser las claves del automóvil :: $ predeterminados
*
* @Param Array $ Configuración
*/
Save_settings Función pública pública (Matrix $ Configuración) {
// Eliminar cualquier índice no permitido antes del rescate
Foreach ($ configuración como $ i => $ setting) {
if (! array_key_exists ($ shind, self :: $ defaults)) {
Unset ($ configuración [$ i]);
}
}
Update_option (self :: $ option_key, $ configuración);
}
} La API de ruta descansa ahora que tenemos una forma de leer y escribir la configuración que podemos abordar de cualquier manera, para crear una ruta API que actúe como un descanso para ello. Esta ruta tendrá puntos finales de finalización y publicación.
Si nunca ha creado una API personalizada de REST de Point, le recomiendo leer la documentación. También tengo una lista limpia de enlaces, incluidos los elementos de torque y las discusiones de televisión de WordPress sobre este tema. Aquí está la clase de ruta API REST: <? PHP
Clase APEX_API {
/**
* Agregar rutas
*/

Función pública add_routes () {
registro_rest_route (‘apex-api/v1’, ‘/settings’,
matriz(
“Métodos” => “publicar”,
‘Callback’ => Matrix ($ this, ‘update_settings’),
‘args’ => matriz (
‘Industry’ => matrix (‘type’ => ‘string’,
“Requerido” => falso,
‘sANITIZE_CALLBACK’ => ‘SANITIZE_TEXT_FIELD’
),
‘cantidad’ => matriz (
‘Tipo’ => ‘entero’,
“Requerido” => falso,
‘SANITIZE_CALLBACK’ => ‘Ausente’
)
),
‘Permissions_Callback’ => Matrix ($ this, ‘permisos’)
)
);
registro_rest_route (‘apex-api/v1’, ‘/settings’,
matriz(
‘Métodos’ => ‘Get’,
‘callback’ => matrix ($ this, ‘get_setings’),
‘args’ => matriz (
),
‘Permissions_Callback’ => Matrix ($ this, ‘permisos’)
)
);
}
/**
* Verifique sus permisos de solicitud
*
* @return bool
*/
Permisos para funciones públicas () {
return current_user_can (‘manage_options’);
}
/**
* Actualizar la configuración
*
* @param wp_rest_request $ solicitud
*/
Función pública Update_settings (WP_REST_REQUEST $ request) {
$ Configuración = Array (
‘Industria’ => $ request-> get_param (‘industria’),
‘Cantidad’ => $ request-> get_param (‘cantidad’)
);
Apex_settings :: save_settings ($ configuración);
Return REST_ENSURE_RESPONDE (apex_settings :: get_settings ())-> set_status (201);
}
/**
* Obtener configuración a través de API
*
* @param wp_rest_request $ solicitud
*/
Función pública get_settings (wp_rest_request $ request) {
Return REST_ENSURE_RESPONDE (APEX_SETTINGS :: get_settings ());
}
} Echa un vistazo, las funciones de llamadas inversas son bastante simples, ya que solo incluyen la clase de configuraciones que creamos en la última sección. Es importante comprender que, por diseño, esa clase de configuración no tiene permisos de verificación o desinfección. Pero la comprobación y el saneamiento de los permisos son muy importantes. Estos puntos finales API ofrecen esto. El método de publicación especifica un argumento “Sanitize_Callback” para cada campo. De esta manera, puedo confiar en que los datos son seguros antes de transmitirlos. Además, ambas rutas usan un “permisos Saltar sobre cualquiera de estos pasos sería peligroso. Ahora solo tenemos que instantarse en esta clase, en la acción “REST_PI_INIT”, para que existan los puntos finales. Aquí está el archivo de complemento principal, modificado para hacer esto:
<? Php
/**
* Nombre del complemento: Plugin Apex
*/
add_action ('init', function () {
$ assets_url = plugin_dir_url (__file__);
// Menú de configuración
if (is_admin ()) {
nuevo APEX_MENU ($ Assets_url);
}
// Configurar la API REST
}); Usando la API REST en su página de configuración ahora que tenemos los puntos finales, para usarlos en nuestra página de configuración. Escribiremos dos llamadas AJAX. El primero recibirá la configuración guardada y actualizará el formulario con esa configuración. Esto se activará por la carga de la página. El segundo se activará por el botón de rescate del formulario y se utilizará para actualizar la configuración.
Anteriormente en este tutorial, le dije a WordPress que cargara un archivo JavaScript en esta página de administración.Ahora es el momento de usar ese archivo.Así es como se ve la primera llamada Ajax.Su tarea es obtener la configuración guardada y actualizar el formulario con ellos: jQuery ($ ($) {$ .AJAX ({
Método: 'Get',
URL: APEX.API.URL
BefefefefefeSend: function (xhr) {
XHR.StrequestHeader ('X-WP-NONCE', APEX.API.NON);
}
}). Entonces (function (r) {
if (r.hasownproperty ('industria')) {
$ ('#Industria') .val (r.Industria);
}
if (r.hasownproperty ('sum')) {
$ ('#suma') .val (r.amount);
}
})
}); Observe dos cosas importantes aquí. En primer lugar, uso el objeto Apex global que se ha configurado anteriormente con wp_localise_crizt () para decir jQuery qué URL solicitar. También uso el método befeforesend () para agregar un encabezado no contenido en ese objeto. Sin esto, durante el procesamiento de la solicitud de la API, el usuario no se considerará autenticado y, por lo tanto, nuestra verificación del permiso fallará. Después de completar la solicitud API, la configuración se agregan a los campos de formulario usando jQuery.val (). En aras de la seguridad, me aseguré de estar en respuesta usando Object.HasownProperty (). Esta es una validación importante, pero no escala bien a medida que aumenta la cantidad de configuración, una de las muchas razones por las que uso Vuejs para este tipo de cosas. Ahora, cuando carga la página, debe recibir la configuración guardada, probablemente los valores predeterminados en el momento y actualizar el formulario. Es bueno, pero el verdadero propósito de todas estas cosas es actualizar la configuración. Por lo tanto, necesitaremos la segunda llamada AJAX, que ejecutará una solicitud de publicación cuando se envíe el formulario. Aquí está JavaScript actualizado con Ajax Rescue Call: jQuery (function ($) {$ .AJAX ({
Método: 'Get',
URL: APEX.API.URL,
BefefefefefeSend: function (xhr) {
XHR.StrequestHeader ('X-WP-NONCE', APEX.API.NON);
}
}). Entonces (function (r) {
if (r.hasownproperty ('industria')) {
$ ('#Industria') .val (r.Industria);
}
if (r.hasownproperty ('sum')) {
$ ('#suma') .val (r.amount);
}
});
$ ('#apex-form') .on ('enviar', function (s) {
E. PreventDefault ();
Var data = {
Suma: $ ('#amount') .val (), Industry: $ ('#Industria) .val ()
};
$ .AJAX ({
Método: 'Post',
URL: APEX.API.URL,
BefefefefefeSend: function (xhr) {
XHR.StrequestHeader ('X-WP-NONCE', APEX.API.NON);
},
Datos: datos
}). Entonces (function (r) {
$ ('#Feedback') .html ('
' + apex.string.saved + '
');
}). Error (función (r) {
Mensaje var = apex.string.rror;
if (r.hasownproperty ('mensaje')) {
Mensaje = R. Mensaje;
}
$ ('#Feedback') .html ('
' + mensaje + '
');
})
})

Copyright statement: Unless otherwise noted, this article is Collected from the Internet, please keep the source of the article when reprinting.

Check Also

gkOVSBm5B8SgiXmo

Shopify vs WooCommerce – ¿Cuál es la mejor plataforma?(Comparación)

Shopify vs WooCommerce

Leave a Reply

Your email address will not be published. Required fields are marked *