{"id":234243,"date":"2023-02-20T18:46:00","date_gmt":"2023-02-20T15:46:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=234243"},"modified":"2022-11-12T01:50:17","modified_gmt":"2022-11-11T22:50:17","slug":"creer-un-bloc-gutenberg-personnalise-partie-10-recuperation-des-publications-et-des-composants-dordre-superieur","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/creer-un-bloc-gutenberg-personnalise-partie-10-recuperation-des-publications-et-des-composants-dordre-superieur\/","title":{"rendered":"Cr\u00e9er un bloc Gutenberg personnalis\u00e9 &#8211; Partie 10\u00a0: R\u00e9cup\u00e9ration des publications et des composants d&rsquo;ordre sup\u00e9rieur"},"content":{"rendered":"\n<p>Dans cette derni\u00e8re partie de la s\u00e9rie de didacticiels sur les blocs personnalis\u00e9s de Gutenberg, nous apprendrons \u00e0 utiliser des composants d&rsquo;ordre sup\u00e9rieur pour utiliser les composants de WordPress afin d&rsquo;effectuer des requ\u00eates pour les publications et d&rsquo;autres informations de base sur WordPress.<\/p>\n<p>Dans la partie pr\u00e9c\u00e9dente, nous avons d\u00e9couvert les blocs dynamiques et nous avons fini par impl\u00e9menter une fonctionnalit\u00e9 permettant de saisir un ID de publication et d&rsquo;utiliser PHP pour r\u00e9cup\u00e9rer dynamiquement la publication et la rendre en mode frontend et aper\u00e7u. Saisir manuellement un identifiant de publication n&rsquo;est ni intuitif ni convivial. Il est pr\u00e9f\u00e9rable de fournir \u00e0 l&rsquo;utilisateur un moyen de s\u00e9lectionner ou de rechercher des publications par titre de publication et de cliquer sur quelque chose pour en choisir une.<\/p>\n<p>Une partie de la r\u00e9solution de ce probl\u00e8me est assez facile; comment interroger les publications \u00e0 partir de la fonction de votre bloc <code>edit<\/code>. Nous avons quelques options pour cela, et la meilleure option consiste \u00e0 utiliser certains des composants dits <a href=\"https:\/\/reactjs.org\/docs\/higher-order-components.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">d&rsquo;ordre sup\u00e9rieur<\/a> de WordPress. Vous pouvez \u00e9galement utiliser les m\u00e9thodes de navigateur Javascript pour effectuer un appel AJAX vers l&rsquo;API WordPress REST en utilisant par exemple <code>[fetch](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Fetch_API)<\/code>ou axios. WordPress fournit en fait sa propre version de <code>fetch<\/code>: <code>apiFetch()<\/code>.<\/p>\n<p>L&rsquo;autre partie de la r\u00e9solution de cela d\u00e9pend un peu de vous; qui est de savoir comment pr\u00e9senter la liste ou le choix dans notre bloc. Comment allez-vous pr\u00e9senter la liste des publications parmi lesquelles choisir\u00a0? Dans une s\u00e9lection, une liste de cases \u00e0 cocher ou de boutons radio\u00a0? Ou vous souhaitez offrir la possibilit\u00e9 de rechercher, et ainsi mettre en place une solution de saisie semi-automatique ou une solution de filtrage? Devriez-vous autoriser la s\u00e9lection de plusieurs messages ou d&rsquo;un seul\u00a0? Habituellement, vous pouvez r\u00e9soudre ce probl\u00e8me en utilisant diff\u00e9rents composants WordPress, mais vous devez d\u00e9cider quelle solution vous souhaitez mettre en \u0153uvre.<\/p>\n<p>Apprenons d&rsquo;abord un peu les composants d&rsquo;ordre sup\u00e9rieur et le module de donn\u00e9es WordPress, avant de voir comment nous pouvons effectuer des requ\u00eates de publication dans notre bloc.<\/p>\n<h2>Module WordPress Core Data et composants d&rsquo;ordre sup\u00e9rieur<\/h2>\n<p>Lorsque vous travaillez avec React, vous devrez souvent transmettre l&rsquo;\u00e9tat vers le bas aux composants enfants ou vers le haut \u00e0 un composant parent commun afin que tous les autres composants enfants y aient acc\u00e8s. Une solution pour r\u00e9soudre le probl\u00e8me de la centralisation de l&rsquo;\u00e9tat d&rsquo;une application consiste \u00e0 utiliser <a href=\"https:\/\/redux.js.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Redux<\/a>. Avec Redux, vous pouvez cr\u00e9er des magasins, qui sont des objets contenant l&rsquo;\u00e9tat et les informations d&rsquo;une application.<\/p>\n<p>Le <a href=\"https:\/\/developer.wordpress.org\/block-editor\/packages\/packages-data\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">module WordPress Data<\/a> est un hub de diff\u00e9rents magasins et fournit des fonctions de gestion des donn\u00e9es entre diff\u00e9rents modules. Il est construit sur Redux &#8211; mais ne le confondez pas avec un Redux pour WordPress, car il existe de nombreuses diff\u00e9rences. Vous pouvez enregistrer vos propres magasins dans WordPress, ou peut-\u00eatre plus important encore, acc\u00e9der aux magasins enregistr\u00e9s de WordPress.<\/p>\n<p>Voici un aper\u00e7u des <a href=\"https:\/\/developer.wordpress.org\/block-editor\/data\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">magasins disponibles<\/a> dans le module de donn\u00e9es WordPress (cela changera probablement avec le temps). Toutes les boutiques WordPress sont contenues dans le <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/tree\/master\/packages\/core-data\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">module Core Data<\/a>. Par exemple, il existe des magasins contenant les donn\u00e9es de l&rsquo;\u00e9diteur (<code>core\/editor<\/code>), les avis (<code>core\/notices<\/code>), les donn\u00e9es de bloc (<code>core\/blocks<\/code>), les informations sur la fen\u00eatre d&rsquo;affichage (<code>core\/viewport<\/code>), et enfin et surtout le magasin principal lui-m\u00eame &#8211; <code>core<\/code>.<\/p>\n<p>Pour acc\u00e9der aux donn\u00e9es des magasins, vous devrez utiliser des s\u00e9lecteurs. WordPress a un s\u00e9lecteur dans le <code>wp.data<\/code>package ; <code>[select](https:\/\/developer.wordpress.org\/block-editor\/packages\/packages-data\/#select)()<\/code>. Vous pouvez \u00e9galement manipuler les magasins avec <code>dispatch<\/code>, mais cela n&rsquo;est pas couvert par cette s\u00e9rie de tutoriels. Vous pouvez en fait tr\u00e8s facilement essayer le s\u00e9lecteur vous-m\u00eame pour voir ce qui est disponible dans les magasins WordPress.<\/p>\n<h3>Essayer le s\u00e9lecteur<\/h3>\n<p>Ouvrez l&rsquo;\u00e9diteur Gutenberg dans Chrome et ouvrez l&rsquo;outil de d\u00e9bogage de la console. Tapez:<\/p>\n<pre><code>wp.data.select('core')<\/code><\/pre>\n<p>Et appuyez sur Entr\u00e9e. Vous devriez obtenir un objet en r\u00e9ponse avec tous les s\u00e9lecteurs (fonctions) que vous pouvez utiliser. Comme exemples, vous trouverez des fonctions telles que <code>getMedia<\/code>, <code>getTaxonomy<\/code>, <code>getAuthors<\/code>, etc. Celui que nous utiliserons pour interroger les messages est \u00e9galement l\u00e0 mais n&rsquo;a pas de nom intuitif ; \u00e7a s&rsquo;appelle <code>getEntityRecords<\/code>. Pour le moment, certaines de ces fonctions sont <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/tree\/master\/packages\/core-data#selectors\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">document\u00e9es<\/a>, mais la plupart ne le sont malheureusement pas.<\/p>\n<p>Essayez \u00e9galement d&rsquo;autres magasins que <code>core<\/code>, par exemple :<\/p>\n<pre><code>wp.data.select('core\/editor').getBlocks()<\/code><\/pre>\n<p>Cela renvoie toutes les informations sur tous les blocs actuellement dans votre message. Vous pouvez jouer avec cela dans le d\u00e9bogueur de la console Chrome et essayer d&rsquo;appeler certaines fonctions pour voir ce que vous obtenez en r\u00e9ponse. Certains n\u00e9cessitent des param\u00e8tres et d&rsquo;autres non.<\/p>\n<p>Pour utiliser les s\u00e9lecteurs et acc\u00e9der aux magasins, nous devons les utiliser dans des composants d&rsquo;ordre sup\u00e9rieur. Les composants d&rsquo;ordre sup\u00e9rieur sont simplement un mod\u00e8le de faire quelque chose dans React. Nous passons un composant \u00e0 une fonction (ou un composant) qui pourrait ajouter des accessoires, puis renvoyons un nouveau composant.<\/p>\n<p>\u00c0 l&rsquo;int\u00e9rieur du module WordPress Data, nous trouvons <code>[withSelect](https:\/\/developer.wordpress.org\/block-editor\/packages\/packages-data\/#withSelect)<\/code>; un composant d&rsquo;ordre sup\u00e9rieur qui peut \u00eatre utilis\u00e9 pour injecter des accessoires \u00e0 l&rsquo;aide de s\u00e9lecteurs enregistr\u00e9s. Autrement dit; \u00e0 l&rsquo; int\u00e9rieur <code>withSelect<\/code>, nous avons acc\u00e8s au s\u00e9lecteur <code>select()<\/code>et pouvons l&rsquo;utiliser pour effectuer des appels. Les r\u00e9sultats du s\u00e9lecteur seront des accessoires du composant auquel nous passons <code>withSelect<\/code>. Si vous avez besoin de combiner plusieurs composants d&rsquo;ordre sup\u00e9rieur, le module de donn\u00e9es WordPress offre la <code>compose<\/code>fonction, mais cela sort du cadre de ce didacticiel. Nous n&rsquo;utiliserons qu&rsquo;un seul composant d&rsquo;ordre sup\u00e9rieur\u00a0; <code>withSelect<\/code>.<\/p>\n<p>Cela a \u00e9t\u00e9 beaucoup de th\u00e9orie, alors commen\u00e7ons \u00e0 regarder du code et des exemples pratiques.<\/p>\n<h2>R\u00e9cup\u00e9ration des publications \u00e0 l&rsquo;aide de withSelect, select et getEntityRecords<\/h2>\n<p>Pour r\u00e9sumer ce qui pr\u00e9c\u00e8de, nous devons configurer le composant d&rsquo;ordre sup\u00e9rieur <code>withSelect<\/code>pour notre bloc. \u00c0 l&rsquo;int\u00e9rieur de celui-ci, nous pouvons utiliser des s\u00e9lecteurs pour acc\u00e9der aux magasins WordPress, qui seront des accessoires pour le composant que nous passons \u00e0 <code>withSelect<\/code>. Nous utiliserons le <code>core<\/code>magasin et le s\u00e9lecteur <code>getEntityRecords<\/code>pour interroger les publications.<\/p>\n<p>La fonction <code>getEntityRecords<\/code>n&rsquo;est malheureusement <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/tree\/master\/packages\/core-data#getEntityRecords\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pas tr\u00e8s document\u00e9e<\/a> pour le moment. Mais j&rsquo;ai appris que nous pouvons passer <code>postType<\/code>comme premier param\u00e8tre (type d&rsquo;entit\u00e9) puis le type de publication comme second param\u00e8tre (par exemple &lsquo; <code>post<\/code>&lsquo; ou &lsquo; <code>page<\/code>&lsquo;). Le troisi\u00e8me param\u00e8tre est facultatif et peut \u00eatre un objet avec des arguments de requ\u00eate. Nous verrons le troisi\u00e8me param\u00e8tre plus tard.<\/p>\n<p>Si vous avez suivi cette s\u00e9rie de didacticiels de la partie pr\u00e9c\u00e9dente, vous auriez un bloc personnalis\u00e9 qui accepte un ID de publication saisi manuellement dans une entr\u00e9e de texte. Le bloc utilise PHP pour afficher dynamiquement la publication en frontend (et en mode aper\u00e7u). Supprimons l&rsquo;obligation de saisir manuellement l&rsquo;ID de publication et rempla\u00e7ons-le par quelque chose de plus intuitif. Comme mentionn\u00e9 pr\u00e9c\u00e9demment, vous devez d\u00e9cider vous-m\u00eame comment pr\u00e9senter la liste des publications et la meilleure fa\u00e7on de laisser l&rsquo;utilisateur choisir une publication. Pour rester simple, nous ajouterons une s\u00e9lection de tous les titres de publication parmi lesquels choisir.<\/p>\n<h3>Codant le<code>withSelect<\/code><\/h3>\n<p>Commen\u00e7ons \u00e0 coder cela. Nous devons d&rsquo;abord d\u00e9structurer ce dont nous avons besoin du paquet de donn\u00e9es\u00a0;<\/p>\n<pre><code>const { withSelect, select } = wp.data;<\/code><\/pre>\n<p>Ensuite, nous utilisons la fonction <code>withSelect<\/code>de notre bloc <code>edit<\/code>et transmettons notre composant d&rsquo;\u00e9dition\u00a0; <code>FirstBlockEdit<\/code>. \u00c0 l&rsquo; int\u00e9rieur, <code>withSelect<\/code>nous d\u00e9structurons <code>select<\/code>en tant que param\u00e8tre et utilisons le s\u00e9lecteur <code>select()<\/code>pour interroger les publications avec <code>getEntityRecords<\/code>. Nous renvoyons un objet avec une propri\u00e9t\u00e9 que nous appelons et <code>posts<\/code>qui contient le r\u00e9sultat de l&rsquo; <code>select()<\/code>appel.<\/p>\n<pre><code>...\nedit: withSelect(select =&gt; {\n    return {\n        posts: select('core').getEntityRecords('postType', 'post')\n    }\n})(FirstBlockEdit),\nsave:() =&gt; { return null }\n...<\/code><\/pre>\n<p>Avec le code au-dessus de notre composant, <code>FirstBlockEdit<\/code>, aura d\u00e9sormais un nouvel accessoire\u00a0; <code>posts<\/code>. Tout ce que nous renvoyons \u00e0 l&rsquo;int\u00e9rieur du <code>withSelect<\/code>composant d&rsquo;ordre sup\u00e9rieur sera accessible en tant qu&rsquo;accessoires au composant que nous passons (dans la parenth\u00e8se \u00e0 la toute fin).<\/p>\n<h3>Gestion des publications depuis le s\u00e9lecteur<\/h3>\n<p>Nous pouvons maintenant entrer dans notre composant <code>FirstBlockEdit<\/code>et jeter un \u0153il au nouveau fichier <code>props.posts<\/code>. \u00c9tant donn\u00e9 que notre composant est un composant bas\u00e9 sur une classe, nous devons faire r\u00e9f\u00e9rence aux accessoires avec <code>this<\/code>. D\u00e9connectons-nous de la console \u00e0 l&rsquo;int\u00e9rieur de la <code>render()<\/code>fonction dans<code>FirstBlockEdit<\/code>\u00a0:<\/p>\n<pre><code>render() {\n    const { attributes, setAttributes } = this.props;\n    console.log(this.props.posts);\n    ...\n}<\/code><\/pre>\n<p>Gardez un \u0153il sur le d\u00e9bogueur de votre console. Vous remarquerez peut-\u00eatre que cela se connectera deux fois ; d&rsquo; abord <code>null<\/code>, puis quelque temps plus tard, il enregistre un tableau de messages. En effet, l&rsquo;interrogation des publications se fait de mani\u00e8re asynchrone. Notre composant est d&rsquo;abord rendu avant la r\u00e9ponse, moment auquel <code>props.posts<\/code>est <code>null<\/code>. Une fois que nous obtenons une r\u00e9ponse, notre composant est \u00e0 nouveau rendu avec l&rsquo;accessoire rempli. Vous devez toujours vous rappeler de tenir compte de ce petit laps de temps sans donn\u00e9es dans votre code.<\/p>\n<h3>Ajout d&rsquo;un select pour afficher les posts<\/h3>\n<p>Pr\u00e9parons-nous \u00e0 remplir une s\u00e9lection avec les articles renvoy\u00e9s et pour cela, nous utiliserons le composant WordPress <code>SelectControl<\/code>. Le composant <code>SelectControl<\/code>accepte un tableau de choix o\u00f9 chaque choix est un objet avec les propri\u00e9t\u00e9s <code>value<\/code>et <code>label<\/code>.<\/p>\n<p>Si vous jetez un coup d&rsquo;\u0153il \u00e0 la (seconde) r\u00e9ponse enregistr\u00e9e dans la console, vous pouvez voir que nous obtenons un tableau d&rsquo;objets de publication. Chaque article contient la plupart des informations de l&rsquo;article, mais pour les choix dans une s\u00e9lection, nous ne sommes int\u00e9ress\u00e9s que par l&rsquo;ID de l&rsquo;article en tant que valeur et le titre de l&rsquo;article en tant qu&rsquo;\u00e9tiquette. Nous allons donc parcourir la <code>posts<\/code>prop et remplir une variable de tableau que nous transmettrons \u00e0 <code>SelectControl<\/code>. N&rsquo;oubliez pas de g\u00e9rer le petit laps de temps o\u00f9 se trouve l&rsquo; <code>posts<\/code>accessoire <code>null<\/code>. Dans ce cas, nous remplirons le tableau de choix avec une option portant l&rsquo;\u00e9tiquette &quot;Loading\u2026&quot;.<\/p>\n<pre><code>let choices = [];\nif (this.props.posts) {\n    choices.push({ value: 0, label: __('Select a post', 'awhitepixel') });\n    this.props.posts.forEach(post =&gt; {\n        choices.push({ value: post.id, label: post.title.rendered });\n    });\n} else {\n    choices.push({ value: 0, label: __('Loading...', 'awhitepixel') })\n}<\/code><\/pre>\n<p>Notez que nous devons faire r\u00e9f\u00e9rence au titre du message en tant que <code>post.title.rendered<\/code>. Vous pouvez regarder par vous-m\u00eame dans la console connect\u00e9e <code>posts<\/code>et voir comment les informations sont structur\u00e9es pour chaque publication.<\/p>\n<p>Apr\u00e8s cela, nous devons simplement ajouter un <code>SelectControl<\/code>partout o\u00f9 nous le voulons. Il peut \u00eatre \u00e0 l&rsquo;int\u00e9rieur du bloc lui-m\u00eame (de pr\u00e9f\u00e9rence dans le code pour le mode d&rsquo;\u00e9dition), ou \u00e0 l&rsquo;int\u00e9rieur de l&rsquo;inspecteur.<\/p>\n<pre><code>&lt;SelectControl\n    label={__('Selected Post', 'awhitepixel')}\n    options={choices}\n    value={attributes.selectedPostId}\n    onChange={(newval) =&gt; setAttributes({ selectedPostId: parseInt(newval) })}\n\/&gt;<\/code><\/pre>\n<p>Nous d\u00e9finissons le <code>SelectControl<\/code>pour faire r\u00e9f\u00e9rence \u00e0 l&rsquo;attribut <code>selectedPostId<\/code>que nous avons d\u00e9fini \u00e0 l&rsquo;\u00e9tape pr\u00e9c\u00e9dente. Nous d\u00e9finissons la valeur enregistr\u00e9e dans la prop <code>value<\/code>et g\u00e9rons sa mise \u00e0 jour dans la <code>onChange<\/code>prop &#8211; comme nous l&rsquo;avons fait plusieurs fois auparavant. Nous nous assurons qu&rsquo;un nombre est stock\u00e9 en utilisant <code>parseInt()<\/code>parce que le <code>selectedPostId<\/code>a le type <code>number<\/code>. Et nous passons le tableau de choix g\u00e9n\u00e9r\u00e9 dans la prop <code>options<\/code>.<\/p>\n<p>C&rsquo;est vraiment tout! Si vous avez suivi le code de l&rsquo;\u00e9tape pr\u00e9c\u00e9dente, vous devriez d\u00e9j\u00e0 avoir un code qui lit l&rsquo;ID de publication enregistr\u00e9 et l&rsquo;affiche\u00a0!<\/p>\n<p>Bien s\u00fbr, je vous recommande d&rsquo;impl\u00e9menter la liste et le choix des publications diff\u00e9remment d&rsquo;une simple s\u00e9lection. Ce n&rsquo;est pas une solution jolie ou conviviale, en particulier pour les sites avec beaucoup de publications. En parlant de nombre de posts, avez-vous remarqu\u00e9 que le s\u00e9lecteur getEntityRecords ne renvoie qu&rsquo;un maximum des 10 derniers posts? C&rsquo;est le comportement par d\u00e9faut de getEntityRecords, mais nous pouvons modifier la requ\u00eate post en passant un troisi\u00e8me param\u00e8tre.<\/p>\n<h3>Modifier la requ\u00eate pour getEntityRecords<\/h3>\n<p>En passant un objet comme troisi\u00e8me param\u00e8tre \u00e0 getEntityRecords, nous pouvons modifier la requ\u00eate post. Comme mentionn\u00e9 pr\u00e9c\u00e9demment, malheureusement, la documentation pour <code>getEntityRecords<\/code>est manquante. Mais en lisant partout sur le Web, j&rsquo;ai rassembl\u00e9 une liste d&rsquo;arguments de requ\u00eate possibles;<\/p>\n<ul>\n<li><code>per_page<\/code>: d\u00e9finissez un nombre pour limiter le nombre de publications. D\u00e9fini sur <code>-1<\/code>pour r\u00e9cup\u00e9rer le maximum de 100. Par d\u00e9faut <code>10<\/code>.<\/li>\n<li><code>exclude<\/code>: Exclure certains articles de la requ\u00eate. D\u00e9finissez un ID de publication ou un tableau de nombres pour plusieurs ID de publication.<\/li>\n<li><code>parent_exclude<\/code>: exclure certains messages parents. D\u00e9fini sur un ID de publication ou sur un tableau de plusieurs ID de publication.<\/li>\n<li><code>orderby<\/code>: D\u00e9cidez de l&rsquo;ordre des publications. Vous pouvez tr\u00e8s probablement utiliser les m\u00eames param\u00e8tres que dans <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_query\/#order-orderby-parameters\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">le orderby de WP_Query<\/a>. Peut \u00eatre par exemple &lsquo; <code>menu_order<\/code>&lsquo;.<\/li>\n<li><code>order<\/code>: Soit <code>'asc'<\/code>ou &lsquo; <code>desc'<\/code>pour un ordre croissant ou d\u00e9croissant.<\/li>\n<li><code>status<\/code>: Filtrer par statut de publication. Il peut s&rsquo;agir d&rsquo;une cha\u00eene, d&rsquo;une cha\u00eene avec plusieurs statuts s\u00e9par\u00e9s par une virgule ou d&rsquo;un tableau de cha\u00eenes de statut. Par exemple <code>['publish', 'draft']<\/code>, pour interroger les messages publi\u00e9s et r\u00e9dig\u00e9s.<\/li>\n<li><code>categories<\/code>: filtrer les messages par certaines cat\u00e9gories. Fournissez un ID de cat\u00e9gorie ou un tableau d&rsquo;ID de cat\u00e9gorie. Je pense que cela ne fonctionne que pour les cat\u00e9gories de publication et non pour les autres taxonomies personnalis\u00e9es.<\/li>\n<li><code>tags<\/code>: Filtrer les messages par certaines balises. Fournissez un ID de balise ou un tableau d&rsquo;ID de balises. Fonctionne uniquement pour les balises de publication et non pour les autres taxonomies personnalis\u00e9es.<\/li>\n<li><code>search<\/code>: Ajoutez une requ\u00eate de recherche (cha\u00eene).<\/li>\n<\/ul>\n<p>Remarque\u00a0: Cette liste n&rsquo;est pas exhaustive et est \u00e9galement susceptible d&rsquo;\u00eatre modifi\u00e9e\u00a0!<\/p>\n<p>Modifions notre requ\u00eate. Nous voulons faire deux choses; nous voulons d&rsquo;abord r\u00e9cup\u00e9rer tous les messages et pas seulement les 10 derniers. Pour ce faire, nous fournissons <code>-1<\/code>\u00e0 <code>per_page<\/code>. Deuxi\u00e8mement, nous voulons exclure la publication actuelle de la liste des publications en fournissant l&rsquo;ID de publication actuelle \u00e0 <code>exclude<\/code>. Cela n&rsquo;a souvent aucun sens d&rsquo;afficher un raccourci de publication ou un aper\u00e7u de la publication actuelle elle-m\u00eame.<\/p>\n<p>Tu pourrais penser; attends, comment obtient-on l&rsquo;identifiant du poste actuel\u00a0? N&rsquo;oubliez pas que nous, dans le composant d&rsquo;ordre sup\u00e9rieur <code>withSelect<\/code>et avec le <code>select<\/code>s\u00e9lecteur, pouvons acc\u00e9der \u00e0 tous les magasins de donn\u00e9es de base de WordPress. L&rsquo;ID de publication actuel est une chose naturelle \u00e0 stocker dans l&rsquo;un des principaux magasins WordPress. \u00c0 l&rsquo; int\u00e9rieur <code>core\/editor<\/code>, nous trouvons la fonction <code>getCurrentPostId()<\/code>.<\/p>\n<p>Modifions le <code>withSelect<\/code>retour \u00e0 quelque chose comme ceci\u00a0:<\/p>\n<pre><code>edit: withSelect(select =&gt; {\n    const currentPostId = select('core\/editor').getCurrentPostId();\n    const query = {\n        per_page: -1,\n        exclude: currentPostId\n    }\n    return {\n        posts: select('core').getEntityRecords('postType', 'post', query)\n    }\n})(FirstBlockEdit),<\/code><\/pre>\n<p>Le changement ci-dessus est assez explicite. Nous g\u00e9n\u00e9rons un objet de requ\u00eate avec les propri\u00e9t\u00e9s <code>per_page<\/code>et <code>exclude<\/code>et le transmettons comme troisi\u00e8me param\u00e8tre \u00e0 <code>getEntityRecords()<\/code>. Maintenant, notre <code>props.posts<\/code>int\u00e9rieur du <code>FirstBlockEdit<\/code>composant doit r\u00e9pertorier tous les messages mais exclure le message actuel.<\/p>\n<h2>Conclusion<\/h2>\n<p>Cet article conclut la s\u00e9rie de didacticiels Comment cr\u00e9er des blocs Gutenberg personnalis\u00e9s. La s\u00e9rie \u00e9tait destin\u00e9e \u00e0 passer en revue les bases du d\u00e9veloppement de vos propres blocs personnalis\u00e9s, vous fournissant un point de d\u00e9part pour d\u00e9velopper vos propres blocs plus complexes. Gardez certainement un \u0153il sur d&rsquo;autres <a href=\"https:\/\/awhitepixel.com\/blog\/category\/gutenberg\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tutoriels li\u00e9s \u00e0 Gutenberg ici<\/a>. Peut-\u00eatre trouverez-vous un tutoriel expliquant plus sp\u00e9cifiquement quelque chose que vous vouliez faire vous-m\u00eame !<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans cette partie du didacticiel sur les blocs personnalis\u00e9s de Gutenberg, nous apprendrons \u00e0 utiliser des composants d&rsquo;ordre sup\u00e9rieur pour utiliser les composants de WordPress pour effectuer des requ\u00eates de publication.<\/p>\n","protected":false},"author":1,"featured_media":152565,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[915,893,893,717,717,832,936,936,915,1110,811,811,832,841,841,862,862],"tags":[1167],"class_list":{"0":"post-234243","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-autre","8":"category-code-2","10":"category-developpeur","12":"category-guide-pour-les-debutants","13":"category-gutenberg-3","16":"category-n-a","17":"category-plugins-2","20":"category-tutoriels","22":"category-wordpress-3","24":"tag-affiai-fr"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234243","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=234243"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234243\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/152565"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=234243"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=234243"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=234243"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}