{"id":228699,"date":"2022-10-18T18:34:00","date_gmt":"2022-10-18T15:34:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228699"},"modified":"2022-11-09T03:54:50","modified_gmt":"2022-11-09T00:54:50","slug":"wp_query-wordpress-block-editor-gutenberg-lequivalent-est-getentityrecords","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/wp_query-wordpress-block-editor-gutenberg-lequivalent-est-getentityrecords\/","title":{"rendered":"WP_Query WordPress Block Editor (Gutenberg) L&rsquo;\u00e9quivalent est getEntityRecords"},"content":{"rendered":"\n<p>Si vous d\u00e9butez dans l&rsquo;\u00e9criture de plugins pour l&rsquo;\u00e9diteur de blocs WordPress (Gutenberg), vous ne savez peut-\u00eatre pas comment faire toutes les choses que vous faisiez r\u00e9guli\u00e8rement, comme saisir des messages avec WP_Query.<\/p>\n<p>Vous serez tr\u00e8s heureux de savoir que vous pouvez toujours faire \u00e0 peu pr\u00e8s tout ce que vous faisiez avec WP_Query en utilisant <code>getEntityRecords<\/code>.<\/p>\n<p>Par exemple, nous pouvons r\u00e9cup\u00e9rer les derniers messages en utilisant le bout de code suivant\u00a0:<\/p>\n<p>wp.data.select( &lsquo;core&rsquo; ).getEntityRecords( &lsquo;postType&rsquo;, &lsquo;posts&rsquo; );<\/p>\n<p>Vous pouvez \u00e9galement interroger les Custom Post Types (CPT) de la m\u00eame mani\u00e8re, tant que vous avez <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\">rendu votre CPT accessible via l&rsquo;API REST<\/a>.<\/p>\n<p>wp.data.select( &lsquo;core&rsquo; ).getEntityRecords( &lsquo;postType&rsquo;, &lsquo;my_custom_post_type&rsquo; );<\/p>\n<p>Nous pouvons m\u00eame transmettre certains arguments qui peuvent sembler familiers\u00a0:<\/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>Vous pouvez trouver la liste d\u00e9finitive des arguments que vous pouvez transmettre \u00e0 la fonction ici dans le <a href=\"https:\/\/developer.wordpress.org\/rest-api\/reference\/posts\/#arguments\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">guide du d\u00e9veloppeur Gutenberg<\/a>.<\/p>\n<h2>Essayez-le dans la console<\/h2>\n<p>Si vous \u00eates connect\u00e9 \u00e0 un site et que vous visualisez le frontal, vous pouvez tester \u00e0 peu pr\u00e8s n&rsquo;importe quelle commande Gutenberg. WordPress les stocke tous dans l&rsquo; <code>wp<\/code>objet pratique.<\/p>\n<p>En tapant la commande ci-dessus dans la console sur l&rsquo;un de mes sites de d\u00e9veloppement, j&rsquo;obtiens ce qui suit\u00a0:<\/p>\n<p>Utilisation de getEntityRecords pour r\u00e9cup\u00e9rer des publications dans la console<\/p>\n<p>La capture d&rsquo;\u00e9cran ci-dessus montre la console renvoyant deux objets de publication WordPress dans le JavaScript, qui sont des brouillons de publications (selon les param\u00e8tres que j&rsquo;ai pass\u00e9s dans <code>getEntityRecords<\/code>).<\/p>\n<h2>L&rsquo;objet de publication JavaScript<\/h2>\n<p>En explorant l&rsquo;objet post plus loin dans la console, vous pouvez voir qu&rsquo;il y a beaucoup de propri\u00e9t\u00e9s renvoy\u00e9es auxquelles vous pouvez acc\u00e9der.<\/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>Message Meta \u00e0 Gutenberg<\/h2>\n<p>Une chose que vous remarquerez \u00e0 partir de l&rsquo;objet de publication que nous avons explor\u00e9 ci-dessus, c&rsquo;est que toute la m\u00e9ta de publication est contenue dans l&rsquo;objet de la <code>meta<\/code>propri\u00e9t\u00e9. Cela nous \u00e9vite de faire l&rsquo;\u00e9quivalent de <code>get_post_meta()<\/code>pour cet objet dans Gutenberg.<\/p>\n<p>Cependant, si vous souhaitez obtenir la m\u00e9ta de la publication pour un seul objet de publication, <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\">consultez l&rsquo; <code>get_post_meta<\/code>\u00e9quivalent dans l&rsquo;article de Gutenberg<\/a>.<\/p>\n<h2>Obtenir les d\u00e9tails de l&rsquo;image \u00e0 Gutemberg<\/h2>\n<p>L&rsquo;objet de publication vous permet d&rsquo;obtenir l&rsquo;ID de m\u00e9dia en vedette, qui est stock\u00e9 dans la <code>featured_media<\/code>propri\u00e9t\u00e9.<\/p>\n<p>Vous pouvez utiliser <code>getMedia<\/code>(l&rsquo; <a href=\"https:\/\/wholesomecode.ltd\/blog\/wp_get_attachment_image-gutenberg-equivalent-getmeta\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00e9quivalent WordPress Gutenberg de<code>wp_get_attachment_image<\/code><\/a>) pour obtenir les propri\u00e9t\u00e9s de cette pi\u00e8ce jointe.<\/p>\n<h2>La boucle du Gutenberg Post<\/h2>\n<p>D\u00e9veloppons le <a href=\"https:\/\/wholesomecode.ltd\/articles\/an-overview-of-the-wordpress-create-block-script\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">bloc cr\u00e9\u00e9 par le <code>@wordpress\/create-block<\/code>script, sur lequel j&rsquo;ai \u00e9crit pr\u00e9c\u00e9demment<\/a> pour inclure un exemple de la fa\u00e7on de cr\u00e9er l&rsquo;\u00e9quivalent d&rsquo;une boucle WP_Query dans Gutenberg.<\/p>\n<p>Nous devons d&rsquo;abord importer la <code>select()<\/code>fonction \u00e0 partir de wp-data. Nous pouvons le faire soit en r\u00e9f\u00e9ren\u00e7ant le module NPM\u00a0:<\/p>\n<p><code>import { select } from '@wordpress\/data;<\/code><\/p>\n<p>Soit en utilisant l&rsquo; <code>wp<\/code>objet :<\/p>\n<p><code>const { select } = wp.data;<\/code><\/p>\n<p>Nous allons nous en tenir aux pratiques utilis\u00e9es dans le bloc cr\u00e9\u00e9 et utiliser le module NPM, et utiliser la <code>@wordpress\/data<\/code>m\u00e9thode.<\/p>\n<p>Voici une impl\u00e9mentation de base de l&rsquo;\u00e9quivalent d&rsquo;une boucle WP_Query dans Gutenberg.<\/p>\n<p><strong>Images en vedette<\/strong><\/p>\n<p>Notez que les images en vedette doivent \u00eatre d\u00e9finies pour les deux derniers messages pour que cet exemple fonctionne correctement.<\/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>Notez l&rsquo;utilisation de <code>withSelect<\/code>pour pr\u00e9charger les donn\u00e9es avant le chargement du bloc. Vous pouvez <a href=\"https:\/\/developer.wordpress.org\/block-editor\/packages\/packages-data\/#withSelect\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">en savoir plus sur withSelect en lisant la documentation Gutenberg<\/a>.<\/p>\n<p>Le code ci-dessus g\u00e9n\u00e8re l&rsquo;exemple suivant (tr\u00e8s basique) d&rsquo;une liste d&rsquo;articles et de leurs vignettes associ\u00e9es dans l&rsquo;\u00e9diteur\u00a0:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-168779-61e7f3032376a.png\" alt=\"WP_Query WordPress Block Editor (Gutenberg) L&#039;\u00e9quivalent est getEntityRecords\" \/>Exemple Post Loop \u00e0 Gutenberg.<\/p>\n<h2>Utilisation de l&rsquo;API REST<\/h2>\n<p>Si vous souhaitez obtenir des donn\u00e9es personnalis\u00e9es via l&rsquo;API REST, consultez mon article sur <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\">l&rsquo;utilisation de l&rsquo;API REST avec l&rsquo;\u00e9diteur de blocs WordPress (Gutenberg)<\/a>.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <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 vous d\u00e9butez dans l&rsquo;\u00e9criture de plugins pour l&rsquo;\u00e9diteur de blocs WordPress (Gutenberg), vous ne savez peut-\u00eatre pas comment faire toutes les choses que vous faisiez r\u00e9guli\u00e8rement, comme saisir des messages avec 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":[915,893,717,936,841,862],"tags":[1167],"class_list":["post-228699","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-autre","category-code-2","category-developpeur","category-gutenberg-3","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/228699","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=228699"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/228699\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/223674"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=228699"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=228699"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=228699"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}