close

carreras

WordPress está pasando por una transición un tanto últimamente con cada vez más una cosa. Y una buena cosa a la que, debido a que por fin ponerse al día con el resto del mundo con motor de JSON por datos.

¿Qué es JSON

Si no está familiarizado con (abreviatura de JavaScript Object Notation), en pocas palabras es un formato estándar en el que representamos los datos, o más importante, una representación que muchos dispositivos, lenguajes y protocolos entienden. Digamos, por ejemplo, que usted tiene una persona que tiene una serie de atributos. El objeto JSON de esa persona sería algo como esto:

{  "Nombre de pila": "Tomaz",  "Last-name": "Zaman",  "Edad": 32,  "Dirección": {    "País": "Eslovenia"  },  "aficiones": [    "paracaidismo",    "películas"  ]}

En muchos sentidos JSON se convirtió en el sucesor del, principalmente porque es más sencillo y más rápido para escribir y leer.

No hay plugins favor

Por desgracia, sin el plugin WP-REST API, WordPress no maneja datos JSON así, o en absoluto. Esto se debe a todas las formas someten tipo de datos de urlencoded-x-www-form que significa que cuando publiques algo (como la presentación de un nuevo artículo), los datos se escapó y codificado en la URL. Esto es en realidad el comportamiento por defecto de cómo se comportan los formularios HTML regulares, pero ya que estamos cubriendo la importación de datos en este artículo no tenemos cualquier forma, en primer lugar, sólo datos.

Pero necesitamos algo de URL para llamar desde nuestro servicio externo con el fin de importar datos, ¿verdad? Bueno, vamos a utilizar lo que ya proporciona WordPress:. Ya que es un servicio interno, no tiene idea de dónde está el punto final ajax (la URL para llamar), por lo que necesita para codificar la dirección URL con la acción apropiada, que suele ser algo así como

Cuando se trata de tutoriales, creo que siempre es mejor para mostrar un ejemplo de la vida real, de modo que aquí voy a mostrar cómo importamos desarrolladores codificables de nuestra aplicación personalizada (construida en Ruby on Rails) en WordPress, como un tipo de mensaje personalizado (llamado desarrollador).

