{"id":46053,"date":"2022-10-24T09:16:24","date_gmt":"2022-10-24T08:16:24","guid":{"rendered":"https:\/\/kinsta.com\/dk\/?p=46053&#038;preview=true&#038;preview_id=46053"},"modified":"2023-08-24T11:20:33","modified_gmt":"2023-08-24T10:20:33","slug":"python-wordpress","status":"publish","type":"post","link":"https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/","title":{"rendered":"Pol\u00e9r dine Python-kundskaber ved at forbinde din app med WordPress"},"content":{"rendered":"<p>WordPress er blevet det mest anvendte Content Management System (CMS), hvilket ikke mindst skyldes dets API (Application Programming Interface). <a href=\"https:\/\/kinsta.com\/blog\/wordpress-rest-api\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress REST API<\/a> g\u00f8r det muligt for WordPress at &#8220;tale&#8221; med andre programmer skrevet i forskellige sprog \u2014 herunder Python.<\/p>\n<p><a href=\"https:\/\/kinsta.com\/blog\/python-tutorials\/#what-is-python\" target=\"_blank\" rel=\"noopener noreferrer\">Python<\/a> er et udvideligt programmeringssprog med forskellige anvendelsesmuligheder og en menneskeligt l\u00e6sbar syntaks, hvilket g\u00f8r det til et effektivt v\u00e6rkt\u00f8j til fjernstyring af WordPress-indhold.<\/p>\n<p>Her er nogle WordPress REST API-brugstilf\u00e6lde for dine apps, og hvordan du kan bruge Python til at underst\u00f8tte dem:<\/p>\n<ul>\n<li>Brug foruddefinerede skabeloner, s\u00e5 din app hurtigt kan omdanne r\u00e5 data til formaterede indl\u00e6g med forklaringer.<\/li>\n<li>Byg en backoffice-applikation p\u00e5 Django og Python, der viser tidsbegr\u00e6nsede tilbud til dine kunder, hver gang der opst\u00e5r en objektspecifik rabat eller salgsbegivenhed.<\/li>\n<li>Integrer Python-scripts til at k\u00f8re inde p\u00e5 dit WordPress-websted<\/li>\n<\/ul>\n<p>Denne vejledning hj\u00e6lper dig med at oprette et simpelt Python-konsolprogram, der kommunikerer med og udf\u00f8rer operationer p\u00e5 WordPress REST API. Den komplette projektkode er ogs\u00e5 tilg\u00e6ngelig.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Installation og konfiguration af WordPress<\/h2>\n<p>Lad os f\u00f8rst installere og k\u00f8re et WordPress-websted lokalt p\u00e5 din udviklingsmaskine. Dette er en fremragende m\u00e5de at starte med WordPress p\u00e5, da du ikke beh\u00f8ver at oprette en konto eller k\u00f8be et dom\u00e6nenavn til webhosting.<\/p>\n<p>F\u00f8r du installerer WordPress lokalt, skal nogle komponenter k\u00f8re p\u00e5 din computer, herunder Apache-webserveren, en lokal database og PHP-sproget, som WordPress er skrevet i.<\/p>\n<p>Heldigvis kan vi bruge <a href=\"https:\/\/kinsta.com\/dk\/devkinsta\/\" target=\"_blank\" rel=\"noopener noreferrer\">DevKinsta<\/a>, en gratis lokal WordPress-udviklingspakke, der er tilg\u00e6ngelig for alle st\u00f8rre operativsystemer (du beh\u00f8ver ikke at v\u00e6re Kinsta-kunde for at bruge den).<\/p>\n<p>DevKinsta er tilg\u00e6ngelig til Windows, Mac og Linux og installerer WordPress plus alle dets afh\u00e6ngigheder p\u00e5 din lokale maskine.<\/p>\n<p>F\u00f8r du installerer DevKinsta, skal du have Docker k\u00f8rende lokalt, s\u00e5 download og <a href=\"https:\/\/docs.docker.com\/engine\/install\/\" target=\"_blank\" rel=\"noopener noreferrer\">installer Docker Engine<\/a>, hvis du ikke har gjort det endnu.<\/p>\n<p>N\u00e5r du har installeret Docker Desktop, kan du <a href=\"https:\/\/kinsta.com\/dk\/devkinsta\/download\/\" target=\"_blank\" rel=\"noopener noreferrer\">automatisk hente<\/a> den pakke, der passer til dit styresystem.<\/p>\n<figure style=\"text-align: center\">\n<p><figure style=\"width: 826px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/DevKinsta-downloading-screen.png\" alt=\"DevKinsta installationsside.\" width=\"826\" height=\"570\"><figcaption class=\"wp-caption-text\">DevKinsta installationsside.<\/figcaption><\/figure><\/figure>\n<p>N\u00e5r du k\u00f8rer DevKinsta-installationsprogrammet, begynder Docker at initialisere med det samme:<\/p>\n<figure style=\"text-align: center\">\n<p><figure style=\"width: 546px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/DevKinsta-starting-Docker-screen.png\" alt=\"DevKinsta's starter Docker sk\u00e6rm.\" width=\"546\" height=\"368\"><figcaption class=\"wp-caption-text\">DevKinsta starter Docker lokalt.<\/figcaption><\/figure><\/figure>\n<p>V\u00e6lg derefter <strong>Nyt WordPress-websted<\/strong> i menuen <strong>Opret nyt websted<\/strong>:<\/p>\n<figure style=\"text-align: center\">\n<p><figure style=\"width: 905px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/DevKinsta-create-new-WordPress-site-screen.png\" alt=\"DevKinsta's oprette ny WordPress-sidesk\u00e6rm.\" width=\"905\" height=\"521\"><figcaption class=\"wp-caption-text\">DevKinstas menu Opret nyt websted.<\/figcaption><\/figure><\/figure>\n<p>Nu kr\u00e6ver DevKinsta-installationsprogrammet, at du opretter legitimationsoplysningerne til WordPress-administratorkontoen:<\/p>\n<figure style=\"text-align: center\">\n<p><figure style=\"width: 501px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/DevKinsta-new-WordPress-site-creation-screen.png\" alt=\"DevKinstas nye WordPress-sideoprettelsessk\u00e6rm.\" width=\"501\" height=\"463\"><figcaption class=\"wp-caption-text\">DevKinsta viser formularen New WordPress site formularen.<\/figcaption><\/figure><\/figure>\n<p>N\u00e5r DevKinsta er installeret, er det et selvst\u00e6ndigt program. Nu kan du f\u00e5 adgang til b\u00e5de WordPress-webstedet (via knappen <strong>\u00c5bn websted<\/strong>) og WordPress-administrationspanelet (knappen <strong>WP Admin<\/strong>).<\/p>\n<figure style=\"text-align: center\">\n<p><figure style=\"width: 969px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/DevKinsta-WordPress-site-info-screen.png\" alt=\"DevKinstas WordPress-sideinfosk\u00e6rm.\" width=\"969\" height=\"550\"><figcaption class=\"wp-caption-text\">DevKinstas webstedsinfopanel.<\/figcaption><\/figure><\/figure>\n<p>Dern\u00e6st skal du aktivere <a href=\"https:\/\/kinsta.com\/blog\/how-ssl-works\/\" target=\"_blank\" rel=\"noopener noreferrer\">SSL og HTTPS<\/a> for dit websted. Dette forbedrer sikkerheden p\u00e5 dit websted gennem et SSL-certifikat.<\/p>\n<figure style=\"text-align: center\">\n<p><figure style=\"width: 969px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/DevKinsta-SSL-and-HTTPS-option-screen.png\" alt=\"Aktivering af DevKinstas SSL- og HTTPS-indstilling.\" width=\"969\" height=\"550\"><figcaption class=\"wp-caption-text\">DevKinsta&#8217;s &#8220;SSL og HTTPS&#8221; mulighed.<\/figcaption><\/figure><\/figure>\n<p>G\u00e5 nu til DevKinsta-appen, og klik p\u00e5 knappen<strong> \u00c5bn websted<\/strong>. En ny browserfane vil vise forsiden af dit WordPress-websted:<\/p>\n<figure style=\"text-align: center\">\n<p><figure style=\"width: 827px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/DevKinsta-new-local-site-Hello-World.png\" alt=\"Hjemmesiden p\u00e5 dit lokale WordPress-websted.\" width=\"827\" height=\"612\"><figcaption class=\"wp-caption-text\">WordPress-hjemmeside.<\/figcaption><\/figure><\/figure>\n<p>Dette er din WordPress-blog, hvor du kan begynde at skrive. Men for at g\u00f8re det muligt for Python at f\u00e5 adgang til og bruge WordPress REST API&#8217;et, skal vi f\u00f8rst konfigurere WordPress Admin.<\/p>\n<p>Klik nu p\u00e5 knappen <strong>WP Admin<\/strong> p\u00e5 DevKinsta-appen, og angiv derefter din bruger og password for at f\u00e5 adgang til <strong>WordPress Dashboardet<\/strong>:<\/p>\n<figure style=\"text-align: center\">\n<p><figure style=\"width: 357px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/WordPress-admin-dashboard-login-screen.png\" alt=\"WordPress admin dashboard login sk\u00e6rm.\" width=\"357\" height=\"385\"><figcaption class=\"wp-caption-text\">WordPress login form.<\/figcaption><\/figure><\/figure>\n<p>N\u00e5r du er logget ind, vil du se <strong>WordPress Dashboard<\/strong>:<\/p>\n<figure style=\"text-align: center\">\n<p><figure style=\"width: 989px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/welcome-to-WordPress-admin-screen.png\" alt=\"Velkommen til WordPress admin sk\u00e6rm.\" width=\"989\" height=\"612\"><figcaption class=\"wp-caption-text\">WordPress Dashboard side.<\/figcaption><\/figure><\/figure>\n<p>WordPress bruger cookie-godkendelse som standardmetode. Men hvis du vil styre det ved hj\u00e6lp af REST API&#8217;et, skal du autentificere dig med en teknik, der giver adgang til WordPress REST API&#8217;et.<\/p>\n<p>Til dette skal du bruge <a href=\"https:\/\/make.wordpress.org\/core\/2020\/11\/05\/application-passwords-integration-guide\/\" target=\"_blank\" rel=\"noopener noreferrer\">Application Passwords<\/a>. Disse er 24 tegn lange strenge, som WordPress genererer og knytter til en brugerprofil, der har tilladelse til at administrere dit websted.<\/p>\n<p>Hvis du vil bruge Application Passwords, skal du klikke p\u00e5 <strong>Plugin<\/strong>-menuen p\u00e5 Dashboardet og derefter s\u00f8ge efter plugin&#8217;et med samme navn. Installer og aktiv\u00e9r derefter Plugin til programpasswords:<\/p>\n<figure style=\"text-align: center\">\n<p><figure style=\"width: 752px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/WordPress-add-plugins-Application-Passwords.png\" alt=\"Installation og aktivering af WordPress Application Passwords plugin.\" width=\"752\" height=\"445\"><figcaption class=\"wp-caption-text\">Application Passwords plugin til WordPress.<\/figcaption><\/figure><\/figure>\n<p>For at begynde at oprette din applikationspassword skal du starte med at udvide menuen <strong>Brugere<\/strong> og klikke p\u00e5 <strong>Alle brugere<\/strong>:<\/p>\n<figure style=\"text-align: center\">\n<p><figure style=\"width: 272px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/expanded-Users-WordPress-menu.png\" alt=\"Udvidet brugere WordPress-menu.\" width=\"272\" height=\"205\"><figcaption class=\"wp-caption-text\">Udvidet brugermenu.<\/figcaption><\/figure><\/figure>\n<p>Klik nu p\u00e5 <strong>Rediger<\/strong> under dit admin-brugernavn:<\/p>\n<figure style=\"text-align: center\">\n<p><figure style=\"width: 1015px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/edit-screen-WordPress-user.png\" alt=\"Klik p\u00e5 knappen \"Rediger\" under din WordPress-bruger under menuen Brugere.\" width=\"1015\" height=\"471\"><figcaption class=\"wp-caption-text\">WP-Admin WordPress-gr\u00e6nseflade.<\/figcaption><\/figure><\/figure>\n<p>Rul ned p\u00e5 siden <strong>Rediger bruger<\/strong> og find afsnittet <strong>Applikationspasswords<\/strong>. Her skal du angive et navn til Application Password, som du senere skal bruge til at autentificere dine Python-app-foresp\u00f8rgsler og forbruge REST API&#8217;et:<\/p>\n<figure style=\"text-align: center\">\n<p><figure style=\"width: 761px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/Application-Passwords-plugin-dashboard.png\" alt=\"Application Passwords plugin dashboard.\" width=\"761\" height=\"362\"><figcaption class=\"wp-caption-text\">Application Password side.<\/figcaption><\/figure><\/figure>\n<p>Klik p\u00e5 <strong>Tilf\u00f8j ny programpassword<\/strong>, s\u00e5 WordPress kan generere en tilf\u00e6ldig password p\u00e5 24 tegn til dig:<\/p>\n<figure style=\"text-align: center\">\n<p><figure style=\"width: 771px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/Application-Passwords-new-password-page.png\" alt=\"Det nye password genereret af Application Passwords plugin.\" width=\"771\" height=\"110\"><figcaption class=\"wp-caption-text\">Ny Application Password side.<\/figcaption><\/figure><\/figure>\n<p>Derefter skal du kopiere denne adgangskode og gemme den et sikkert sted til senere brug. Husk, at du ikke vil kunne hente denne adgangskode, n\u00e5r du lukker denne side.<\/p>\n<p>Til sidst skal du konfigurere permalinks. WordPress giver dig mulighed for at oprette en brugerdefineret URL-struktur for dine permalinks og arkiver. Lad os \u00e6ndre det, s\u00e5 et WordPress-indl\u00e6g med titlen f.eks. &#8220;Dit f\u00f8rste WordPress-websted&#8221; kan tilg\u00e5s via den intuitive URL https:\/\/your-website.local:port\/your-first-wordpress-website\/. Denne fremgangsm\u00e5de giver flere fordele, herunder forbedret brugervenlighed og \u00e6stetik.<\/p>\n<p>For at konfigurere permalinks skal du udvide afsnittet <strong>Indstillinger<\/strong> og klikke p\u00e5 menuen <strong>Permalinks<\/strong>. Her skal du \u00e6ndre <strong>F\u00e6lles indstillinger<\/strong> til <strong>Indl\u00e6gsnavn<\/strong>:<\/p>\n<figure style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/WordPress-change-Permalink-settings-post_name.png\" alt=\"\u00c6ndring af WordPress permalink indstillinger. \" width=\"996\" height=\"592\"><\/figure>\n<p>Det er ogs\u00e5 n\u00f8dvendigt at indstille permalink-strukturen ved hj\u00e6lp af <strong>Post name<\/strong>-strukturen, fordi det vil g\u00f8re det muligt for os at hente indl\u00e6g senere i vores Python-kode ved hj\u00e6lp af JSON-formatet. Ellers vil der blive kastet en JSON-afkodningsfejl.<\/p>\n<h2>S\u00e5dan styrer du WordPress fra Python<\/h2>\n<p>WordPress er skrevet i PHP, men det har et REST API, der g\u00f8r det muligt for andre programmeringssprog, websteder og apps at forbruge dets indhold. Eksponering af WordPress-indholdet i REST-arkitekturen g\u00f8r det tilg\u00e6ngeligt i JSON-format. Derfor kan andre tjenester integrere med WordPress og udf\u00f8re CRUD-operationer (create, read, update og delete) uden at kr\u00e6ve en lokal WordPress-installation.<\/p>\n<p>Herefter skal du bygge en simpel Python-app for at se, hvordan du kan bruge WordPress REST API til at oprette, hente, opdatere og slette indl\u00e6g.<\/p>\n<p>Opret en ny mappe til dit nye enkle Python-projekt, og navngiv det noget i retning af <code>PythonWordPress<\/code>:<\/p>\n<pre><code class=\"language-bash\">..\/PythonWordPress<\/code><\/pre>\n<p>Nu opretter du et virtuelt milj\u00f8 for dit projekt, s\u00e5 det kan vedligeholde et uafh\u00e6ngigt s\u00e6t installerede Python-pakker, isolere dem fra dine systemmapper og undg\u00e5 versionskonflikter. Opret et virtuelt milj\u00f8 ved at udf\u00f8re kommandoen <code>venv<\/code>:<\/p>\n<pre><code class=\"language-bash\">python3 -m venv .venv<\/code><\/pre>\n<p>Nu skal du k\u00f8re en kommando for at aktivere det virtuelle <strong>.venv<\/strong>-milj\u00f8. Denne kommando varierer fra OS til OS:<\/p>\n<ul>\n<li>Windows <code>.venvScriptsactivate<\/code><\/li>\n<li>Mac\/Linux <code>.venv\/bin\/activate<\/code><\/li>\n<\/ul>\n<p>Derefter skal du gemme konfigurationen relateret til din WordPress-konto. For at adskille app-konfigurationen fra din Python-kode skal du oprette en <strong>.env<\/strong>-fil i din projektmappe og tilf\u00f8je disse milj\u00f8variabler til filen:<\/p>\n<pre><code class=\"language-markup\">WEBSITE_URL=\"&lt;&gt;\"\n\nAPI_USERNAME=\"&lt;&gt;\"\n\nAPI_PASSWORD=\"&lt;&gt;\"<\/code><\/pre>\n<p>Heldigvis er det nemt at l\u00e6se ovenst\u00e5ende data fra en Python-app. Du kan installere pakken <strong>Python-dotenv<\/strong>, s\u00e5 din applikation kan l\u00e6se konfigurationen fra <strong>.env<\/strong>-filen:<\/p>\n<pre><code class=\"language-bash\">pip install python-dotenv<\/code><\/pre>\n<p>Derefter skal du installere <strong>aiohttp<\/strong>, en asynkron HTTP-klient\/server til Python:<\/p>\n<pre><code class=\"language-bash\">pip install aiohttp<\/code><\/pre>\n<p>Tilf\u00f8j nu en fil med navnet <strong>app.py<\/strong> med f\u00f8lgende kode:<\/p>\n<pre><code class=\"language-python\">import asyncio\n\nmenu_options = {\n\n1: 'List Posts',\n\n2: 'Retrieve a Post'\n\n}\n\ndef print_menu():\n\nfor key in menu_options.keys():\n\nprint (key, '--', menu_options[key] )\n\nasync def main():\n\nwhile(True):\n\nprint_menu()\n\noption = input_number('Enter your choice: ')\n\n#Check what choice was entered and act accordingly\n\nif option == 1:\n\nprint('Listing posts...')\n\nelif option == 2:\n\nprint('Retrieving a post...')\n\nelse:\n\nprint('Invalid option. Please enter a number between 1 and 5.')\n\ndef input_number(prompt):\n\nwhile True:\n\ntry:\n\nvalue = int(input(prompt))\n\nexcept ValueError:\n\nprint('Wrong input. Please enter a number ...')\n\ncontinue\n\nif value &lt; 0:\n\nprint(\"Sorry, your response must not be negative.\")\n\nelse:\n\nbreak\n\nreturn value\n\ndef input_text(prompt):\n\nwhile True:\n\ntext = input(prompt)\n\nif len(text) == 0:\n\nprint(\"Text is required.\")\n\ncontinue\n\nelse:\n\nbreak\n\nreturn text\n\nif __name__=='__main__':\n\nasyncio.run(main())<\/code><\/pre>\n<p>Koden ovenfor viser en konsolmenu og beder dig om at indtaste et tal for at v\u00e6lge en mulighed. Dern\u00e6st udvider du dette projekt og implementerer den kode, der g\u00f8r det muligt at f\u00e5 vist alle indl\u00e6g og hente et bestemt indl\u00e6g ved hj\u00e6lp af dets indl\u00e6gs-id.<\/p>\n<h2>Hentning af indl\u00e6g i kode<\/h2>\n<p>For at interagere med WordPress REST API skal du oprette en ny Python-fil. Opret en fil med navnet <strong>wordpress_api_helper.py<\/strong> med f\u00f8lgende indhold:<\/p>\n<pre><code class=\"language-python\">import aiohttp\n\nimport base64\n\nimport os\n\nimport json\n\nfrom dotenv import load_dotenv\n\nload_dotenv()\n\nuser=os.getenv(\"API_USERNAME\")\n\npassword=os.getenv(\"API_PASSWORD\")\n\nasync def get_all_posts():\n\nasync with aiohttp.ClientSession(os.getenv(\"WEBSITE_URL\")) as session:\n\nasync with session.get(\"\/wp-json\/wp\/v2\/posts\") as response:\n\nprint(\"Status:\", response.status)\n\ntext = await response.text()\n\nwp_posts = json.loads(text)\n\nsorted_wp_posts = sorted(wp_posts, key=lambda p: p['id'])\n\nprint(\"=====================================\")\n\nfor wp_post in sorted_wp_posts:\n\nprint(\"id:\", wp_post['id'])\n\nprint(\"title:\", wp_post['title']['rendered'])\n\nprint(\"=====================================\")\n\nasync def get_post(id):\n\nasync with aiohttp.ClientSession(os.getenv(\"WEBSITE_URL\")) as session:\n\nasync with session.get(f\"\/wp-json\/wp\/v2\/posts\/{id}\") as response:\n\nprint(\"Status:\", response.status)\n\ntext = await response.text()\n\nwp_post = json.loads(text)\n\nprint(\"=====================================\")\n\nprint(\"Post\")\n\nprint(\"     id:\", wp_post['id'])\n\nprint(\"     title:\", wp_post['title']['rendered'])\n\nprint(\"     content:\", wp_post['content']['rendered'])\n\nprint(\"=====================================\")<\/code><\/pre>\n<p>Bem\u00e6rk brugen af <strong>aiohttp<\/strong>-biblioteket ovenfor. Moderne sprog tilbyder syntaks og v\u00e6rkt\u00f8jer, der muligg\u00f8r asynkron programmering. Dette \u00f8ger applikationens reaktionsevne ved at give programmet mulighed for at udf\u00f8re opgaver sidel\u00f8bende med operationer som <a href=\"https:\/\/kinsta.com\/blog\/what-is-an-http-request\/\" target=\"_blank\" rel=\"noopener noreferrer\">webanmodninger<\/a>, databaseoperationer og disk I\/O. Python tilbyder <a href=\"https:\/\/docs.python.org\/3\/library\/asyncio.html\" target=\"_blank\" rel=\"noopener noreferrer\">asyncio<\/a> som grundlag for sin asynkrone programmeringsramme, og <a href=\"https:\/\/docs.aiohttp.org\/en\/stable\/\" target=\"_blank\" rel=\"noopener noreferrer\">aiohttp<\/a>-biblioteket er bygget oven p\u00e5<strong> asyncio<\/strong> for at give asynkron adgang til HTTP-klient\/server-operationer udf\u00f8rt i Python.<\/p>\n<p>Funktionen <code>ClientSession<\/code> ovenfor k\u00f8rer asynkront og returnerer et <code>session<\/code> -objekt, som vores program bruger til at udf\u00f8re en HTTP GET-operation mod <code>\/wp-json\/wp\/v2\/posts<\/code> -slutpunktet. Den eneste forskel mellem en anmodning om at hente alle indl\u00e6g og en anmodning om et bestemt indl\u00e6g er, at denne sidste anmodning videregiver en <code>post id<\/code> -parameter i URL-ruten: <code>\/wp-json\/wp\/v2\/posts\/{id}<\/code>.<\/p>\n<p>\u00c5bn nu filen <strong>app.py<\/strong>, og tilf\u00f8j <code>import<\/code> -anvisningen:<\/p>\n<pre><code class=\"language-python\">from wordpress_api_helper import get_all_posts, get_post<\/code><\/pre>\n<p>\u00c6ndr derefter funktionen <code>main<\/code> til at kalde funktionerne <code>get_all_posts<\/code> og <code>get_post<\/code>:<\/p>\n<pre><code class=\"language-python\">if option == 1:\n\nprint('Listing posts...')\n\nawait get_all_posts()\n\nelif option == 2:\n\nprint('Retrieving a post...')\n\nid = input_number('Enter the post id: ')\n\nawait get_post(id)<\/code><\/pre>\n<p>K\u00f8r derefter programmet:<\/p>\n<pre><code class=\"language-bash\">python app.py<\/code><\/pre>\n<p>Du f\u00e5r derefter vist programmenuen:<\/p>\n<figure style=\"text-align: center\">\n<p><figure style=\"width: 804px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/Python-app-WordPress-start.png\" alt=\"Start af Python-appen forbundet til WordPress.\" width=\"804\" height=\"114\"><figcaption class=\"wp-caption-text\">Python-programmenu.<\/figcaption><\/figure><\/figure>\n<p>Pr\u00f8v nu mulighed 1 for at f\u00e5 vist listen over indl\u00e6g, som din Python-app henter, og mulighed 2 for at v\u00e6lge et indl\u00e6g:<\/p>\n<figure style=\"text-align: center\">\n<p><figure style=\"width: 670px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/list-and-select-posts-Python-app.png\" alt=\"Pr\u00f8v mulighed 1 for at se listen over indl\u00e6g, som din Python-app henter, og mulighed 2 for at v\u00e6lge et opslag.\" width=\"670\" height=\"624\"><figcaption class=\"wp-caption-text\">Python-appen viser listen over indl\u00e6g og et enkelt indl\u00e6g, som brugeren har valgt.<\/figcaption><\/figure><\/figure>\n<h2>Oprettelse af indl\u00e6g i kode<\/h2>\n<p>For at oprette et WordPress-indl\u00e6g i Python skal du begynde med at \u00e5bne filen <strong>wordpress_api_helper.py<\/strong> og tilf\u00f8je funktionen <code>create_post<\/code>:<\/p>\n<pre><code class=\"language-python\">async def create_post(title, content):\n\nasync with aiohttp.ClientSession(os.getenv(\"WEBSITE_URL\")) as session:\n\nasync with session.post(\n\nf\"\/wp-json\/wp\/v2\/posts?content={content}&title={title}&status=publish\"\n\n, auth=aiohttp.BasicAuth(user, password)) as response:\n\nprint(\"Status:\", response.status)\n\ntext = await response.text()\n\nwp_post = json.loads(text)\n\npost_id = wp_post['id']\n\nprint(f'New post created with id: {post_id}')<\/code><\/pre>\n<p>Denne kode kalder <code>post<\/code> -funktionen i <code>session<\/code> -objektet og sender <code>auth<\/code> -parameteren ud over REST API-endpoint-URL&#8217;en. <code>auth<\/code> -objektet indeholder nu WordPress-brugeren og det password, du oprettede ved hj\u00e6lp af Application Passwords. \u00c5bn nu filen <strong>app.py<\/strong>, og tilf\u00f8j kode til at importere <code>create_post<\/code> og menuen:<\/p>\n<pre><code class=\"language-python\">from wordpress_api_helper import get_all_posts, get_post, create_post\n\nmenu_options = {\n\n1: 'List Posts',\n\n2: 'Retrieve a Post',\n\n3: 'Create a Post'\n\n}<\/code><\/pre>\n<p>Tilf\u00f8j derefter en tredje menupunkt:<\/p>\n<pre><code class=\"language-python\">elif option == 3:\n\nprint('Creating a post...')\n\ntitle = input_text('Enter the post title: ')\n\ncontent = input_text('Enter the post content: ')\n\nawait create_post(title, f\"{content}\")\n<\/code><\/pre>\n<p>Derefter skal du k\u00f8re appen og pr\u00f8ve mulighed 3, hvor du indsender en titel og et indhold for at oprette et nyt indl\u00e6g i WordPress:<\/p>\n<figure style=\"text-align: center\">\n<p><figure style=\"width: 671px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/create-a-WordPress-post-Python-app.png\" alt=\"Oprettelse af et WordPress-indl\u00e6g med Python.\" width=\"671\" height=\"335\"><figcaption class=\"wp-caption-text\">Python-appen viser et nyligt oprettet WordPress-indl\u00e6g.<\/figcaption><\/figure><\/figure>\n<p>Hvis du v\u00e6lger mulighed 1 igen, returneres id og titlen p\u00e5 det nyligt tilf\u00f8jede indl\u00e6g:<\/p>\n<figure style=\"text-align: center\">\n<p><figure style=\"width: 672px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/return-id-newly-added-post.png\" alt=\"ython-appen returnerer det nye indl\u00e6gs titel og id.\" width=\"672\" height=\"333\"><figcaption class=\"wp-caption-text\">Python-appen returnerer det nye indl\u00e6gs titel og id.<\/figcaption><\/figure><\/figure>\n<p>Du kan ogs\u00e5 \u00e5bne dit WordPress-websted for at se det nye indl\u00e6g:<\/p>\n<figure style=\"text-align: center\">\n<p><figure style=\"width: 754px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/Kinsta-Compute-Optimized-C2-post.png\" alt=\"Browserbillede af det nye WordPress-indl\u00e6g.\" width=\"754\" height=\"600\"><figcaption class=\"wp-caption-text\">Browserbillede af det nye WordPress-indl\u00e6g.<\/figcaption><\/figure><\/figure>\n<h2>Opdatering af indl\u00e6g i kode<\/h2>\n<p>\u00c5bn filen <strong>wordpress_api_helper.py<\/strong> og tilf\u00f8j funktionen <code>update_post<\/code>:<\/p>\n<pre><code class=\"language-python\">async def update_post(id, title, content):\n\nasync with aiohttp.ClientSession(os.getenv(\"WEBSITE_URL\")) as session:\n\nasync with session.post(\n\nf\"\/wp-json\/wp\/v2\/posts\/{id}?content={content}&title={title}&status=publish\"\n\n, auth=aiohttp.BasicAuth(user, password)) as response:\n\nprint(\"Status:\", response.status)\n\ntext = await response.text()\n\nwp_post = json.loads(text)\n\npost_id = wp_post['id']\n\nprint(f'New post created with id: {post_id}')<\/code><\/pre>\n<p>\u00c5bn derefter filen <strong>app.py<\/strong> og tilf\u00f8j kode til at importere <code>update_post<\/code> og menuen:<\/p>\n<pre><code class=\"language-python\">from wordpress_api_helper import get_all_posts, get_post, create_post, update_post\n\nmenu_options = {\n\n1: 'List Posts',\n\n2: 'Retrieve a Post',\n\n3: 'Create a Post',\n\n4: 'Update a Post'\n\n}<\/code><\/pre>\n<p>Tilf\u00f8j derefter et fjerde menupunkt:<\/p>\n<pre><code class=\"language-python\">elif option == 4:\n\nprint('Updating a post...')\n\nid = input_number('Enter the post id: ')\n\ntitle = input_text('Enter the post title: ')\n\ncontent = input_text('Enter the post content: ')\n\nawait update_post(id, title, f\"{content}\")\n<\/code><\/pre>\n<p>K\u00f8r derefter appen, og pr\u00f8v mulighed 4, hvor du overf\u00f8rer et indl\u00e6gs-id, en titel og et indhold for at opdatere et eksisterende indl\u00e6g.<\/p>\n<figure style=\"text-align: center\">\n<p><figure style=\"width: 670px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/updating-WordPress-post-Python-app.png\" alt=\"opdatering af WordPress post.\" width=\"670\" height=\"338\"><figcaption class=\"wp-caption-text\">Python-appen viser den opdaterede menu.<\/figcaption><\/figure><\/figure>\n<p>Hvis du v\u00e6lger mulighed 2 og overf\u00f8rer det opdaterede indl\u00e6gs-id, f\u00e5r du detaljerne om det nyligt tilf\u00f8jede indl\u00e6g tilbage:<\/p>\n<figure style=\"text-align: center\">\n<p><figure style=\"width: 673px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/return-updated-post-details.png\" alt=\"Returnerer detaljerne for det nyligt opdaterede indl\u00e6g.\" width=\"673\" height=\"318\"><figcaption class=\"wp-caption-text\">Python-appen viser det opdaterede indl\u00e6g.<\/figcaption><\/figure><\/figure>\n<h2>Sletning af indl\u00e6g i kode<\/h2>\n<p>Du kan sende post id til REST API&#8217;et for at slette et indl\u00e6g.<\/p>\n<p>\u00c5bn filen <strong>wordpress_api_helper.py<\/strong> og tilf\u00f8j funktionen <code>delete_post<\/code>:<\/p>\n<pre><code class=\"language-python\">async def delete_post(id):\n\nasync with aiohttp.ClientSession(os.getenv(\"WEBSITE_URL\")) as session:\n\nasync with session.delete(\n\nf\"\/wp-json\/wp\/v2\/posts\/{id}\"\n\n, auth=aiohttp.BasicAuth(user, password)) as response:\n\nprint(\"Status:\", response.status)\n\ntext = await response.text()\n\nwp_post = json.loads(text)\n\npost_id = wp_post['id']\n\nprint(f'Post with id {post_id} deleted successfully.')<\/code><\/pre>\n<p>\u00c5bn nu filen <strong>app.py<\/strong>, og tilf\u00f8j kode til at importere <code>delete_post<\/code> og menuen:<\/p>\n<pre><code class=\"language-python\">from wordpress_api_helper import get_all_posts, get_post, create_post, update_post, delete_post\n\nmenu_options = {\n\n1: 'List Posts',\n\n2: 'Retrieve a Post',\n\n3: 'Create a Post',\n\n4: 'Update a Post',\n\n5: 'Delete a Post',\n\n}<\/code><\/pre>\n<p>Tilf\u00f8j derefter et femte menupunkt:<\/p>\n<pre><code class=\"language-python\">elif option == 5:\n\nprint('Deleting a post...')\n\nid = input_number('Enter the post id: ')\n\nawait delete_post(id)<\/code><\/pre>\n<p>Nu k\u00f8rer du appen og pr\u00f8ver valgmulighed 5, hvor du indsender et id for at slette det eksisterende indl\u00e6g i WordPress:<\/p>\n<figure style=\"text-align: center\">\n<p><figure style=\"width: 651px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/deleting-WordPress-Post-Python-app.png\" alt=\"Sletning af et WordPress-indl\u00e6g med Python-appen.\" width=\"651\" height=\"120\"><figcaption class=\"wp-caption-text\">Python-appen viser sletning af det valgte indl\u00e6g.<\/figcaption><\/figure><\/figure>\n<p>Bem\u00e6rk: Det slettede indl\u00e6g kan stadig vises, hvis du k\u00f8rer indstillingen <strong>List Posts<\/strong>:<\/p>\n<figure style=\"text-align: center\">\n<p><figure style=\"width: 671px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/Python-app-listing-posts.png\" alt=\"Python-appen viser den oprindelige liste over indl\u00e6g.\" width=\"671\" height=\"288\"><figcaption class=\"wp-caption-text\">Python-appen viser den oprindelige liste over indl\u00e6g.<\/figcaption><\/figure><\/figure>\n<p>For at bekr\u00e6fte, at du har slettet indl\u00e6gget, skal du vente et par sekunder og pr\u00f8ve indstillingen <strong>List Posts<\/strong> igen. Og det var det!<\/p>\n<h2>Opsummering<\/h2>\n<p>Takket v\u00e6re WordPress REST API og Pythons HTTP-klientbiblioteker kan Python-apps og WordPress g\u00e5 sammen og tale med hinanden. Fordelen ved REST API&#8217;et er, at det giver dig mulighed for at betjene WordPress eksternt fra en Python-app, hvor Pythons kraftfulde sprog muligg\u00f8r automatiseret indholdsoprettelse, der f\u00f8lger din \u00f8nskede struktur og frekvens.<\/p>\n<p>DevKinsta g\u00f8r det hurtigt og nemt at oprette og udvikle et lokalt WordPress-websted. Det giver et lokalt milj\u00f8 til udvikling af WordPress-temaer og plugins og tilbyder en forenklet implementeringsmodel takket v\u00e6re den Docker-baserede, selvst\u00e6ndige installationsmodel.<\/p>\n<p>Hvad er din erfaring med at arbejde med Python og WordPress?<\/p>\n<p><em>N\u00e5r du er klar til at udvide denne erfaring, kan du l\u00e6se <a href=\"https:\/\/kinsta.com\/blog\/wordpress-rest-api\/\" target=\"_blank\" rel=\"noopener noreferrer\">The Complete Guide to WordPress REST API Basics<\/a><\/em> for at udforske andre muligheder.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>WordPress er blevet det mest anvendte Content Management System (CMS), hvilket ikke mindst skyldes dets API (Application Programming Interface). WordPress REST API g\u00f8r det muligt for &#8230;<\/p>\n","protected":false},"author":117,"featured_media":46054,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[494,38],"topic":[690,729,745,754],"class_list":["post-46053","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-python","tag-webdev","topic-devkinsta","topic-python","topic-web-udvikling-sprog","topic-wordpress-udvikling"],"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>Pol\u00e9r dine Python-kundskaber ved at forbinde din app med WordPress<\/title>\n<meta name=\"description\" content=\"L\u00e6r, hvordan Python-apps og WordPress kan sl\u00e5 sig sammen og tale med hinanden ved hj\u00e6lp af WordPress REST API og Pythons HTTP-klientbiblioteker.\" \/>\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\/dk\/blog\/python-wordpress\/\" \/>\n<meta property=\"og:locale\" content=\"da_DK\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Pol\u00e9r dine Python-kundskaber ved at forbinde din app med WordPress\" \/>\n<meta property=\"og:description\" content=\"L\u00e6r, hvordan Python-apps og WordPress kan sl\u00e5 sig sammen og tale med hinanden ved hj\u00e6lp af WordPress REST API og Pythons HTTP-klientbiblioteker.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Danmark-122855885298660\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-10-24T08:16:24+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-24T10:20:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/10\/python-wordpress.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Salman Ravoof\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"L\u00e6r, hvordan Python-apps og WordPress kan sl\u00e5 sig sammen og tale med hinanden ved hj\u00e6lp af WordPress REST API og Pythons HTTP-klientbiblioteker.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/10\/python-wordpress.png\" \/>\n<meta name=\"twitter:creator\" content=\"@salmanravoof\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_dk\" \/>\n<meta name=\"twitter:label1\" content=\"Skrevet af\" \/>\n\t<meta name=\"twitter:data1\" content=\"Salman Ravoof\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimeret l\u00e6setid\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 minutter\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/\"},\"author\":{\"name\":\"Salman Ravoof\",\"@id\":\"https:\/\/kinsta.com\/dk\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\"},\"headline\":\"Pol\u00e9r dine Python-kundskaber ved at forbinde din app med WordPress\",\"datePublished\":\"2022-10-24T08:16:24+00:00\",\"dateModified\":\"2023-08-24T10:20:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/\"},\"wordCount\":2086,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/dk\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/10\/python-wordpress.png\",\"keywords\":[\"Python\",\"webdev\"],\"inLanguage\":\"da-DK\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/\",\"url\":\"https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/\",\"name\":\"Pol\u00e9r dine Python-kundskaber ved at forbinde din app med WordPress\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/dk\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/10\/python-wordpress.png\",\"datePublished\":\"2022-10-24T08:16:24+00:00\",\"dateModified\":\"2023-08-24T10:20:33+00:00\",\"description\":\"L\u00e6r, hvordan Python-apps og WordPress kan sl\u00e5 sig sammen og tale med hinanden ved hj\u00e6lp af WordPress REST API og Pythons HTTP-klientbiblioteker.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/#breadcrumb\"},\"inLanguage\":\"da-DK\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"da-DK\",\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/10\/python-wordpress.png\",\"contentUrl\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/10\/python-wordpress.png\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/dk\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DevKinsta\",\"item\":\"https:\/\/kinsta.com\/dk\/emner\/devkinsta\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Pol\u00e9r dine Python-kundskaber ved at forbinde din app med WordPress\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/dk\/#website\",\"url\":\"https:\/\/kinsta.com\/dk\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Hurtig, sikker, premium hostingl\u00f8sninger\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/dk\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/dk\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"da-DK\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/dk\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/dk\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"da-DK\",\"@id\":\"https:\/\/kinsta.com\/dk\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/dk\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Danmark-122855885298660\/\",\"https:\/\/x.com\/kinsta_dk\",\"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\/dk\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\",\"name\":\"Salman Ravoof\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"da-DK\",\"@id\":\"https:\/\/kinsta.com\/dk\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"caption\":\"Salman Ravoof\"},\"description\":\"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.\",\"sameAs\":[\"https:\/\/salmanravoof.com\",\"https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/\",\"https:\/\/x.com\/salmanravoof\"],\"url\":\"https:\/\/kinsta.com\/dk\/blog\/author\/salmanravoof\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Pol\u00e9r dine Python-kundskaber ved at forbinde din app med WordPress","description":"L\u00e6r, hvordan Python-apps og WordPress kan sl\u00e5 sig sammen og tale med hinanden ved hj\u00e6lp af WordPress REST API og Pythons HTTP-klientbiblioteker.","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\/dk\/blog\/python-wordpress\/","og_locale":"da_DK","og_type":"article","og_title":"Pol\u00e9r dine Python-kundskaber ved at forbinde din app med WordPress","og_description":"L\u00e6r, hvordan Python-apps og WordPress kan sl\u00e5 sig sammen og tale med hinanden ved hj\u00e6lp af WordPress REST API og Pythons HTTP-klientbiblioteker.","og_url":"https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Danmark-122855885298660\/","article_published_time":"2022-10-24T08:16:24+00:00","article_modified_time":"2023-08-24T10:20:33+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/10\/python-wordpress.png","type":"image\/png"}],"author":"Salman Ravoof","twitter_card":"summary_large_image","twitter_description":"L\u00e6r, hvordan Python-apps og WordPress kan sl\u00e5 sig sammen og tale med hinanden ved hj\u00e6lp af WordPress REST API og Pythons HTTP-klientbiblioteker.","twitter_image":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/10\/python-wordpress.png","twitter_creator":"@salmanravoof","twitter_site":"@kinsta_dk","twitter_misc":{"Skrevet af":"Salman Ravoof","Estimeret l\u00e6setid":"16 minutter"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/"},"author":{"name":"Salman Ravoof","@id":"https:\/\/kinsta.com\/dk\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987"},"headline":"Pol\u00e9r dine Python-kundskaber ved at forbinde din app med WordPress","datePublished":"2022-10-24T08:16:24+00:00","dateModified":"2023-08-24T10:20:33+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/"},"wordCount":2086,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/dk\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/10\/python-wordpress.png","keywords":["Python","webdev"],"inLanguage":"da-DK","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/","url":"https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/","name":"Pol\u00e9r dine Python-kundskaber ved at forbinde din app med WordPress","isPartOf":{"@id":"https:\/\/kinsta.com\/dk\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/10\/python-wordpress.png","datePublished":"2022-10-24T08:16:24+00:00","dateModified":"2023-08-24T10:20:33+00:00","description":"L\u00e6r, hvordan Python-apps og WordPress kan sl\u00e5 sig sammen og tale med hinanden ved hj\u00e6lp af WordPress REST API og Pythons HTTP-klientbiblioteker.","breadcrumb":{"@id":"https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/#breadcrumb"},"inLanguage":"da-DK","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/"]}]},{"@type":"ImageObject","inLanguage":"da-DK","@id":"https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/#primaryimage","url":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/10\/python-wordpress.png","contentUrl":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/10\/python-wordpress.png","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/dk\/blog\/python-wordpress\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/dk\/"},{"@type":"ListItem","position":2,"name":"DevKinsta","item":"https:\/\/kinsta.com\/dk\/emner\/devkinsta\/"},{"@type":"ListItem","position":3,"name":"Pol\u00e9r dine Python-kundskaber ved at forbinde din app med WordPress"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/dk\/#website","url":"https:\/\/kinsta.com\/dk\/","name":"Kinsta\u00ae","description":"Hurtig, sikker, premium hostingl\u00f8sninger","publisher":{"@id":"https:\/\/kinsta.com\/dk\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/dk\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"da-DK"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/dk\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/dk\/","logo":{"@type":"ImageObject","inLanguage":"da-DK","@id":"https:\/\/kinsta.com\/dk\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/dk\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Danmark-122855885298660\/","https:\/\/x.com\/kinsta_dk","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\/dk\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987","name":"Salman Ravoof","image":{"@type":"ImageObject","inLanguage":"da-DK","@id":"https:\/\/kinsta.com\/dk\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","caption":"Salman Ravoof"},"description":"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.","sameAs":["https:\/\/salmanravoof.com","https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/","https:\/\/x.com\/salmanravoof"],"url":"https:\/\/kinsta.com\/dk\/blog\/author\/salmanravoof\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/posts\/46053","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/users\/117"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/comments?post=46053"}],"version-history":[{"count":12,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/posts\/46053\/revisions"}],"predecessor-version":[{"id":46832,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/posts\/46053\/revisions\/46832"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/46053\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/46053\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/46053\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/46053\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/46053\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/46053\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/46053\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/46053\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/46053\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/46053\/translations\/dk"},{"href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/46053\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/media\/46054"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/media?parent=46053"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/tags?post=46053"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/topic?post=46053"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}