WordPress está pasando por una transición algo reciente, el descanso de la API JSON se vuelve cada vez más una cosa. Y algo bueno en esto, porque finalmente llega al resto del mundo en función de los datos, basados en JSON. ¿Qué es JSON si no está familiarizado con JSON (abreviatura de la notación del objeto JavaScript), simplemente diga que es un formato estándar en el que representamos los datos o, lo que es más importante, una representación que muchos dispositivos, idiomas y protocolos entienden. Supongamos, por ejemplo, que tiene una persona que tiene una serie de atributos. El objeto JSON de esa persona se vería así:
{“Primer nombre”: “tomaz”, “último nombre”: “zaman”, “edad”: 32, “dirección”: {“país”: “eslovenia”}, “pasatiempos”: [“paracaidismo”, “Películas”]} En muchos sentidos, JSON se ha convertido en el sucesor del XML, en primer lugar porque es más simple y más rápido escribir y leer. Sin complementos, desafortunadamente, sin el complemento WP-Rest-API, WordPress no administra JSON o no hay datos. Esto se debe al hecho de que todos los formularios envían el tipo de datos X-www-form-urlencoded, lo que significa que al publicar algo (como enviar un nuevo artículo), los datos se escapan y codifican a la URL. Este es en realidad el comportamiento predeterminado de cómo se comportan los formularios HTML habituales, pero dado que cubrimos las importaciones en este artículo, no tenemos ningún formulario primero, sino solo datos.
Pero necesitamos una URL para llamar a nuestro servicio externo para importar datos, ¿verdad? Bueno, usemos lo que WordPress ya ofrece: WP_AJAX. Debido a que es un servicio interno, no tiene idea de dónde está el punto final de Ajax (la URL para llamar), por lo que tuvimos que codificar la URL con la acción apropiada, que generalmente es algo así como http://example.com/ wp-admin /admin-ajax.php? Action = your_import_action_name. Cuando se trata de tutoriales, creo que siempre es mejor mostrar un ejemplo de la vida real, así que aquí le mostraré cómo importamos a los desarrolladores codibles de nuestra aplicación personalizada (construida en Ruby on Rails) en WordPress, como una publicación personalizada. . incluido en su tema o conecta): add_action (‘wp_ajax_import_develooper’, ‘import_develooper’); add_action (‘WP_AJAX_NOPRIV_IMPORT_DEVELOOPER’, ‘import_developer’); Ahora debemos definir la función en la que estas dos acciones están conectadas: función import_developer () {$ desarrollador_data = json_decode (file_get_contents (‘php: // input’)); If (compare_keys ()) {insert_or_update ($ desarrollador_data); } wp_die (); } Las partes importantes de esta función:
Línea 3: El script lee el cuerpo de la solicitud, decodifica el formato y lo asigna a $ desarrollador_data
Línea 5: Se realiza la verificación de seguridad (más sobre esto más adelante)
Línea 6: Los datos se transmiten a otra función que crea un nuevo registro del desarrollador o actualiza una existencia 9: nos aseguramos de que nada se procese después de importar al desarrollador
La parte más relevante es importar al desarrollador, así que veamoslo. Insertar o actualizar un registro antes de continuar, vale la pena señalar cómo se ve nuestra representación JSON de un desarrollador (cómo enviar nuestras aplicaciones personalizadas a WordPress):
{“id”: “1”, “full_name”: “tomaz zaman”, “bio”: “fundador codible”, “etiquetas”: [“css”, “html”, “php”, “wordpress”]} Importar, full_name se convierte en el título de publicación, Bio se convierte en el contenido de la publicación y las etiquetas, bueno, las etiquetas para determinar cuáles de las dos acciones deben realizarse, debemos verificar si el registro ya existe y para esto usaremos un campo personalizado Desarrollador_id en nuestro tipo de publicación. Personalizado. Además, usaré otro campo personalizado para almacenar todo el JSON en él, tal como está. Puede que esto no sea muy útil, pero usamos algunos de los datos solo para mostrarlos (como revisiones), por lo que podemos hacerlo en nuestro tema, sin la necesidad de campos adicionales si algunos atributos no se cambiarán nunca en WordPress. Llamaré a este campo personalizado JSON. Siéntase libre de usar cuántos campos personalizados es necesario si su problema requiere esto.
Aquí está el código completo (con las explicaciones a continuación): función insert_or_update ($ desarrollador_data) {if (! $ Desarrollador_data) return false; $ args = array (‘meta_query’ => array (array (‘key’ => desarrollador_id ‘,’ valor ‘=> $ desarrollador_data->),’ post_type ‘=> desarrolloeLoper’, ‘post_status’ => array (‘publicar ‘,’ Pendiente ‘,’ borrador ‘,’ draft automático ‘,’ futuro ‘,’ privado ‘,’ heredar ‘),’ Post_per_page ‘=> 1); $ desarrollador = get_posts ($ args); $ desarrollador_; if ($ desarrollador) $ desarrollador_id = $ desarrollador [0]-> id; $ deveroper_post = array (‘id’ => $ desarrollador_id, ‘post_title’ => $ desarrollador_data-> full_name, ‘post_content’ => $ desarrollador_data-> bio, ‘post_type’ => ‘deverooper’, ‘post_status’ => ((( $ desarrollador)? $ desarrollador [0]-> post_status: ‘publicar’); $ desarrollador_id = wp_insert_post ($ desarrollador_post); if ($ desarrollador_id) {update_post_meta ($ desarrollador_id, ‘desarrollador_id’, $ desarrollador_data-> id); update_post_meta ($ desarrollador_id, ‘json’, addslashes (file_get_contins (‘php: // input’)); Wp_set_object_terms ($ desarrollador_id, $ desarrollador_data-> etiquetas, ‘desarrollador_tag’); } print_r ($ desarrollador_id);
} Antes de hacer algo, verificamos que $ desarrollador_data realmente contiene datos (línea 3) y luego preparamos los argumentos para nuestra consulta que devolverán un registro o no registro (líneas 6-18). Si encuentra una grabación existente, entonces asigna su ID de variable $ desarrollador_id (línea 23), que es importante para WordPress. Al usar WP_INSERT_POST, decide si crear un nuevo registro o actualizar uno existente de acuerdo con la existencia o no. En nuestro caso, necesitamos evitar duplicados, pero su kilometraje puede variar, por lo tanto, cambie el código en consecuencia. Una vez que el registro se crea/actualiza, debemos actualizar nuestros campos personalizados (a través de update_post_meta). Como mencionamos anteriormente, guardamos los datos brutos JSON en un campo por conveniencia. Debido a que utilizamos taxonomía personalizada para nuestros desarrolladores, también debemos actualizar el desarrollador_tag, que automáticamente actualiza o crea etiquetas según sea necesario. Como último paso, para informar a nuestra aplicación externa que todo salió bien, simplemente imprimimos la identificación de WordPress. ¿Pero la seguridad? Debido a que accedemos a WordPress externo, no podemos usar las medidas de seguridad AJAX predeterminadas (WP_NONCE), por lo que tuve que encontrar una solución personalizada. La verdad a decir, no venía con esto por mi cuenta, solo copié lo que hace Github: si es bueno para ellos, es bueno para nosotros.

Aquí está la función: función compare_keys () {if (! Isset ($ _server [‘http_x_codable_signature’]) {Throw New Exception (“HTTP Header ‘X-Codable-Security.”); } List ($ algo, $ hash) = explode (‘=’, $ _server [‘http_x_codable_signature’], 2) + array (”, ”); $ raw_post = file_get_contins (‘php: // input’); if ($ hash! == hash_hmac ($ algo, $ raw_post, codeable_key)) {tire nueva excepción (‘secret hash no coincida.’); } Return verdadero; } When we import the developer’s data into WordPress, a special header is sent with the request that shows as follows: X-Codeable-Signure: SHA1 = 246d2e58593645b1f261b1BBC867FE2A9FC1A682. And signed with a private key (defined both in WordPress as Codeable_Key and in our personalized Aplicación) y luego esta firma se compara con la misma firma, esta vez generada por WordPress. Conclusión Entiendo que este tutorial puede estar un poco más en el lado avanzado de las cosas, pero la verdad es que JSON es un formato ampliamente utilizado y aceptado que un número cada vez mayor de servicios en línea (sí y Facebook, por lo que ve vacío Cajas Cuando se autentica su navegador está esperando que JSON regrese detrás de escena). Así que le insto a que le enseñe, pague dividendos en el futuro, especialmente cuando se convertirá en parte del núcleo de WordPress. Que será completamente.
Cómo JSON Importa a WordPress
Tags Cómo JSON Importa a WordPress
homefinance blog