Register ganchos Con el fin de aprovechar el poder de WordPress AJAX, tenemos que crear dos ganchos / acciones que activarán la función de importación (poner esto - y todo el código de abajo - en functions.php, o cualquier otro archivo que se incluye en su tema o plugin): add_action ( 'wp_ajax_import_developer', 'import_developer'); add_action ( 'wp_ajax_nopriv_import_developer', 'import_developer');  Ahora tenemos que definir la función que estas dos acciones enganchan en: import_developer function () {   $ Developer_data = json_decode (file_get_contents ( 'php: // input'));   if (compare_keys ()) {     insert_or_update ($ developer_data);   }   wp_die (); }  Las partes importantes de esta función: Línea 3: la secuencia de comandos lee el cuerpo de la petición, decodifica el formato y lo asigna a $ línea de developer_data 5: control de seguridad se lleva a cabo (más sobre esto más adelante) Línea 6: Los datos se pasa a otra función que, o bien crea un nuevo registro de desarrollador o actualiza una existente línea 9: asegurándose de que nada se está procesandodespués importamos el desarrollador La parte más relevante es la importación de los desarrolladores, por lo que vamos a ver que el próximo. Insertar o actualizar un registro Antes de seguir adelante, vale la pena señalar lo que nuestra representación JSON de un desarrollador se parece a (cómo nuestra aplicación personalizada envía los datos a WordPress): {     "Id": "1",     "FULL_NAME": "Tomaz Zaman",     "Bio": "fundador codificables",     "tags": [         "CSS",         "HTML",         "PHP",         "WordPress"     ] }  Al importar, FULL_NAME se convierte en el título de la entrada, bio se convierte en el contenido de la entrada y las etiquetas, así, etiquetas :) Con el fin de determinar cuál de las dos acciones a realizar tenemos que comprobar si el registro ya existe y para que nos vamos a usar una developer_id campo personalizado en nuestro tipo de mensaje personalizado. Aparte de que yo también voy a utilizar otro campo personalizado para almacenar JSON todo en ella, tal como es. Esto puede no ser muy útil para usted, pero podemos utilizar algunos de los datos sólo para mostrarlo (como comentarios), por lo que puede hacer que en nuestro tema, sin necesidad de adicionalescampos si algunos atributos nunca van a ser modificados en WordPress. Voy a nombrar este JSON campo personalizado. No dude en utilizar campos personalizados tanto como sea necesario si su problema requiere que sin embargo. Aquí está el código completo (con la explicación más abajo): la función insert_or_update ($ developer_data) {   if (! $ developer_data)     falso retorno;   $ Args = array (     'Meta_query' => array (       formación(         'Clave' => 'developer_id',         'Valor' => $ developer_data-> Identificación       )     ),     'Post_type' => 'desarrollador',     'Post_status' => array ( 'publicar', 'proyecto' 'en espera', 'auto-proyecto', 'futuro', 'hereda' 'privado'),     'Posts_per_page' => 1   );   $ Desarrollador = get_posts ($ args);   $ Developer_id = '';   if ($ desarrollador)     $ = $ Developer_id revelador [0] -> Identificación;   $ Developer_post = array (     'ID' => $ developer_id,     => $ Developer_data-> FULL_NAME 'POST_TITLE',     => $ Developer_data-> bio 'POST_CONTENT',     'Post_type' => 'desarrollador',     'Post_status' => ($ Desarrollador)? $ Revelador [0] -> post_status: 'publicar'   );   $ Developer_id = wp_insert_post ($ developer_post);   if ($ developer_id) {     update_post_meta ($ developer_id, 'developer_id', $ developer_data-> id);     update_post_meta ($ developer_id, 'json', addslashes (file_get_contents ( 'php: // input')));     wp_set_object_terms ($ developer_id, $ developer_data-> etiquetas, 'developer_tag');   }   print_r ($ developer_id); }  Antes de hacer nada, comprobamos que developer_data $ realidad contiene los datos (línea 3) y luego preparar los argumentos a favor de nuestra consulta que, o bien devolver un registro, o no hay registros en todas las líneas (6-18). Si lo hace encontrar un registro existente, entonces se asigna de su ID a la variable $ developer_id (línea 23), lo cual es importante para WordPress. Cuando usamos wp_insert_post que decida si desea crear un nuevo registro o actualizar una existente en función de si existe o no el ID. En nuestro caso tenemos que evitar duplicados, pero su experiencia puede variar por lo que modificar el código en consecuencia.Una vez que se crea el registro / actualización, necesitamos actualizar nuestros campos personalizados (a través de update_post_meta). Como he mencionado anteriormente, se guarda datos JSON en bruto en un campo por conveniencia. Debido a que usamos taxonomía personalizada para nuestros desarrolladores, también tenemos que actualizar el developer_tag que también actualiza o crea etiquetas como sea necesario de forma automática. Como último paso, para que nuestra aplicación externa sabe todo fue muy bien, acabamos de imprimir el WordPress ID del registro. ¿Y la seguridad? Como estamos acceso a WordPress desde fuera, no podemos utilizar sus medidas de seguridad por defecto (AJAX) wp_nonce, así que tuve que llegar a una solución personalizada. A decir verdad, no he venido con ella por mi cuenta, me acaba de copiar lo que - si es bueno para ellos, es bueno para nosotros también. Aquí está la función: compare_keys function () {   if (isset! ($ _SERVER [ 'HTTP_X_CODEABLE_SIGNATURE'])) {     throw new Excepción ( "cabecera HTTP" X-codificables-Firma 'no se encuentra. ");   }   lista ($ algo, $ hash) = explode ( '=',$ _SERVER [ 'HTTP_X_CODEABLE_SIGNATURE'], 2) array ( '', '');   $ Raw_post = file_get_contents ( 'php: // input');   if ($ picadillo! == hash_hmac ($ algo, $ raw_post, CODEABLE_KEY)) {     throw new Exception ( 'Se hash de secreto no coincide.');   }   return true; }  Cuando la importación de datos para desarrolladores en WordPress, una cabecera especial es enviado con la petición de que se parece a esto: X-codificables-Firma: sha1 = 246d2e58593645b1f261b1bbc867fe2a9fc1a682. Sin complicar demasiado, esta firma se genera a partir del cuerpo de la petición (nuestro JSON desarrollador objeto) y firmado con una clave privada (que se define tanto en WordPress como CODEABLE_KEY y en nuestra aplicación personalizada) y luego esta firma se compara con la misma firma, este tiempo generado por WordPress. Conclusión entiendo este tutorial puede ser un poco más en el lado avanzado de cosas, pero la verdad es, JSON es un formato ampliamente utilizado y compatible que un número creciente de utilización de servicios en línea (sí, Facebook también, que es por eso que ves vacía cajascuando inicia sesión en - su navegador está esperando JSON para ser devuelto detrás de las escenas) - por lo que insto a que se aprende, que va a pagar dividendos en el futuro, sobre todo cuando se convierte en parte de WordPress núcleo. Que se hará totalmente. Para muchas gracias por su tiempo dedicado a la siguiente este tutorial, he preparado el código de arriba en un (empaquetado en una clase, para arrancar) que es libre de usar. También me gustaría dar las gracias y buena gente en por ayudarme con el código. Difunde el amor

Previous Post     Next Post


TAGS


CATEGORIES

.