﻿{"id":16381,"date":"2026-06-10T10:00:00","date_gmt":"2026-06-10T08:00:00","guid":{"rendered":"https:\/\/www.sigterritoires.fr\/?p=16381"},"modified":"2026-06-10T10:30:41","modified_gmt":"2026-06-10T08:30:41","slug":"develop-qgis-plugin-add-button-dialog","status":"publish","type":"post","link":"https:\/\/www.sigterritoires.fr\/index.php\/en\/develop-qgis-plugin-add-button-dialog\/","title":{"rendered":"[EN]Developing a QGIS Plugin: Adding a Button and a Dialog"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">Adding a button to the QGIS interface is often the first concrete step when developing a plugin. It is what turns a simple Python script into a tool that can actually be used by end users.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this third article of the tutorial, we will see how to add a button and display a dialog window in a QGIS plugin, based on the code generated by Plugin Builder. We will take the time to understand the essential elements: the <code>initGui()<\/code> method, actions (<code>QAction<\/code>), and how a dialog is triggered.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This tutorial is aimed at beginners in QGIS plugin development who want to understand how to interact with the QGIS interface before moving on to more advanced business logic.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter ez-toc-light-blue ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Contenu <\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/develop-qgis-plugin-add-button-dialog\/#Adding_a_Button_and_Displaying_a_Dialog_in_QGIS\" >Adding a Button and Displaying a Dialog in QGIS<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/develop-qgis-plugin-add-button-dialog\/#Reminder_the_Plugin_Generated_by_Plugin_Builder\" >Reminder: the Plugin Generated by Plugin Builder<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/develop-qgis-plugin-add-button-dialog\/#The_Main_Plugin_File\" >The Main Plugin File<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/develop-qgis-plugin-add-button-dialog\/#The_initGui_Method_the_Visual_Entry_Point\" >The initGui() Method: the Visual Entry Point<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/develop-qgis-plugin-add-button-dialog\/#The_run_Method_When_the_Button_Is_Clicked\" >The run() Method: When the Button Is Clicked<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/develop-qgis-plugin-add-button-dialog\/#%F0%9F%93%A6_What_a_Button_Really_Does_in_QGIS\" >&#x1f4e6; What a Button Really Does in QGIS<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/develop-qgis-plugin-add-button-dialog\/#Understanding_the_Dialog_Window\" >Understanding the Dialog Window<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/develop-qgis-plugin-add-button-dialog\/#Modifying_the_Dialog_Text\" >Modifying the Dialog Text<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/develop-qgis-plugin-add-button-dialog\/#Testing_and_Reloading_the_Plugin\" >Testing and Reloading the Plugin<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/develop-qgis-plugin-add-button-dialog\/#Common_Errors_at_This_Stage\" >Common Errors at This Stage<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/develop-qgis-plugin-add-button-dialog\/#What_You_Have_Learned\" >What You Have Learned<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/develop-qgis-plugin-add-button-dialog\/#Whats_Next\" >What\u2019s Next?<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Adding_a_Button_and_Displaying_a_Dialog_in_QGIS\"><\/span>Adding a Button and Displaying a Dialog in QGIS<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In the first two articles, we laid the foundations: understanding what a QGIS plugin is and creating an empty plugin using Plugin Builder. Now it\u2019s time to give our plugin a visible behavior.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this article, you will learn how to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>add a button to the QGIS interface,<\/li>\n\n\n\n<li>understand the code generated by Plugin Builder,<\/li>\n\n\n\n<li>display a simple dialog window.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The goal is not yet to build something complex, but to understand the fundamental mechanism behind every QGIS plugin.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Reminder_the_Plugin_Generated_by_Plugin_Builder\"><\/span>Reminder: the Plugin Generated by Plugin Builder<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When we chose the <strong>\u201cTool button with dialog\u201d<\/strong> template, Plugin Builder already prepared many things for us:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>a toolbar button,<\/li>\n\n\n\n<li>a menu entry in QGIS,<\/li>\n\n\n\n<li>an associated graphical dialog.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Even though everything already works, it is essential to understand how all these elements are connected.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"The_Main_Plugin_File\"><\/span>The Main Plugin File<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Open the main Python file of your plugin (for example <code>mon_premier_plugin.py<\/code>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You will find a main class named after your plugin. This class controls the entire behavior of the plugin.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class MonPremierPlugin:\n    def __init__(self, iface):\n        self.iface = iface\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">&#x1f449; <code>iface<\/code> is the object that allows the plugin to interact with QGIS (menus, layers, messages, etc.).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"The_initGui_Method_the_Visual_Entry_Point\"><\/span>The <code>initGui()<\/code> Method: the Visual Entry Point<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>initGui()<\/code> method is automatically called when the plugin is activated in QGIS.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is where the following elements are defined:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>the toolbar button,<\/li>\n\n\n\n<li>the menu entry,<\/li>\n\n\n\n<li>the associated action.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Typical example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def initGui(self):\n    self.action = QAction(\n        QIcon(':\/plugins\/MonPremierPlugin\/icon.png'),\n        'My first plugin',\n        self.iface.mainWindow()\n    )\n    self.action.triggered.connect(self.run)\n    self.iface.addToolBarIcon(self.action)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Even without understanding every line, remember that:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>an action is created,<\/li>\n\n\n\n<li>it is connected to a method (<code>run<\/code>),<\/li>\n\n\n\n<li>it is added to the QGIS interface.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"The_run_Method_When_the_Button_Is_Clicked\"><\/span>The <code>run()<\/code> Method: When the Button Is Clicked<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>run()<\/code> method is called when the user clicks the plugin button.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In the template generated by Plugin Builder, its main purpose is to display a dialog window.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def run(self):\n    self.dlg.show()\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">&#x1f449; At this stage, the plugin does only one thing: open a dialog.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%F0%9F%93%A6_What_a_Button_Really_Does_in_QGIS\"><\/span>&#x1f4e6; What a Button Really Does in QGIS<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When you click a button in QGIS, nothing \u201cmagical\u201d happens.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A plugin button is simply a trigger: it calls a specific Python function.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In practice, the workflow is always the same:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>the plugin creates an action (<code>QAction<\/code>),<\/li>\n\n\n\n<li>this action is linked to a function (for example <code>run()<\/code>),<\/li>\n\n\n\n<li>when the user clicks the button, QGIS executes this function.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">In our case, the <code>run()<\/code> function only displays a dialog. But later, this same function can:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>read parameters entered by the user,<\/li>\n\n\n\n<li>analyze layers,<\/li>\n\n\n\n<li>launch processing algorithms,<\/li>\n\n\n\n<li>produce results.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">&#x1f449; A QGIS button does only one thing: it runs Python code.<br>All the real power of the plugin lies in that code.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Understanding_the_Dialog_Window\"><\/span>Understanding the Dialog Window<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The displayed dialog is defined in a <code>.ui<\/code> file, created with <strong>Qt Designer<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This file is then loaded in Python, which allows you to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>display the window,<\/li>\n\n\n\n<li>retrieve values entered by the user,<\/li>\n\n\n\n<li>connect buttons to Python code.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">For now, we will simply modify the visual content.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Modifying_the_Dialog_Text\"><\/span>Modifying the Dialog Text<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Open the <code>.ui<\/code> file with Qt Designer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Try, for example, to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>change the window title,<\/li>\n\n\n\n<li>modify a label,<\/li>\n\n\n\n<li>add a button.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Save the file, reload the plugin in QGIS, and click the button.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#x1f449; You have just modified a QGIS plugin interface <strong>without writing any Python code<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Testing_and_Reloading_the_Plugin\"><\/span>Testing and Reloading the Plugin<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">After each modification to the code or interface:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>disable the plugin in the Plugin Manager,<\/li>\n\n\n\n<li>re-enable it,<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">or use the <strong>Reload plugin<\/strong> option if you have installed the dedicated plugin.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Common_Errors_at_This_Stage\"><\/span>Common Errors at This Stage<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>nothing happens when clicking \u2192 <code>run()<\/code> method not connected<\/li>\n\n\n\n<li>error on loading \u2192 incorrect capitalization in class or file names<\/li>\n\n\n\n<li>empty dialog \u2192 <code>.ui<\/code> file incorrectly referenced<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">These issues are normal and part of the learning process.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_You_Have_Learned\"><\/span>What You Have Learned<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">By the end of this article, you now know:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>where a QGIS plugin button is created,<\/li>\n\n\n\n<li>how an action is connected to Python code,<\/li>\n\n\n\n<li>how to display and modify a dialog window.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">You now have the essential building block of any interactive QGIS plugin.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Whats_Next\"><\/span>What\u2019s Next?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In the next article, we will see:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>how to retrieve values entered in the dialog,<\/li>\n\n\n\n<li>how to interact with QGIS layers,<\/li>\n\n\n\n<li>how to structure the code to go further.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">&#x1f449; From this point on, your plugin really starts to become useful.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","protected":false},"excerpt":{"rendered":"<p>Adding a button to the QGIS interface is often the first concrete step when developing a plugin. It is what turns a simple Python script into a tool that can actually be used by end users.&hellip;<\/p>\n","protected":false},"author":1,"featured_media":16327,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"sfsi_plus_gutenberg_text_before_share":"","sfsi_plus_gutenberg_show_text_before_share":"","sfsi_plus_gutenberg_icon_type":"","sfsi_plus_gutenberg_icon_alignemt":"","sfsi_plus_gutenburg_max_per_row":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[3394,1377],"tags":[4196,4198,1758,4200,1386],"class_list":["post-16381","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-pluigin-en","category-qgis-en","tag-button","tag-dialog","tag-plugin-en","tag-plugin-builder","tag-qgis-en"],"aioseo_notices":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2026\/01\/pluginsQGIS3.jpg?fit=409%2C307&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/p6XU0A-4gd","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/posts\/16381","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/comments?post=16381"}],"version-history":[{"count":0,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/posts\/16381\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/media\/16327"}],"wp:attachment":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/media?parent=16381"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/categories?post=16381"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/tags?post=16381"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}