{"id":81614,"date":"2026-01-09T09:38:01","date_gmt":"2026-01-09T08:38:01","guid":{"rendered":"https:\/\/kinsta.com\/es\/?p=81614&#038;preview=true&#038;preview_id=81614"},"modified":"2026-01-14T09:24:49","modified_gmt":"2026-01-14T08:24:49","slug":"api-block-bindings-de-wordpress","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/","title":{"rendered":"La API Block Bindings de WordPress: Qu\u00e9 es y c\u00f3mo utilizarla para crear sitios web din\u00e1micos"},"content":{"rendered":"<p>La API Block Bindings es una potente herramienta del editor de bloques que te permite conectar cualquier fuente de datos a los atributos de un bloque.<\/p>\n<p>Esta API se introdujo por primera vez <span style=\"margin: 0px;padding: 0px\">en <a href=\"https:\/\/kinsta.com\/es\/blog\/wordpress-6-5\/#block-bindings-api\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress 6.5<\/a> y, en su<\/span> implementaci\u00f3n <span style=\"margin: 0px;padding: 0px\">inicial<\/span>, permit\u00eda a los usuarios de WordPress mostrar valores de campos personalizados dentro de entradas y p\u00e1ginas.<\/p>\n<p>La API Block Bindings sirve de base para otras potentes funcionalidades de WordPress. Algunos ejemplos incluyen los <a href=\"https:\/\/kinsta.com\/es\/blog\/wordpress-6-6\/#synced-pattern-overrides\">Synced pattern overrides<\/a> (anulaciones en patrones sincronizados) y la variaci\u00f3n del bloque \u00abPost Date\u00bb introducida en <a href=\"https:\/\/kinsta.com\/es\/blog\/wordpress-6-9\/#block-bindings-api-improvements\">WordPress 6.9<\/a>.<\/p>\n<p>Entonces, \u00bfqu\u00e9 es exactamente la API Block Bindings? \u00bfY para qu\u00e9 se utiliza? Te ofreceremos una introducci\u00f3n sencilla y un ejemplo real que muestra c\u00f3mo crear enlaces entre los bloques de Gutenberg y fuentes de datos externas.<\/p>\n<p>Manos a la obra.<br \/>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc><\/p>\n<h2>La API Block Bindings: Conceptos b\u00e1sicos<\/h2>\n<p>Como ya hemos mencionado anteriormente, la API Block Bindings te permite crear v\u00ednculos entre una fuente de datos y los atributos de un bloque.<\/p>\n<p>Si no est\u00e1s familiarizado con los atributos de bloque, navega hasta el directorio <code>src<\/code> de la biblioteca de bloques del proyecto Gutenberg en GitHub, busca el bloque Paragraph (P\u00e1rrafo) y abre el <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/blob\/trunk\/packages\/block-library\/src\/paragraph\/block.json\" target=\"_blank\" rel=\"noopener noreferrer\">archivo <code>block.json<\/code><\/a>. La propiedad <code>attributes<\/code> proporciona una lista de los atributos del bloque P\u00e1rrafo.<\/p>\n<pre><code class=\"language-json\">\"attributes\": {\n\t\"content\": {\n\t\t\"type\": \"rich-text\",\n\t\t\"source\": \"rich-text\",\n\t\t\"selector\": \"p\",\n\t\t\"role\": \"content\"\n\t},\n\t\"dropCap\": {\n\t\t\"type\": \"boolean\",\n\t\t\"default\": false\n\t},\n\t\"placeholder\": {\n\t\t\"type\": \"string\"\n\t},\n\t\"direction\": {\n\t\t\"type\": \"string\",\n\t\t\"enum\": [ \"ltr\", \"rtl\" ]\n\t}\n},<\/code><\/pre>\n<p>Los siguientes bloques son soportados por la API Block Bindings a partir de WordPress 6.9 y, por lo tanto, pueden vincularse a tus campos personalizados:<\/p>\n<table>\n<thead>\n<tr>\n<th>Bloques compatibles<\/th>\n<th>Atributos<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Paragraph (P\u00e1rrafo)<\/td>\n<td>content<\/td>\n<\/tr>\n<tr>\n<td>Heading (Encabezado)<\/td>\n<td>content<\/td>\n<\/tr>\n<tr>\n<td>Image (Imagen)<\/td>\n<td>id, url, alt, title, caption<\/td>\n<\/tr>\n<tr>\n<td>Button (Bot\u00f3n)<\/td>\n<td>text, url, linkTarget, rel<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Para conectar tus campos personalizados a los bloques de Gutenberg, primero debes <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/register_post_meta\/\" target=\"_blank\" rel=\"noopener noreferrer\">registrarlos<\/a>. El siguiente c\u00f3digo registra un campo personalizado a trav\u00e9s de un plugin de WordPress o del <a href=\"https:\/\/kinsta.com\/es\/blog\/functions-php-wordpress\/\">archivo<code>functions.php<\/code><\/a> de tu tema:<\/p>\n<pre><code class=\"language-php\">add_action( 'init', function() {\n\tregister_post_meta( 'your-post-type', 'myplugin_meta_key', [\n\t\t'show_in_rest'  =&gt; true,\n\t\t'single'        =&gt; true,\n\t\t'type'          =&gt; 'string',\n\t\t'description'   =&gt; __( 'City name', 'textdomain' ),\n\t\t'auth_callback' =&gt; 'is_user_logged_in',\n\t] );\n} );<\/code><\/pre>\n<p><code>register_post_meta<\/code> acepta una array de atributos que definen las caracter\u00edsticas de los campos personalizados, y la documentaci\u00f3n proporciona una <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/register_meta\/\">lista completa<\/a> de ellos. Para que un campo personalizado est\u00e9 disponible para la API Block Bindings, debes establecer <code>show_in_rest<\/code> en true. Desde WordPress 6.9, <code>string<\/code> es el \u00fanico tipo soportado.<\/p>\n<p>Para ver la API Block Bindings en acci\u00f3n con campos personalizados, crea un nuevo plugin de WordPress y registra un campo meta con el c\u00f3digo mostrado arriba.<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\/**\n * Plugin Name: Block Bindings example\n * Description: Example plugin that uses the Block Bindings API.\n * Version: 1.0.0\n * Author: Your Name\n * License: GPL2 or later\n * Text Domain: block-bindings-example\n *\/\n\nif ( ! defined( 'ABSPATH' ) ) {\n\texit;\n}\n\nadd_action( 'init', function() {\n\tregister_post_meta( '', 'block_bindings_image_url', [\n\t\t'show_in_rest'  =&gt; true,\n\t\t'single'\t    =&gt; true,\n\t\t'type'\t\t    =&gt; 'string',\n\t\t'description'   =&gt; __( 'City name', 'block-bindings-example' ),\n\t\t'auth_callback' =&gt; 'is_user_logged_in',\n\t] );\n} );<\/code><\/pre>\n<p>En tu panel de control de WordPress, activa el plugin. A continuaci\u00f3n, ve a la pantalla Entradas y crea una nueva entrada. Cuando selecciones un bloque soportado, el panel <b>Atributos<\/b> de la barra lateral Configuraci\u00f3n del bloque mostrar\u00e1 la lista de atributos que se pueden vincular a un campo personalizado registrado.<\/p>\n<figure id=\"attachment_202443\" aria-describedby=\"caption-attachment-202443\" style=\"width: 2094px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-202443 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2025\/12\/image-block-attributes-block-bindings-ui.png\" alt=\"Captura de pantalla que muestra los atributos del bloque Imagen que soportan Block Bindings\" width=\"2094\" height=\"1016\"><figcaption id=\"caption-attachment-202443\" class=\"wp-caption-text\">Captura de pantalla que muestra los atributos del bloque Imagen que soportan Block Bindings<\/figcaption><\/figure>\n<p>Abre el men\u00fa <strong>Opciones<\/strong> en la esquina superior derecha y selecciona <strong>Preferencias<\/strong>. En la pesta\u00f1a <strong>General<\/strong>, localiza la secci\u00f3n <strong>Avanzado<\/strong> y activa los campos personalizados. Guarda los cambios, espera a que se recargue la p\u00e1gina y vuelve al editor.<\/p>\n<figure id=\"attachment_202434\" aria-describedby=\"caption-attachment-202434\" style=\"width: 1490px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-202434 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2025\/12\/enable-custom-fields.png\" alt=\"Activa los campos personalizados en las Preferencias del editor.\" width=\"1490\" height=\"1006\"><figcaption id=\"caption-attachment-202434\" class=\"wp-caption-text\">Activa los campos personalizados en las Preferencias del editor.<\/figcaption><\/figure>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Suponemos que queremos a\u00f1adir campos personalizados manualmente. Crear una <a href=\"https:\/\/kinsta.com\/es\/blog\/wordpress-6-7\/#meta-boxes-in-the-post-editor\">interfaz que simplifique<\/a> la inserci\u00f3n de campos personalizados est\u00e1 fuera del alcance de este art\u00edculo.<\/p>\n<\/aside>\n\n<p>Tu siguiente paso es insertar un bloque Imagen. Con el bloque seleccionado, haz clic en el icono <strong>+<\/strong> del panel <strong>Atributos<\/strong> y selecciona el atributo <strong>url<\/strong>. El panel Atributos mostrar\u00e1 entonces una lista de metacampos disponibles. Vuelve a seleccionar url. Ahora ver\u00e1s la lista de meta campos disponibles para el tipo de entrada actual.<\/p>\n<figure id=\"attachment_202436\" aria-describedby=\"caption-attachment-202436\" style=\"width: 2162px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-202436 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2025\/12\/attributes-panel-image-block.png\" alt=\"Captura de pantalla que muestra un campo personalizado y la interfaz de usuario de Block Bindings.\" width=\"2162\" height=\"930\"><figcaption id=\"caption-attachment-202436\" class=\"wp-caption-text\">Vincular un campo personalizado al atributo url de un bloque de imagen en la interfaz de usuario de Block Bindings.<\/figcaption><\/figure>\n<p>Selecciona tu meta campo y guarda la entrada. Ahora deber\u00edas ver tu imagen tanto en el editor como en el frontend.<\/p>\n<figure id=\"attachment_202439\" aria-describedby=\"caption-attachment-202439\" style=\"width: 2162px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-202439 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2025\/12\/block-bindings-image-url.jpg\" alt=\"Captura de pantalla del editor de bloques con un bloque de imagen cuyo atributo url est\u00e1 vinculado al valor de un campo personalizado.\" width=\"2162\" height=\"1074\"><figcaption id=\"caption-attachment-202439\" class=\"wp-caption-text\">Un bloque Imagen con el atributo url vinculado a un valor de campo personalizado.<\/figcaption><\/figure>\n<p>Desde la <a href=\"https:\/\/kinsta.com\/es\/blog\/wordpress-6-7\/\">versi\u00f3n 6.7 de WordPress<\/a>, puedes utilizar el atributo Label para mostrar texto en la interfaz del editor. El siguiente bloque de c\u00f3digo muestra un ejemplo:<\/p>\n<pre><code class=\"language-php\">add_action( 'init', function() {\n\tregister_post_meta( '', 'block_bindings_image_url', [\n\t\t'show_in_rest'  =&gt; true,\n\t\t'single'        =&gt; true,\n\t\t'type'          =&gt; 'string',\n\t\t'description'   =&gt; __( 'City image', 'block-bindings-example' ),\n\t\t'label'         =&gt; __('Image URL'),\n\t\t'auth_callback' =&gt; 'is_user_logged_in',\n\t] );\n} );<\/code><\/pre>\n<figure id=\"attachment_202441\" aria-describedby=\"caption-attachment-202441\" style=\"width: 2148px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-202441 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2025\/12\/custom-field-label-in-block-bindings-ui.png\" alt=\"Captura de pantalla que muestra las etiquetas de los campos personalizados en la interfaz de usuario de Block Bindings.\" width=\"2148\" height=\"1134\"><figcaption id=\"caption-attachment-202441\" class=\"wp-caption-text\">Etiquetas de campo personalizadas en la interfaz de usuario de Block Bindings.<\/figcaption><\/figure>\n<p>Al abrir el editor de c\u00f3digo, puedes ver un objeto JSON dentro del delimitador del bloque de imagen. La propiedad <code>metadata.bindings.url<\/code> muestra que el <code>url<\/code> del bloque de imagen est\u00e1 vinculado a un campo de metadatos.<\/p>\n<pre><code class=\"language-html\">&lt;!-- wp:image {\n\t\"metadata\":{\n\t\t\"bindings\":{\n\t\t\t\"url\":{\n\t\t\t\t\"source\":\"core\/post-meta\",\n\t\t\t\t\"args\":{\n\t\t\t\t\t\"key\":\"block_bindings_image_url\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} --&gt;\n&lt;figure class=\"wp-block-image\"&gt;&lt;img alt=\"\/&gt;&lt;\/figure&gt;\n&lt;!-- \/wp:image --&gt;<\/code><\/pre>\n<p>La propiedad <code>source<\/code> especifica la fuente de datos para los block bindings. Por su parte, la propiedad <code>args.key<\/code> establece una referencia a tu campo de metadatos (meta field).<\/p>\n<p>El aspecto m\u00e1s interesante de la API Block Bindings es su capacidad para registrar fuentes de datos personalizadas, lo que abre nuevas e interesantes posibilidades a los desarrolladores. A continuaci\u00f3n, exploraremos c\u00f3mo utilizar datos de servicios de terceros con la API Block Bindings.<\/p>\n<h2>C\u00f3mo registrar fuentes de datos personalizadas de Block Bindings: Un ejemplo real<\/h2>\n<p>Una vez que te hayas familiarizado con los conceptos b\u00e1sicos de la API Block Bindings, podremos pasar a sus aspectos m\u00e1s avanzados e interesantes para los desarrolladores.<\/p>\n<p>Como se mencion\u00f3 anteriormente, la API Block Bindings te permite registrar fuentes de datos personalizadas. Esto te permite recuperar datos de una fuente remota y\/o manipular datos sin procesar para generar informaci\u00f3n \u00fatil que se puede insertar autom\u00e1ticamente en tu contenido.<\/p>\n<p>En esta secci\u00f3n, aprender\u00e1s a maximizar el potencial de Block Bindings mediante un ejemplo pr\u00e1ctico que podr\u00e1s utilizar como base para desarrollar tus propias aplicaciones personalizadas.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-important\">\n            <h3>Important<\/h3>\n        <p>Ten en cuenta que el c\u00f3digo proporcionado en el siguiente ejemplo es s\u00f3lo para fines de demostraci\u00f3n y no debe utilizarse en producci\u00f3n.<\/p>\n<\/aside>\n\n<p>Supongamos que deseas recuperar datos de una fuente externa y mostrarlos en tus entradas, p\u00e1ginas o <a href=\"https:\/\/kinsta.com\/es\/blog\/wordpress-tipos-de-postes-personalizados\/\">tipos de entradas personalizadas<\/a>. Por ejemplo, puedes consultar una API de servicio meteorol\u00f3gico enviando una solicitud con la latitud y la longitud de una ciudad para obtener datos meteorol\u00f3gicos en tiempo real, que luego podr\u00edas mostrar en tu sitio.<\/p>\n<p>Gracias a la API de Block Bindings, puedes mostrar la temperatura actual o proporcionar a tus lectores la previsi\u00f3n meteorol\u00f3gica para los pr\u00f3ximos d\u00edas. Tambi\u00e9n puedes cambiar mediante programaci\u00f3n el atributo <code>url<\/code> de una o varias im\u00e1genes de la p\u00e1gina en funci\u00f3n de las condiciones meteorol\u00f3gicas.<\/p>\n<p>Para a\u00f1adir esta funcionalidad a tu sitio web de WordPress, debes crear un plugin. Sigue estos pasos:<\/p>\n<h3>Paso 1: Crear un plugin b\u00e1sico<\/h3>\n<p>El primer paso es crear los archivos del plugin. Ve al directorio <code>wp-content\/plugins<\/code> de tu instalaci\u00f3n de WordPress y crea una nueva carpeta llamada <code>block-bindings-example<\/code>. Dentro de esta carpeta, a\u00f1ade los siguientes archivos:<\/p>\n<pre><code>\/wp-content\/plugins\/\n\u2514\u2500\u2500 \/block-bindings-example\/\n\t\u251c\u2500\u2500 block-bindings-example.php\n\t\u2514\u2500\u2500 \/includes\/\n\t\t\u251c\u2500\u2500 binding-sources.php\n\t\t\u251c\u2500\u2500 meta-fields.php\n\t\t\u2514\u2500\u2500 weather-api.php<\/code><\/pre>\n<p>Abre el archivo <code>block-bindings-example.php<\/code> en tu <a href=\"https:\/\/kinsta.com\/es\/blog\/editores-html-gratuitos\/\">editor de c\u00f3digo<\/a> favorito y a\u00f1ade el siguiente c\u00f3digo:<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\/**\n * Plugin Name: Block Bindings Example\n * Description: Use WordPress Block Bindings API (6.5+) to dynamically bind weather data from Open-Meteo API to Gutenberg blocks using custom post meta and a custom binding source.\n * Version: 1.0.0\n * Author: Your Name\n * License: GPL2 or later\n * Text Domain: block-bindings-example\n *\/\n\nif ( ! defined( 'ABSPATH' ) ) {\n\texit; \/\/ Exit if accessed directly\n}\n\n\/**\n * Cache duration for weather data: 30 minutes\n * This reduces API calls and improves performance\n *\/\ndefine( 'BB_WEATHER_CACHE_TIME', HOUR_IN_SECONDS \/ 2 );\n\nrequire_once plugin_dir_path( __FILE__ ) . 'includes\/meta-fields.php';\nrequire_once plugin_dir_path( __FILE__ ) . 'includes\/binding-sources.php';\nrequire_once plugin_dir_path( __FILE__ ) . 'includes\/weather-api.php';\n\n\/**\n * Setup function\n *\/\nfunction bb_init_setup() {\n\tbb_register_post_meta();\n\tbb_register_binding_sources();\n}\nadd_action( 'init', 'bb_init_setup' );<\/code><\/pre>\n<p>Esto es lo que hace este c\u00f3digo<\/p>\n<ul>\n<li>La constante <code>BB_WEATHER_CACHE_TIME<\/code> determina cu\u00e1nto tiempo se almacenan en cach\u00e9 los datos meteorol\u00f3gicos. Esto reduce las llamadas a la API, mejora el rendimiento de la p\u00e1gina y reduce los costes del servicio.<\/li>\n<li>Las expresiones <code>require_once<\/code> incluyen los scripts necesarios para registrar los metacampos, registrar la fuente de enlace y recuperar datos de la API.<\/li>\n<li>La funci\u00f3n de configuraci\u00f3n llama a dos funciones que registran los campos meta de la publicaci\u00f3n y las fuentes de enlace personalizadas.<\/li>\n<\/ul>\n<h3>Paso 2: Registrar los campos meta (post meta fields)<\/h3>\n<p>El siguiente paso es registrar los metacampos que necesitas para tu caso de uso. Abre el archivo <code>meta-fields.php<\/code> en la carpeta <code>includes<\/code> y a\u00f1ade el siguiente c\u00f3digo:<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\/**\n * Registers custom post meta fields so they appear in the REST API and Block Bindings editor panel\n *\/\nfunction bb_register_post_meta() {\n\n\tif ( ! function_exists( 'register_post_meta' ) ) {\n\t\treturn;\n\t}\n\n\tregister_post_meta( 'post', 'block_bindings_city_name', [\n\t\t'show_in_rest'  =&gt; true,\n\t\t'single'        =&gt; true,\n\t\t'type'          =&gt; 'string',\n\t\t'description'   =&gt; __( 'Add city name', 'block-bindings-example' ),\n\t\t'label'         =&gt; __( 'City name', 'block-bindings-example' ),\n\t\t'auth_callback' =&gt; 'is_user_logged_in',\n\t] );\n\n\tregister_post_meta( 'post', 'block_bindings_image_url', [\n\t\t'show_in_rest'  =&gt; true,\n\t\t'single'        =&gt; true,\n\t\t'type'          =&gt; 'string',\n\t\t'description'   =&gt; __( 'Add city image URL', 'block-bindings-example' ),\n\t\t'label'         =&gt; __( 'City image URL', 'block-bindings-example' ),\n\t\t'auth_callback' =&gt; 'is_user_logged_in',\n\t] );\n\n\tregister_post_meta( 'post', 'block_bindings_city_lat', [\n\t\t'show_in_rest'  =&gt; true,\n\t\t'single'        =&gt; true,\n\t\t'type'          =&gt; 'string',\n\t\t'description'   =&gt; __( 'Add city latitude', 'block-bindings-example' ),\n\t\t'label'         =&gt; __( 'Latitude', 'block-bindings-example' ),\n\t\t'auth_callback' =&gt; 'is_user_logged_in',\n\t] );\n\n\tregister_post_meta( 'post', 'block_bindings_city_lng', [\n\t\t'show_in_rest'  =&gt; true,\n\t\t'single'        =&gt; true,\n\t\t'type'          =&gt; 'string',\n\t\t'description'   =&gt; __( 'Add city longitude', 'block-bindings-example' ),\n\t\t'label'         =&gt; __( 'Longitude', 'block-bindings-example' ),\n\t\t'auth_callback' =&gt; 'is_user_logged_in',\n\t] );\n}<\/code><\/pre>\n<p>La funci\u00f3n <code>register_post_meta<\/code> registra una clave de metadatos (meta key) para su uso en las entradas. Ten en cuenta que para utilizar los metacampos registrados de esta forma con la API Block Bindings, debes establecer <code>show_in_rest<\/code> en <code>true<\/code> y <code>type<\/code> en <code>string<\/code>. Consulta la <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/register_post_meta\/\" target=\"_blank\" rel=\"noopener noreferrer\">documentaci\u00f3n<\/a> para obtener m\u00e1s informaci\u00f3n.<\/p>\n<h3>Paso 3: Registrar la fuente Block Bindings<\/h3>\n<p>Es hora de registrar tu fuente de enlaces. Abre el archivo <code>binding-sources.php<\/code> y a\u00f1ade el siguiente c\u00f3digo:<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\/**\n * Registers a custom Block Bindings source: bb\/weather-condition\n *\/\nfunction bb_register_binding_sources() {\n\n\tif ( ! function_exists( 'register_block_bindings_source' ) ) {\n\t\treturn;\n\t}\n\t\n\tregister_block_bindings_source(\n\t\t'bb\/weather-condition',\n\t\t[\n\t\t\t'label'              =&gt; __( 'Weather Condition', 'block-bindings-example' ),\n\t\t\t'get_value_callback' =&gt; 'bb_get_weather_condition_value',\n\t\t\t'uses_context'       =&gt; [ 'postId' ], \/\/ We need postId to get meta values\n\t\t]\n\t);\n}<\/code><\/pre>\n<p>La funci\u00f3n <code>register_block_bindings_source()<\/code> requiere el nombre de la fuente y una funci\u00f3n de retorno (callback) que recupere los datos de una fuente y devuelva el valor procesado.<\/p>\n<p>A continuaci\u00f3n, define la funci\u00f3n de retorno en ese mismo archivo <code>binding-sources.php<\/code>.<\/p>\n<pre><code class=\"language-php\">function bb_get_weather_condition_value( array $source_args, WP_Block $block_instance ) {\n\n\t$key = $source_args['key'] ?? null;\n\tif ( ! $key ) {\n\t\treturn null;\n\t}\n\n\t\/\/ Get current post ID from block context (always available in post content)\n\t$post_id = $block_instance-&gt;context['postId'] ?? null;\n\n\t\/\/ Fallback: use global loop if context is missing\n\tif ( ! $post_id && in_the_loop() ) {\n\t\t$post_id = get_the_ID();\n\t}\n\n\tif ( ! $post_id || $post_id &lt;= 0 ) {\n\t\terror_log( 'BB DEBUG: Could not determine post ID for weather binding' );\n\t\treturn null;\n\t}\n\n\t$weather_data = bb_fetch_and_cache_weather_data( $post_id );\n\n\tif ( ! is_array( $weather_data ) || ! isset( $weather_data[ $key ] ) ) {\n\t\treturn null;\n\t}\n\n\t$value = $weather_data[ $key ];\n\n\t\/\/ Append \u00b0C symbol for temperature\n\tif ( $key === 'temperature' ) {\n\t\treturn $value . '\u00b0C';\n\t}\n\n\treturn $value;\n}<\/code><\/pre>\n<p>Vamos a desglosar esta funci\u00f3n:<\/p>\n<ul>\n<li><code>$source_args['key']<\/code> identifica los datos vinculados al atributo del bloque.<\/li>\n<li>La siguiente l\u00ednea recupera el ID de la entrada actual de <code>context<\/code>. Si falta <code>context<\/code>, como puede ocurrir con las vistas previas, el ID de la entrada actual se recupera con <code>get_the_ID()<\/code>.<\/li>\n<li>A continuaci\u00f3n, llama a la funci\u00f3n <code>bb_fetch_and_cache_weather_data<\/code>, que recupera los datos de la API. Definiremos esta funci\u00f3n en el siguiente paso.<\/li>\n<li><code>$weather_data[$key]<\/code> contiene los datos proporcionados por la API, como la temperatura y el estado del tiempo.<\/li>\n<li>Si la clave es <code>temperature<\/code>, a\u00f1ade <code>\u00b0C<\/code> al valor proporcionado.<\/li>\n<li>A continuaci\u00f3n, la funci\u00f3n devuelve el valor final.<\/li>\n<\/ul>\n<h3>Paso 4: Recuperar datos de una fuente externa<\/h3>\n<p>Como ya hemos dicho, recuperamos datos del <a href=\"https:\/\/open-meteo.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">servicio Open-Meteo<\/a> (gratuito para uso no comercial).<\/p>\n<p>Para recuperar la temperatura actual y las condiciones meteorol\u00f3gicas, tienes que enviar una solicitud a la API que incluya la latitud y la longitud de una ubicaci\u00f3n determinada, adem\u00e1s de la variable de consulta (query var) <code>current=weather_code,temperature_2m<\/code>. A continuaci\u00f3n se muestra un ejemplo de solicitud:<\/p>\n<pre><code>https:\/\/api.open-meteo.com\/v1\/forecast?latitude=-33.8717&longitude=151.2299&current=weather_code,temperature_2m<\/code><\/pre>\n<p>La API proporciona una respuesta similar a la siguiente:<\/p>\n<pre><code class=\"language-json\">{\n\t\"latitude\": -33.8717,\n\t\"longitude\": 151.2299,\n\t\"generationtime_ms\": 0.030875205993652344,\n\t\"utc_offset_seconds\": 0,\n\t\"timezone\": \"GMT\",\n\t\"timezone_abbreviation\": \"GMT\",\n\t\"elevation\": 13.0,\n\t\"current_units\": {\n\t\t\"time\": \"iso8601\",\n\t\t\"interval\": \"seconds\",\n\t\t\"weather_code\": \"wmo code\",\n\t\t\"temperature_2m\":\"\u00b0C\"\n\t},\n\t\"current\": {\n\t\t\"time\": \"2025-12-01T16:00\",\n\t\t\"interval\": 900,\n\t\t\"weather_code\": 3,\n\t\t\"temperature_2m\":7.3\n\t}\n}<\/code><\/pre>\n<figure id=\"attachment_202460\" aria-describedby=\"caption-attachment-202460\" style=\"width: 2336px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-202460 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2025\/12\/postman-for-vsc.png\" alt=\"Respuesta Open-Meteo en Postman para Visual Studio Code\" width=\"2336\" height=\"1642\"><figcaption id=\"caption-attachment-202460\" class=\"wp-caption-text\">Respuesta Open-Meteo en Postman para Visual Studio Code<\/figcaption><\/figure>\n<p>Ahora que ya sabes c\u00f3mo obtener los datos que necesitas, abre el archivo <code>weather-api.php<\/code> y a\u00f1ade el siguiente c\u00f3digo:<\/p>\n<pre><code class=\"language-php\">function bb_fetch_and_cache_weather_data( $post_id ) {\n\t$lat = get_post_meta( $post_id, 'block_bindings_city_lat', true );\n\t$lng = get_post_meta( $post_id, 'block_bindings_city_lng', true );\n\n\t$lat = str_replace( ',', '.', trim( $lat ) );\n\t$lng = str_replace( ',', '.', trim( $lng ) );\n\n\tif ( ! is_numeric( $lat ) || ! is_numeric( $lng ) ) {\n\t\terror_log( 'BB DEBUG: Invalid latitude\/longitude values after normalization' );\n\t\treturn false;\n\t}\n\n\t$transient_key = 'bb_weather_data_' . $post_id;\n\t$cached_data   = get_transient( $transient_key );\n\n\tif ( $cached_data !== false ) {\n\t\terror_log( \"BB DEBUG: Cache hit for post ID {$post_id}\" );\n\t\treturn $cached_data;\n\t}\n\n\t\/\/ Build Open-Meteo API URL\n\t$api_url = sprintf(\n\t\t'https:\/\/api.open-meteo.com\/v1\/forecast?latitude=%s&longitude=%s&current=weather_code,temperature_2m',\n\t\trawurlencode( $lat ),\n\t\trawurlencode( $lng )\n\t);\n\n\terror_log( \"BB DEBUG: Fetching weather data from: {$api_url}\" );\n\n\t$response = wp_remote_get( $api_url, [ 'timeout' =&gt; 10 ] );\n\n\tif ( is_wp_error( $response ) ) {\n\t\terror_log( 'BB DEBUG: API request failed \u2013 ' . $response-&gt;get_error_message() );\n\t\treturn false;\n\t}\n\n\tif ( wp_remote_retrieve_response_code( $response ) !== 200 ) {\n\t\terror_log( 'BB DEBUG: API returned non-200 status code' );\n\t\treturn false;\n\t}\n\n\t$body = wp_remote_retrieve_body( $response );\n\t$data = json_decode( $body, true );\n\n\tif ( ! $data || ! isset( $data['current'] ) ) {\n\t\terror_log( 'BB DEBUG: Invalid or empty API response' );\n\t\treturn false;\n\t}\n\n\t$temperature  = $data['current']['temperature_2m'] ?? null;\n\t$weather_code = $data['current']['weather_code'] ?? 0;\n\n\t$mapped_data = [\n\t\t'temperature'    =&gt; round( (float) $temperature ),\n\t\t'weather_state'  =&gt; bb_map_wmo_code_to_state( (int) $weather_code ),\n\t];\n\n\t\/\/ Cache for 30 minutes\n\tset_transient( $transient_key, $mapped_data, BB_WEATHER_CACHE_TIME );\n\n\terror_log( 'BB DEBUG: Weather data fetched and cached successfully' );\n\n\treturn $mapped_data;\n}<\/code><\/pre>\n<p>Esta funci\u00f3n recupera los datos meteorol\u00f3gicos actuales de la API Open-Meteo y los almacena en cach\u00e9 utilizando <a href=\"https:\/\/kinsta.com\/es\/blog\/wp_options-datos-de-autocarga\/#clean-up-transients\">transients<\/a>. Vamos a verlo m\u00e1s detalladamente.<\/p>\n<ul>\n<li>Dos llamadas a <code>get_post_meta<\/code> recuperan la latitud y la longitud de tu ubicaci\u00f3n.<\/li>\n<li>Las dos l\u00edneas siguientes normalizan el separador decimal en caso de que el usuario introduzca una coma en lugar de un punto.<\/li>\n<li>El bloque condicional comprueba si los valores est\u00e1n en formato num\u00e9rico utilizando <code>is_numeric()<\/code>.<\/li>\n<li>A continuaci\u00f3n, comprueba si los datos est\u00e1n en cach\u00e9. Si es as\u00ed, devuelve los datos almacenados en cach\u00e9 y detiene la funci\u00f3n sin enviar ninguna petici\u00f3n a la API.<\/li>\n<li>Si no se encuentran datos en la cach\u00e9, construye la petici\u00f3n y almacena la respuesta.<\/li>\n<li>Las siguientes l\u00edneas proporcionan <code>temperature<\/code> y <code>weather_code<\/code>.<\/li>\n<li><code>weather_code<\/code> se asigna a <code>weather_state<\/code> gracias a la funci\u00f3n <code>bb_map_wmo_code_to_state<\/code>, que se define a continuaci\u00f3n.<\/li>\n<li>Los datos se guardan con <code>set_transient<\/code>.<\/li>\n<li>Por \u00faltimo, la funci\u00f3n devuelve los datos mapeados.<\/li>\n<\/ul>\n<p>Por \u00faltimo, define la funci\u00f3n que traduce <code>weather_code<\/code> a una cadena legible por humanos:<\/p>\n<pre><code class=\"language-php\">function bb_map_wmo_code_to_state( $code ) {\n\tif ( $code &gt;= 0 && $code &lt;= 3 ) {\n\t\treturn 'clear';\n\t} elseif ( $code &gt;= 51 && $code &lt;= 67 ) {\n\t\treturn 'rainy';\n\t} elseif ( $code &gt;= 71 && $code &lt;= 77 ) {\n\t\treturn 'snowy';\n\t} elseif ( $code &gt;= 95 ) {\n\t\treturn 'thunderstorm';\n\t}\n\treturn 'cloudy';\n}<\/code><\/pre>\n<p>El c\u00f3digo est\u00e1 completo, y tu plugin est\u00e1 listo para ser probado.<\/p>\n<h2>C\u00f3mo utilizar la API Block Bindings<\/h2>\n<p>\u00a1Es hora de aprender a utilizar las nuevas funcionalidades a\u00f1adidas a tu sitio con la API Block Bindings!<\/p>\n<p>En tu panel de control de WordPress, ve a la pantalla Plugins y activa el plugin <strong>Block Bindings Example<\/strong> que acabas de crear.<\/p>\n<figure id=\"attachment_202462\" aria-describedby=\"caption-attachment-202462\" style=\"width: 2300px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-202462 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2025\/12\/plugins-screen.png\" alt=\"Pantalla de plugins\" width=\"2300\" height=\"1246\"><figcaption id=\"caption-attachment-202462\" class=\"wp-caption-text\">Activa el plugin en tu panel de control de WordPress.<\/figcaption><\/figure>\n<p>Despu\u00e9s, crea una nueva entrada o p\u00e1gina. A\u00f1ade un bloque Imagen, un t\u00edtulo y cuatro bloques Fila (Row) que contengan dos p\u00e1rrafos cada uno, como se muestra en la imagen siguiente. A continuaci\u00f3n, guarda la entrada.<\/p>\n<figure id=\"attachment_202463\" aria-describedby=\"caption-attachment-202463\" style=\"width: 1432px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-202463 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2025\/12\/adding-blocks.png\" alt=\"Captura de pantalla del lienzo del editor (Canvas) con la estructura de bloques.\" width=\"1432\" height=\"1084\"><figcaption id=\"caption-attachment-202463\" class=\"wp-caption-text\">A\u00f1ade bloques al lienzo del editor.<\/figcaption><\/figure>\n<p>A continuaci\u00f3n, a\u00f1ade tus campos personalizados y vuelve a guardar la entrada.<\/p>\n<figure id=\"attachment_202464\" aria-describedby=\"caption-attachment-202464\" style=\"width: 1728px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-202464 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2025\/12\/add-custom-fields.png\" alt=\"A\u00f1ade campos personalizados a la entrada.\" width=\"1728\" height=\"850\"><figcaption id=\"caption-attachment-202464\" class=\"wp-caption-text\">A\u00f1ade campos personalizados a la entrada.<\/figcaption><\/figure>\n<p>Selecciona el bloque Imagen y busca el panel <strong>Atributos<\/strong> en la barra lateral Configuraci\u00f3n del bloque. Haz clic en el bot\u00f3n <strong>+<\/strong> para abrir el men\u00fa desplegable, que muestra la lista de atributos del bloque Imagen que admiten Block Bindings. Selecciona el elemento <strong>url<\/strong>.<\/p>\n<figure id=\"attachment_202443\" aria-describedby=\"caption-attachment-202443\" style=\"width: 2094px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-202443 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2025\/12\/image-block-attributes-block-bindings-ui.png\" alt=\"Captura de pantalla que muestra los atributos del bloque Imagen que soportan Block Bindings.\" width=\"2094\" height=\"1016\"><figcaption id=\"caption-attachment-202443\" class=\"wp-caption-text\">Atributos del bloque Imagen que admiten Enlaces de bloque<\/figcaption><\/figure>\n<p>Tras seleccionar el atributo de bloque, la pesta\u00f1a <strong>Avanzado<\/strong> mostrar\u00e1 un nuevo elemento <strong>url<\/strong> con la descripci\u00f3n \u00abNo conectado\u00bb Vuelve a hacer clic en el elemento <strong>url<\/strong> para ver la lista de fuentes de vinculaci\u00f3n disponibles. <strong>Post Meta<\/strong> proporciona los cuatro campos personalizados registrados para el tipo de entrada, junto con sus respectivos valores. Selecciona <strong>URL de imagen de la ciudad<\/strong>.<\/p>\n<figure id=\"attachment_202467\" aria-describedby=\"caption-attachment-202467\" style=\"width: 2300px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-202467 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2025\/12\/registered-post-meta-fields.png\" alt=\"Captura de pantalla de la interfaz de usuario de Block Bindings.\" width=\"2300\" height=\"902\"><figcaption id=\"caption-attachment-202467\" class=\"wp-caption-text\">Conecta los campos meta registrados.<\/figcaption><\/figure>\n<p>Has asignado el metacampo <strong>URL de la imagen de la ciudad<\/strong> al atributo <b>url<\/b> del bloque Imagen. Ahora deber\u00edas ver una foto de la ciudad que has elegido.<\/p>\n<p>Sigue el mismo proceso para los dem\u00e1s meta campos. Asigna el campo <strong>Nombre de la ciudad<\/strong> al atributo <code>content<\/code> del bloque Encabezado y los campos <strong>Latitude<\/strong> y <strong>Longitude<\/strong>\u00a0a los bloques P\u00e1rrafo correspondientes.<\/p>\n<p>Ahora, conecta los dos \u00faltimos bloques a tu fuente de binding personalizada. Lamentablemente, como has visto en las capturas de pantalla anteriores, esta opci\u00f3n no est\u00e1 disponible en la interfaz de usuario del editor.<\/p>\n<p>Actualmente, tienes que cambiar al editor de c\u00f3digo y escribir manualmente el marcado (markup) para los dos bloques vinculados a tu fuente de binding. A continuaci\u00f3n, tienes el c\u00f3digo para mostrar la temperatura proporcionada por el servicio de Open-Meteo:<\/p>\n<pre><code class=\"language-json\">&lt;!-- wp:paragraph {\n\t\"metadata\":{\n\t\t\"bindings\":{\n\t\t\t\"content\":{\n\t\t\t\t\"source\":\"bb\/weather-condition\",\n\t\t\t\t\"args\":{\n\t\t\t\t\t\"key\":\"temperature\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} --&gt;\n&lt;p&gt;Placeholder&lt;\/p&gt;\n&lt;!-- \/wp:paragraph --&gt;<\/code><\/pre>\n<p>Con este m\u00e9todo, el nombre de tu fuente de datos aparecer\u00e1 en el editor como <strong>Weather Condition (Condici\u00f3n meteorol\u00f3gica)<\/strong>, pero los datos reales s\u00f3lo ser\u00e1n visibles en el front-end.<\/p>\n<figure id=\"attachment_202470\" aria-describedby=\"caption-attachment-202470\" style=\"width: 2292px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-202470 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2025\/12\/block-bindings-example.jpg\" alt=\"Un ejemplo de block bindings con fuentes de datos personalizadas\" width=\"2292\" height=\"1358\"><figcaption id=\"caption-attachment-202470\" class=\"wp-caption-text\">Un ejemplo de block bindings con fuentes de datos personalizadas<\/figcaption><\/figure>\n<p>Est\u00e1 claro que a\u00f1adir manualmente un objeto JSON al marcado del bloque no es un proceso sencillo para el usuario. Afortunadamente, <a href=\"https:\/\/kinsta.com\/es\/blog\/wordpress-6-9\/\">WordPress 6.9<\/a> introdujo mejoras significativas en la API de Block Bindings, lo que permite crear una interfaz de usuario para fuentes de datos personalizadas. Intentemos mejorar nuestro plugin con una interfaz de usuario personalizada.<\/p>\n<h2>C\u00f3mo crear una IU para tus fuentes personalizadas de Block Bindings<\/h2>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-important\">\n            <h3>Important<\/h3>\n        <p>Hemos pospuesto esta parte del proyecto porque las funcionalidades necesarias solo est\u00e1n disponibles en WordPress 6.9 y versiones posteriores. El siguiente c\u00f3digo no funcionar\u00e1 si utilizas una versi\u00f3n anterior de WordPress.<\/p>\n<\/aside>\n\n<p>Para crear una interfaz de usuario para tu fuente de binding personalizada, necesitas escribir algo de c\u00f3digo JavaScript. En primer lugar, crea una subcarpeta <code>js<\/code> en <code>\/includes<\/code> y, a continuaci\u00f3n, crea un archivo <strong>block-bindings-ui.js<\/strong> dentro de ella. La estructura del plugin quedar\u00eda as\u00ed:<\/p>\n<pre><code>\/wp-content\/plugins\/\n\u2514\u2500\u2500 \/block-bindings-example\/\n\t\u251c\u2500\u2500 block-bindings-example.php\n\t\u2514\u2500\u2500 \/includes\/\n\t\t\u251c\u2500\u2500 binding-sources.php\n\t\t\u251c\u2500\u2500 meta-fields.php\n\t\t\u2514\u2500\u2500 weather-api.php\n\t\t\t\u2514\u2500\u2500 \/js\/\n\t\t\t\t\u2514\u2500\u2500\tblock-bindings-ui.js<\/code><\/pre>\n<p>Como primer paso, a\u00f1ade el script JS al archivo principal de tu plugin:<\/p>\n<pre><code class=\"language-php\">function bb_enqueue_weather_bindings_ui() {\n\n\tif ( ! function_exists( 'register_block_bindings_source' ) ) {\n\t\treturn;\n\t}\n\n\t$js_file_path = plugin_dir_path( __FILE__ ) . 'includes\/js\/block-bindings-ui.js';\n\n\tif ( ! file_exists( $js_file_path ) ) {\n\t\treturn;\n\t}\n\n\t\/\/ Enqueue the script only in the editor\n\twp_enqueue_script(\n\t\t'bb-weather-bindings-ui',\n\t\tplugin_dir_url( __FILE__ ) . 'includes\/js\/block-bindings-ui.js',\n\t\t[ 'wp-blocks', 'wp-element', 'wp-dom-ready', 'wp-block-bindings' ],\n\t\tfilemtime( $js_file_path ),\n\t\ttrue\n\t);\n}\nadd_action( 'enqueue_block_editor_assets', 'bb_enqueue_weather_bindings_ui' );<\/code><\/pre>\n<p>Esto es lo que hace esta funci\u00f3n<\/p>\n<ul>\n<li>En primer lugar, comprueba que existe la funci\u00f3n <code>register_block_bindings_source()<\/code>.<\/li>\n<li>A continuaci\u00f3n, comprueba que el archivo <code>block-bindings-ui.js<\/code> existe en la carpeta <code>\/includes\/js<\/code> del plugin.<\/li>\n<li>La funci\u00f3n <code>wp_enqueue_script()<\/code> pone en cola el script para su uso en el editor. Para una descripci\u00f3n detallada de la funci\u00f3n, consulta la <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_enqueue_script\/\" target=\"_blank\" rel=\"noopener noreferrer\">documentaci\u00f3n<\/a>.<\/li>\n<li>Utiliza el <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/enqueue_block_editor_assets\/\" target=\"_blank\" rel=\"noopener noreferrer\">hook <code>enqueue_block_editor_assets<\/code><\/a> para poner en cola los scripts para la interfaz de edici\u00f3n.<\/li>\n<\/ul>\n<p>Ahora abre el archivo <code>block-bindings-ui.js<\/code> y escribe el siguiente c\u00f3digo:<\/p>\n<pre><code class=\"language-javascript\">wp.blocks.registerBlockBindingsSource({\n\tname: 'bb\/weather-condition',\n\tlabel: 'Weather Condition',\n\tuseContext: [ 'postId', 'postType' ],\n\tgetValues: ( { bindings } ) =&gt; {\n\t\tif ( bindings.content?.args?.key === 'temperature' ) {\n\t\t\treturn {\n\t\t\t\tcontent: 'Current temperature provided by Open-Meteo.',\n\t\t\t};\n\t\t}\n\t\tif ( bindings.content?.args?.key === 'weather_state' ) {\n\t\t\treturn {\n\t\t\t\tcontent: 'Current conditions.',\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tcontent: bindings.content,\n\t\t};\n\t},\n\tgetFieldsList() {\n\t\treturn [\n\t\t\t{ label: 'Temperature (\u00b0C)',   type: 'string', args: { key: 'temperature' } },\n\t\t\t{ label: 'Weather Conditions',  type: 'string', args: { key: 'weather_state' } }\n\t\t];\n\t}\n});<\/code><\/pre>\n<ul>\n<li>La funci\u00f3n <code>registerBlockBindingsSource()<\/code> registra una fuente de enlace en el editor de bloques.<\/li>\n<li><code>name<\/code> es un identificador \u00fanico para tu fuente de binding. Debe coincidir exactamente con el nombre utilizado en PHP con <code>register_block_bindings_source()<\/code>.<\/li>\n<li><code>label<\/code> es un nombre legible por humanos que aparece en el desplegable <strong>Fuente<\/strong> del panel <strong>Atributos<\/strong>.<\/li>\n<li><code>useContext<\/code> establece los valores de contexto que esta fuente necesita del bloque. <code>postId<\/code> es necesario para que la fuente sepa qu\u00e9 meta\/datos meteorol\u00f3gicos de la entrada debe leer.<\/li>\n<li><code>getValues<\/code> proporciona una vista previa del valor delimitado dentro del editor de bloques. Devuelve las opciones que aparecen en el desplegable despu\u00e9s de que el usuario seleccione la fuente de binding (\u00abEstado del tiempo\u00bb en nuestro ejemplo). Este m\u00e9todo est\u00e1 disponible desde WordPress 6.9.<\/li>\n<li><code>getFieldsList<\/code> devuelve las opciones que aparecen en el desplegable despu\u00e9s de que el usuario seleccione la fuente de binding (\u00abCondiciones meteorol\u00f3gicas\u00bb en nuestro ejemplo).<\/li>\n<\/ul>\n<p>Guarda el archivo y vuelve al editor. Tu fuente <strong>Weather Conditions<\/strong> (Condiciones Meteorol\u00f3gicas) est\u00e1 ahora disponible en la interfaz del editor, junto a <strong>Post Meta<\/strong>. Vuelve a cargar la p\u00e1gina y conecta un bloque P\u00e1rrafo o Encabezado a tu fuente binding. La imagen siguiente muestra el resultado.<\/p>\n<figure id=\"attachment_202472\" aria-describedby=\"caption-attachment-202472\" style=\"width: 2112px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-202472 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2025\/12\/custom-binding-source-ui.png\" alt=\"Interfaz de usuario (UI) para fuentes de binding personalizadas\" width=\"2112\" height=\"992\"><figcaption id=\"caption-attachment-202472\" class=\"wp-caption-text\">Interfaz de usuario (UI) para fuentes de binding personalizadas<\/figcaption><\/figure>\n<p>La imagen final muestra el resultado en el frontend del sitio web.<\/p>\n<figure id=\"attachment_202474\" aria-describedby=\"caption-attachment-202474\" style=\"width: 1374px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-202474 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2025\/12\/custom-data-with-block-bindings.jpg\" alt=\"Una entrada que muestra datos de una fuente de binding externa\" width=\"1374\" height=\"986\"><figcaption id=\"caption-attachment-202474\" class=\"wp-caption-text\">Una entrada que muestra datos de una fuente de binding externa<\/figcaption><\/figure>\n<h2>\u00bfQu\u00e9 m\u00e1s puedes hacer con la API Block Bindings?<\/h2>\n<p>Este art\u00edculo solo aborda superficialmente lo que puedes crear con la API Block Bindings. Lo mejor es que el desarrollo de esta potente funcionalidad de WordPress est\u00e1 lejos de haber terminado, y podemos esperar nuevas implementaciones y novedades en el futuro.<\/p>\n<p>La integraci\u00f3n de la API Block Bindings con otras potentes APIs de WordPress, como la <a href=\"https:\/\/kinsta.com\/es\/blog\/api-interactivity-wordpress\/\">API Interactivity<\/a>, te permite crear aplicaciones din\u00e1micas e interactivas que van mucho m\u00e1s all\u00e1 de las funciones tradicionales de blogging que hicieron popular a WordPress en sus primeros a\u00f1os.<\/p>\n<p>WordPress ya no es solo una plataforma de blogs o un creador de sitios web. Ahora est\u00e1 destinado a convertirse en una plataforma de desarrollo multiprop\u00f3sito para todo tipo de aplicaciones web.<\/p>\n<p>Cuanto m\u00e1s potentes sean tus aplicaciones, m\u00e1s importante ser\u00e1 tu servicio de alojamiento. Kinsta ofrece alojamiento administrado Premium con alto rendimiento, seguridad robusta, automatizaci\u00f3n extensiva y soporte de primera categor\u00eda reconocido como l\u00edder del sector por los <a href=\"https:\/\/kinsta.com\/es\/blog\/premios-g2\/\">usuarios de G2<\/a>.<\/p>\n<p>Las aplicaciones web m\u00e1s potentes requieren la mejor infraestructura de alojamiento. Echa un vistazo a <a href=\"https:\/\/kinsta.com\/es\/precios\/\">los planes de Kinsta<\/a> para encontrar el que mejor se adapte a las necesidades de tu sitio.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La API Block Bindings es una potente herramienta del editor de bloques que te permite conectar cualquier fuente de datos a los atributos de un bloque. &#8230;<\/p>\n","protected":false},"author":36,"featured_media":81615,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1345],"class_list":["post-81614","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-desarrollo-wordpress"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>La API Block Bindings de WordPress: qu\u00e9 es y c\u00f3mo usarla<\/title>\n<meta name=\"description\" content=\"API Block Bindings de WordPress, una potente API de WordPress para que los desarrolladores integren cualquier fuente de datos en sus sitios.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"La API Block Bindings de WordPress: Qu\u00e9 es y c\u00f3mo utilizarla para crear sitios web din\u00e1micos\" \/>\n<meta property=\"og:description\" content=\"API Block Bindings de WordPress, una potente API de WordPress para que los desarrolladores integren cualquier fuente de datos en sus sitios.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinsta.es\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-09T08:38:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-01-14T08:24:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/01\/the-wordpress-block-bindings-api-what-it-is-and-how-to-use-it-to-build-dynamic-websites.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1470\" \/>\n\t<meta property=\"og:image:height\" content=\"735\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Carlo Daniele\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"API Block Bindings de WordPress, una potente API de WordPress para que los desarrolladores integren cualquier fuente de datos en sus sitios.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/01\/the-wordpress-block-bindings-api-what-it-is-and-how-to-use-it-to-build-dynamic-websites-1024x512.png\" \/>\n<meta name=\"twitter:creator\" content=\"@carlodaniele\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Carlo Daniele\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"22 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/\"},\"author\":{\"name\":\"Carlo Daniele\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63\"},\"headline\":\"La API Block Bindings de WordPress: Qu\u00e9 es y c\u00f3mo utilizarla para crear sitios web din\u00e1micos\",\"datePublished\":\"2026-01-09T08:38:01+00:00\",\"dateModified\":\"2026-01-14T08:24:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/\"},\"wordCount\":2980,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/01\/the-wordpress-block-bindings-api-what-it-is-and-how-to-use-it-to-build-dynamic-websites.png\",\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/\",\"name\":\"La API Block Bindings de WordPress: qu\u00e9 es y c\u00f3mo usarla\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/01\/the-wordpress-block-bindings-api-what-it-is-and-how-to-use-it-to-build-dynamic-websites.png\",\"datePublished\":\"2026-01-09T08:38:01+00:00\",\"dateModified\":\"2026-01-14T08:24:49+00:00\",\"description\":\"API Block Bindings de WordPress, una potente API de WordPress para que los desarrolladores integren cualquier fuente de datos en sus sitios.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/01\/the-wordpress-block-bindings-api-what-it-is-and-how-to-use-it-to-build-dynamic-websites.png\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/01\/the-wordpress-block-bindings-api-what-it-is-and-how-to-use-it-to-build-dynamic-websites.png\",\"width\":1470,\"height\":735},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Desarrollo WordPress\",\"item\":\"https:\/\/kinsta.com\/es\/secciones\/desarrollo-wordpress\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"La API Block Bindings de WordPress: Qu\u00e9 es y c\u00f3mo utilizarla para crear sitios web din\u00e1micos\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/es\/#website\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluciones de alojamiento premium, r\u00e1pidas y seguras\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/es\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinsta.es\/\",\"https:\/\/x.com\/Kinsta_ES\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63\",\"name\":\"Carlo Daniele\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g\",\"caption\":\"Carlo Daniele\"},\"description\":\"Carlo is a passionate lover of webdesign and front-end development. He has been playing with WordPress for more than 20 years, also in collaboration with Italian and European universities and educational institutions. He has written hundreds of articles and guides about WordPress, published both on Italian and international websites, as well as on printed magazines. You can find him on LinkedIn.\",\"sameAs\":[\"https:\/\/frammentidicodice.com\/\",\"https:\/\/x.com\/carlodaniele\"],\"url\":\"https:\/\/kinsta.com\/es\/blog\/author\/carlodaniele\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"La API Block Bindings de WordPress: qu\u00e9 es y c\u00f3mo usarla","description":"API Block Bindings de WordPress, una potente API de WordPress para que los desarrolladores integren cualquier fuente de datos en sus sitios.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/","og_locale":"es_ES","og_type":"article","og_title":"La API Block Bindings de WordPress: Qu\u00e9 es y c\u00f3mo utilizarla para crear sitios web din\u00e1micos","og_description":"API Block Bindings de WordPress, una potente API de WordPress para que los desarrolladores integren cualquier fuente de datos en sus sitios.","og_url":"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2026-01-09T08:38:01+00:00","article_modified_time":"2026-01-14T08:24:49+00:00","og_image":[{"width":1470,"height":735,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/01\/the-wordpress-block-bindings-api-what-it-is-and-how-to-use-it-to-build-dynamic-websites.png","type":"image\/png"}],"author":"Carlo Daniele","twitter_card":"summary_large_image","twitter_description":"API Block Bindings de WordPress, una potente API de WordPress para que los desarrolladores integren cualquier fuente de datos en sus sitios.","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/01\/the-wordpress-block-bindings-api-what-it-is-and-how-to-use-it-to-build-dynamic-websites-1024x512.png","twitter_creator":"@carlodaniele","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Carlo Daniele","Tiempo de lectura":"22 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/"},"author":{"name":"Carlo Daniele","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63"},"headline":"La API Block Bindings de WordPress: Qu\u00e9 es y c\u00f3mo utilizarla para crear sitios web din\u00e1micos","datePublished":"2026-01-09T08:38:01+00:00","dateModified":"2026-01-14T08:24:49+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/"},"wordCount":2980,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/01\/the-wordpress-block-bindings-api-what-it-is-and-how-to-use-it-to-build-dynamic-websites.png","inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/","url":"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/","name":"La API Block Bindings de WordPress: qu\u00e9 es y c\u00f3mo usarla","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/01\/the-wordpress-block-bindings-api-what-it-is-and-how-to-use-it-to-build-dynamic-websites.png","datePublished":"2026-01-09T08:38:01+00:00","dateModified":"2026-01-14T08:24:49+00:00","description":"API Block Bindings de WordPress, una potente API de WordPress para que los desarrolladores integren cualquier fuente de datos en sus sitios.","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/01\/the-wordpress-block-bindings-api-what-it-is-and-how-to-use-it-to-build-dynamic-websites.png","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/01\/the-wordpress-block-bindings-api-what-it-is-and-how-to-use-it-to-build-dynamic-websites.png","width":1470,"height":735},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/es\/blog\/api-block-bindings-de-wordpress\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"Desarrollo WordPress","item":"https:\/\/kinsta.com\/es\/secciones\/desarrollo-wordpress\/"},{"@type":"ListItem","position":3,"name":"La API Block Bindings de WordPress: Qu\u00e9 es y c\u00f3mo utilizarla para crear sitios web din\u00e1micos"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/es\/#website","url":"https:\/\/kinsta.com\/es\/","name":"Kinsta\u00ae","description":"Soluciones de alojamiento premium, r\u00e1pidas y seguras","publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/es\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinsta.es\/","https:\/\/x.com\/Kinsta_ES","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63","name":"Carlo Daniele","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g","caption":"Carlo Daniele"},"description":"Carlo is a passionate lover of webdesign and front-end development. He has been playing with WordPress for more than 20 years, also in collaboration with Italian and European universities and educational institutions. He has written hundreds of articles and guides about WordPress, published both on Italian and international websites, as well as on printed magazines. You can find him on LinkedIn.","sameAs":["https:\/\/frammentidicodice.com\/","https:\/\/x.com\/carlodaniele"],"url":"https:\/\/kinsta.com\/es\/blog\/author\/carlodaniele\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/81614","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/users\/36"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/comments?post=81614"}],"version-history":[{"count":8,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/81614\/revisions"}],"predecessor-version":[{"id":81673,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/81614\/revisions\/81673"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/81614\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/81614\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/81614\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/81614\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/81614\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/81614\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/81614\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/81614\/translations\/es"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/81614\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/81615"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=81614"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=81614"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=81614"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}