{"id":230498,"date":"2022-12-12T19:54:00","date_gmt":"2022-12-12T16:54:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230498"},"modified":"2022-12-07T11:19:14","modified_gmt":"2022-12-07T08:19:14","slug":"en-strategi-foer-att-initiera-plugininstaellningar","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/en-strategi-foer-att-initiera-plugininstaellningar\/","title":{"rendered":"En strategi f\u00f6r att initiera plugininst\u00e4llningar"},"content":{"rendered":"\n<p>N\u00e4r du arbetar med ett plugin som erbjuder en sida f\u00f6r dess inst\u00e4llningar, finns det flera s\u00e4tt att spara och h\u00e4mta informationen.<\/p>\n<p>Du kan:<\/p>\n<ul>\n<li>anv\u00e4nd <strong><a href=\"https:\/\/codex.wordpress.org\/Settings_API\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Inst\u00e4llningar API<\/a><\/strong> ,<\/li>\n<li>anv\u00e4nd en anpassad sida och anrop som \u00e4r en hybrid av de tv\u00e5,<\/li>\n<li>anv\u00e4nda n\u00e5gon typ av hybrid mellan <strong><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_submenu_page\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">en undermenysida<\/a><\/strong> (eller <strong><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_menu_page\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">en menysida<\/a><\/strong>) och annan funktionalitet.<\/li>\n<\/ul>\n<p>Ju mer jag har arbetat med WordPress, desto mindre och mindre bryr jag mig om att anv\u00e4nda API:et f\u00f6r inst\u00e4llningar och v\u00e4ljer att g\u00e5 med lite hybrid tillv\u00e4gag\u00e5ngss\u00e4tt.<\/p>\n<p>Beroende p\u00e5 projektets krav kommer genomf\u00f6randet att variera; dock f\u00f6rs\u00f6ker jag anv\u00e4nda ett relativt konsekvent s\u00e4tt att skapa funktionaliteten.<\/p>\n<p>Och \u00e4ven om det h\u00e4r inl\u00e4gget inte kommer att g\u00e5 in p\u00e5 de olika s\u00e4tt som jag skapar mina sidor, relaterade klasser och s\u00e5 vidare p\u00e5, kommer det att erbjuda ett s\u00e4tt som du kan g\u00e5 tillv\u00e4ga f\u00f6r att initiera plugininst\u00e4llningar n\u00e4r du arbetar med ditt projekt eller ett projekt f\u00f6r n\u00e5gon annan.<\/p>\n<h2>Initierar plugin-inst\u00e4llningar<\/h2>\n<p>F\u00f6r det h\u00e4r inl\u00e4gget, anta att kraven kr\u00e4ver att v\u00e4rdena f\u00f6r en sida lagras som en associativ array som saneras och serialiseras inifr\u00e5n plugin-programmet.<\/p>\n<p>F\u00f6rutom de saneringsfunktioner som du kommer att beh\u00f6va, vet du ocks\u00e5 att du kommer att arbeta med:<\/p>\n<ol>\n<li>alternativtabellen,<\/li>\n<li>och, som s\u00e5dan, en unik nyckel f\u00f6r alternativen lagrade i alternativtabellen<\/li>\n<\/ol>\n<p>Nu inom ramen f\u00f6r objektorienterad programmering har jag normalt flera klasser inst\u00e4llda f\u00f6r att hantera all denna funktionalitet, men jag \u00e4r fr\u00e4mst intresserad av att visa ett s\u00e4tt att initiera plugininst\u00e4llningar.<\/p>\n<h3>Men varf\u00f6r?<\/h3>\n<p>Om du laddar en sida som \u00e4r avsedd att h\u00e4mta alternativ fr\u00e5n databasen och v\u00e4rdena inte har initierats, kommer du att se varningar p\u00e5 sk\u00e4rmen, eller n\u00e5got dyker upp i din fels\u00f6kningsloggfil.<\/p>\n<p>Allt detta beror p\u00e5 hur du har din lokala installation konfigurerad samt hur din v\u00e4rd har sin konfiguration definierad.<\/p>\n<p>Oavsett vilket, du vill se till att du har initierat plugin-inst\u00e4llningarna s\u00e5 att du \u00e5tminstone har raden inst\u00e4lld i databasen och initialv\u00e4rden eller tomma v\u00e4rden inst\u00e4llda f\u00f6r plugin.<\/p>\n<h3>Hur man g\u00f6r det<\/h3>\n<p>Som tidigare n\u00e4mnts, eftersom jag \u00e4r ett fan av att anv\u00e4nda klasser i mitt arbete brukar jag skapa en klass som \u00e4r ansvarig f\u00f6r att l\u00e4sa och skriva v\u00e4rden till databasen. Och detta inkluderar initialisering av plugin-inst\u00e4llningar.<\/p>\n<p>F\u00f6r att g\u00f6ra detta arbetar jag vanligtvis med f\u00f6ljande process:<\/p>\n<ol>\n<li>initiera klassen,<\/li>\n<li>kontrollera om det finns ett alternativ i databasen,<\/li>\n<li>om det inte g\u00f6r det, initiera det,<\/li>\n<li>i s\u00e5 fall, g\u00f6r ingenting.<\/li>\n<\/ol>\n<p>Den f\u00f6rsta koden f\u00f6r att g\u00f6ra detta kan se ut ungef\u00e4r <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/5a9940d1364b4d15e1de755f78bd0a79#file-00-initialize-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">s\u00e5 h\u00e4r<\/a><\/strong> :<\/p>\n<pre><code>&lt;?php\n\/**\n * Initializes the plugin settings fo ruse throughout the rest of the plugin.\n *\/\nprivate function initialize() {\n    $settings = [\n        'username' =&gt; '',\n        'user-info' =&gt; [\n              'location' =&gt; '',\n              'id-number' =&gt; '',\n              'first-name' =&gt; '',\n              'last-name' =&gt; '',\n        ],\n        'short-bio' =&gt; '',\n    ];\n    update_option('acme-plugin-settings', $settings);\n}\n<\/code><\/pre>\n<p>Men eftersom detta har sin egen funktion kan det anropas inom konstrukt\u00f6ren f\u00f6r din klass, eller s\u00e5 kan du markera det som <strong>offentligt<\/strong> och kalla det utanf\u00f6r klassen. F\u00f6r det h\u00e4r inl\u00e4gget l\u00e4gger jag dock en uppmaning till det <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/5a9940d1364b4d15e1de755f78bd0a79#file-01-constructor-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">i konstruktorn<\/a><\/strong> :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Intiializes the properties of the class, primarily the array of settings.\n *\/\npublic function __construct() {\n    if (false === get_option('acme-plugin-settings')) {\n        $this-&gt;initialize();\n    }\n    \/\/ More to come...\n}\n<\/code><\/pre>\n<p>Och n\u00e4r v\u00e4rdena har initierats kan ett attribut p\u00e5 klassen <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/5a9940d1364b4d15e1de755f78bd0a79#file-02-final-constructor-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">st\u00e4llas in<\/a><\/strong> :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Intiializes the properties of the class, primarily the array of settings.\n *\/\npublic function __construct() {\n    if (false === get_option('acme-plugin-settings')) {\n        $this-&gt;initialize();\n    }\n    $this-&gt;settings = get_option('acme-plugin-settings');\n}\n<\/code><\/pre>\n<p>\u00c4ven om det finns ett fall att g\u00f6ra att detta inte b\u00f6r g\u00f6ras i konstruktorn, gillar jag att ha klassegenskaper initierade inom konstruktorn f\u00f6r den n\u00e4mnda klassen.<\/p>\n<p>Och eftersom klassen \u00e4r ansvarig f\u00f6r att uppr\u00e4tth\u00e5lla en referens till inst\u00e4llningarna, \u00e4r det vettigt att initiera inst\u00e4llningarna h\u00e4r.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Det h\u00e4r inl\u00e4gget t\u00e4cker inte olika s\u00e4tt att skapa alternativsidor, det erbjuder ett s\u00e4tt du kan g\u00e5 tillv\u00e4ga f\u00f6r att initiera plugininst\u00e4llningar.<\/p>\n","protected":false},"author":1,"featured_media":234934,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[838,901,807,724,868],"tags":[1173],"class_list":["post-230498","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guide-foer-nyboerjare","category-koda","category-php-9","category-utvecklaren","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230498","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=230498"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230498\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/234934"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=230498"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=230498"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=230498"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}