{"id":228389,"date":"2022-10-18T18:41:00","date_gmt":"2022-10-18T15:41:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228389"},"modified":"2022-11-09T02:11:59","modified_gmt":"2022-11-08T23:11:59","slug":"el-equivalente-de-wp_query-wordpress-block-editor-gutenberg-es-getentityrecords","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/el-equivalente-de-wp_query-wordpress-block-editor-gutenberg-es-getentityrecords\/","title":{"rendered":"El equivalente de WP_Query WordPress Block Editor (Gutenberg) es getEntityRecords"},"content":{"rendered":"\n<p>Si es nuevo en la escritura de complementos para el Editor de bloques de WordPress (Gutenberg), es posible que est\u00e9 un poco confundido sobre c\u00f3mo hacer todas las cosas que hac\u00eda regularmente, como capturar publicaciones con WP_Query.<\/p>\n<p>Te complacer\u00e1 mucho saber que pr\u00e1cticamente puedes hacer todo lo que sol\u00edas hacer con WP_Query usando <code>getEntityRecords<\/code>.<\/p>\n<p>Por ejemplo, podemos tomar las \u00faltimas publicaciones usando el siguiente c\u00f3digo:<\/p>\n<p>wp.data.select( &#8216;core&#8217; ).getEntityRecords( &#8216;postType&#8217;, &#8216;posts&#8217; );<\/p>\n<p>Tambi\u00e9n puede consultar tipos de publicaciones personalizadas (CPT) de la misma manera, siempre que haya <a href=\"https:\/\/developer.wordpress.org\/rest-api\/extending-the-rest-api\/adding-rest-api-support-for-custom-content-types\/#registering-a-custom-post-type-with-rest-api-support\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">hecho que su CPT sea accesible a trav\u00e9s de la API REST<\/a>.<\/p>\n<p>wp.data.select( &#8216;core&#8217; ).getEntityRecords( &#8216;postType&#8217;, &#8216;my_custom_post_type&#8217; );<\/p>\n<p>Incluso podemos pasar algunos argumentos que pueden parecer familiares:<\/p>\n<pre><code>wp.data.select( 'core' ).getEntityRecords(\n    'postType', \n    'post', \n    {\n        'status': 'draft', \n        'per_page': 2, \n    } \n);\n`\n<\/code><\/pre>\n<p>Puede encontrar la lista definitiva de los argumentos que puede pasar a la funci\u00f3n aqu\u00ed en la <a href=\"https:\/\/developer.wordpress.org\/rest-api\/reference\/posts\/#arguments\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">gu\u00eda para desarrolladores de Gutenberg<\/a>.<\/p>\n<h2>Pru\u00e9belo en la Consola<\/h2>\n<p>Si ha iniciado sesi\u00f3n en un sitio y est\u00e1 viendo la interfaz, puede probar pr\u00e1cticamente cualquier comando de Gutenberg. WordPress los almacena todos en el pr\u00e1ctico <code>wp<\/code>objeto.<\/p>\n<p>Al escribir el comando anterior en la consola en uno de mis sitios de desarrollo, obtengo lo siguiente:<\/p>\n<p>Uso de getEntityRecords para capturar publicaciones en la Consola<\/p>\n<p>La captura de pantalla anterior muestra que la consola devuelve dos objetos de publicaci\u00f3n de WordPress en JavaScript, que son publicaciones en borrador (seg\u00fan los par\u00e1metros que pas\u00e9 <code>getEntityRecords<\/code>).<\/p>\n<h2>El objeto de publicaci\u00f3n de JavaScript<\/h2>\n<p>Al explorar m\u00e1s el objeto de publicaci\u00f3n en la consola, puede ver que hay muchas propiedades devueltas para que pueda acceder.<\/p>\n<pre><code>    id: 42\n    date: \"2020-03-21T14:02:00\"\n    date_gmt: \"2020-03-21T14:02:00\"\n    guid: {\n        rendered: \"https:\/\/wholesomecode.ltd\/?p=42\"\n        raw: \"https:\/\/wholesomecode.ltd\/?p=42\"\n    }\n    modified: \"2020-03-21T14:02:00\"\n    modified_gmt: \"2020-03-21T14:02:00\"\n    password: \"\"\n    slug: \"wp-query-and-the-wordpress-block-editor-gutenberg\"\n    status: \"draft\"\n    type: \"post\"\n    link: \"https:\/\/wholesomecode.ltd\/?p=42\"\n    title: {\n        raw: \"WP_Query and the WordPress Block Editor (Gutenberg)\"\n        rendered: \"WP_Query and the WordPress Block Editor (Gutenberg)\"\n    }\n    content: {\n        raw: \"Content goes here.\"    \n        rendered: \"&lt;p&gt;Content goes here.&lt;\/p&gt;\u21b5\"\n        protected: false\n        block_version: 0\n    }\n    excerpt: {\n        raw: \"\"\n        rendered: \"&lt;p&gt;Content goes here.&lt;\/p&gt;\u21b5\"\n        protected: false\n    }\n    author: 1\n    featured_media: 101\n    comment_status: \"open\"\n    ping_status: \"open\"\n    sticky: false\n    template: \"\"\n    format: \"standard\"\n    meta: {\n        _wcltd_meta_example_1: \"1\"         \n        _wcltd_meta_example_2: \"Hello\"\n    }\n    categories: [1]\n    tags: []\n    country: []\n    region: []\n    city: []\n    permalink_template: \"https:\/\/wholesomecode.ltd\/%postname%\/\"\n    generated_slug: \"wp-query-and-the-wordpress-block-editor-gutenberg\"\n<\/code><\/pre>\n<h2>Publicar Meta en Gutenberg<\/h2>\n<p>Una cosa que notar\u00e1 del objeto de publicaci\u00f3n que exploramos anteriormente es que todo el meta de la publicaci\u00f3n est\u00e1 contenido dentro del objeto en la <code>meta<\/code>propiedad. Esto nos ahorra hacer el equivalente a <code>get_post_meta()<\/code>para este objeto en Gutenberg.<\/p>\n<p>Sin embargo, si desea obtener el meta de publicaci\u00f3n para un solo objeto de publicaci\u00f3n, <a href=\"https:\/\/wholesomecode.ltd\/blog\/get_post_meta-wordpress-block-editor-gutenberg-equivalent-is-geteditedpostattributemeta\/?preview_id=3880&#038;preview_nonce=46ba9ffabf&#038;preview=true\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">consulte el <code>get_post_meta<\/code>equivalente en el art\u00edculo de Gutenberg<\/a>.<\/p>\n<h2>Obtener los detalles de la imagen en Gutemberg<\/h2>\n<p>El objeto de publicaci\u00f3n puede obtener el ID de medios destacados, que se almacena en la <code>featured_media<\/code>propiedad.<\/p>\n<p>Puede usar <code>getMedia<\/code>(el <a href=\"https:\/\/wholesomecode.ltd\/blog\/wp_get_attachment_image-gutenberg-equivalent-getmeta\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">equivalente de WordPress Gutenberg de<code>wp_get_attachment_image<\/code><\/a>) para obtener las propiedades de este archivo adjunto.<\/p>\n<h2>El bucle de correos de Gutenberg<\/h2>\n<p>Expandamos el <a href=\"https:\/\/wholesomecode.ltd\/articles\/an-overview-of-the-wordpress-create-block-script\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">bloque creado por el <code>@wordpress\/create-block<\/code>script, sobre el que escrib\u00ed anteriormente<\/a> para incluir un ejemplo de c\u00f3mo hacer el equivalente de un bucle WP_Query en Gutenberg.<\/p>\n<p>Primero necesitamos importar la <code>select()<\/code>funci\u00f3n desde wp-data. Podemos hacer esto haciendo referencia al m\u00f3dulo NPM:<\/p>\n<p><code>import { select } from '@wordpress\/data;<\/code><\/p>\n<p>O usando el <code>wp<\/code>objeto:<\/p>\n<p><code>const { select } = wp.data;<\/code><\/p>\n<p>Seguiremos con las pr\u00e1cticas utilizadas en el bloque creado y usaremos el m\u00f3dulo NPM, y usaremos el <code>@wordpress\/data<\/code>m\u00e9todo.<\/p>\n<p>Aqu\u00ed hay una implementaci\u00f3n b\u00e1sica del equivalente de un bucle WP_Query en Gutenberg.<\/p>\n<p><strong>Im\u00e1genes destacadas<\/strong><\/p>\n<p>Tenga en cuenta que las im\u00e1genes destacadas deben configurarse para las \u00faltimas dos publicaciones para que este ejemplo funcione correctamente.<\/p>\n<pre><code>import { registerBlockType } from '@wordpress\/blocks';\nimport { select, withSelect } from '@wordpress\/data';\nimport { __ } from '@wordpress\/i18n';\n\nregisterBlockType( 'wholesomecode\/wholesome-plugin', {\n    title: __( 'Wholesome Plugin', 'wholesomecode' ),\n    description: __( 'Just an Example Plugin', 'wholesomecode' ),\n    category: 'common',\n    icon: 'smiley',\n\n    edit: withSelect( (select) =&gt; {\n        const posts = select( 'core' ).getEntityRecords( 'postType', 'post', { 'per_page': 2 } );\n        let media = {};\n        posts.forEach( post =&gt; {\n            media[ post.id ] = select('core').getMedia( post.featured_media );\n        });\n        return {\n            posts,\n            media\n        };\n    } )( props =&gt; {\n\n        const { media, posts } = props;\n\n        if (! posts ||! media) {\n            return (&lt;p&gt;{ __( 'Loading...', 'wholesomecode') }&lt;\/p&gt;\n            );\n        }\n\n        return (&lt;ul&gt;\n            { posts.map( (post) =&gt; {\n                    if (media[ post.id ]) {\n                        const imageThumbnailSrc = media[ post.id ].media_details.sizes.thumbnail.source_url;\n                    return (&lt;li&gt;\n                            &lt;img src={ imageThumbnailSrc } \/&gt;\n                            &lt;a href={ post.link }&gt;\n                                { post.title.raw }\n                            &lt;\/a&gt;\n                        &lt;\/li&gt;) }\n                }) }\n            &lt;\/ul&gt;\n        );\n    } ),\n\n    save() {\n        return (&lt;p&gt;\n                { __( 'Wholesome Plugin \u2013 Nothing to see here.', 'wholesomecode') }\n            &lt;\/p&gt;\n        );\n    },\n} );\n<\/code><\/pre>\n<p>Tenga en cuenta el uso de <code>withSelect<\/code>para precargar los datos antes de que se cargue el bloque. Puede <a href=\"https:\/\/developer.wordpress.org\/block-editor\/packages\/packages-data\/#withSelect\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">obtener m\u00e1s informaci\u00f3n sobre withSelect leyendo la documentaci\u00f3n de Gutenberg<\/a>.<\/p>\n<p>El c\u00f3digo anterior genera el siguiente ejemplo (muy b\u00e1sico) de una lista de art\u00edculos y sus miniaturas asociadas en el editor:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-168779-61e7f3032376a.png\" alt=\"El equivalente de WP_Query WordPress Block Editor (Gutenberg) es getEntityRecords\" \/>Ejemplo de Post Loop en Gutenberg.<\/p>\n<h2>Uso de la API REST<\/h2>\n<p>Si desea obtener datos personalizados a trav\u00e9s de la API REST, consulte mi publicaci\u00f3n sobre <a href=\"https:\/\/wholesomecode.ltd\/articles\/using-the-wordpress-block-editor-gutenberg-with-the-rest-api\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">el uso de la API REST con el Editor de bloques de WordPress (Gutenberg)<\/a>.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/wholesomecode.ltd\" class=\"external external_icon\">wholesomecode.ltd<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Si es nuevo en la escritura de complementos para el Editor de bloques de WordPress (Gutenberg), es posible que est\u00e9 un poco confundido sobre c\u00f3mo hacer todas las cosas que hac\u00eda regularmente, como capturar publicaciones con WP_Q&#8230;<\/p>\n","protected":false},"author":1,"featured_media":223674,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[892,716,935,914,840,861],"tags":[1172],"class_list":["post-228389","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-gutenberg-2","category-otro","category-tutoriales","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/228389","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=228389"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/228389\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/223674"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=228389"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=228389"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=228389"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}