{"id":229583,"date":"2022-11-19T17:02:00","date_gmt":"2022-11-19T14:02:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229583"},"modified":"2022-11-19T17:03:55","modified_gmt":"2022-11-19T14:03:55","slug":"bygga-wordpress-administrationsskaermar-komponenter-design-etc","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/bygga-wordpress-administrationsskaermar-komponenter-design-etc\/","title":{"rendered":"Bygga WordPress-administrationssk\u00e4rmar (komponenter, design, etc.)"},"content":{"rendered":"\n<p>Jag pratar inte s\u00e5 mycket om design av anv\u00e4ndargr\u00e4nssnitt eftersom det inte \u00e4r min starka sida. Jag \u00e4r helt f\u00f6r m\u00e4nniskor som arbetar inom sina k\u00e4rnstyrkor och sedan anst\u00e4ller dem vid behov p\u00e5 projekt-f\u00f6r-projekt-basis (om designen inte redan finns).<\/p>\n<p>Men n\u00e4r det kommer till att arbeta med WordPress administrationssk\u00e4rmar \u00e4r det en skillnad, eller hur?<\/p>\n<p>Jag t\u00e4nker p\u00e5 att eftersom WordPress-administrationsomr\u00e5det har ett konsekvent utseende och k\u00e4nsla, b\u00f6r allt som \u00e4r byggt f\u00f6r att fungera inom administrationssk\u00e4rmen (som en inst\u00e4llningssk\u00e4rm) se s\u00e5 n\u00e4ra k\u00e4rnanv\u00e4ndargr\u00e4nssnittet som m\u00f6jligt.<\/p>\n<p>Alla h\u00e5ller inte med, och det framg\u00e5r av det stora utbudet av plugins som finns tillg\u00e4ngliga. Men det \u00e4r min inst\u00e4llning till det.<\/p>\n<p>Med j\u00e4mna mellanrum f\u00e5r jag fr\u00e5gan hur jag strukturerar projektens anv\u00e4ndargr\u00e4nssnitt n\u00e4r de beh\u00f6ver administrationssk\u00e4rmar och hur jag mappar dem till filer inom projektet.<\/p>\n<p>S\u00e5 jag t\u00e4nkte ta ett enkelt exempel och bryta ner det i detta korta inl\u00e4gg.<\/p>\n<h2>Bygga WordPress administrationssk\u00e4rmar<\/h2>\n<p>F\u00f6r det h\u00e4r inl\u00e4gget ska jag h\u00e5lla det enkelt. Det vill s\u00e4ga, sk\u00e4rmen kommer att best\u00e5 av det absoluta minimum av kontroller som vanligtvis utg\u00f6r en administrationssk\u00e4rm.<\/p>\n<p>Det \u00e4r:<\/p>\n<ul>\n<li>Meddelanden (framg\u00e5ng, fel eller meddelanden),<\/li>\n<li>Rubriker och inneh\u00e5ll<\/li>\n<li>Ing\u00e5ngskontroller<\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/WordPress_Nonces\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Nonce-<\/a> f\u00e4lt<\/li>\n<\/ul>\n<p>Du kan bli lite mer komplicerad med flikar, men ovanst\u00e5ende kommer att t\u00e4cka 99% av en grundl\u00e4ggande inst\u00e4llningssk\u00e4rm. Jag dyker inte in i <a href=\"https:\/\/codex.wordpress.org\/Settings_API\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Settings API<\/a> i det h\u00e4r inl\u00e4gget (jag har gjort <a href=\"https:\/\/tommcfarlin.com\/wordpress-settings-api-example\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">en hel serie<\/a> om det tidigare).<\/p>\n<p>Ist\u00e4llet handlar det enbart om ett s\u00e4tt att organisera filer s\u00e5 att de kan underh\u00e5llas under hela projektets livstid,<\/p>\n<h3>Bryter ner det<\/h3>\n<p>Innan jag tittar p\u00e5 hur filerna \u00e4r organiserade och anv\u00e4nds vill jag skissa p\u00e5 hur jag normalt begreppsm\u00e4ssigt det jag ser p\u00e5 sk\u00e4rmen som arbetar med den h\u00e4r delen av ett projekt.<\/p>\n<p>Som du kan se \u00e4r alla omr\u00e5den ovan t\u00e4ckta. Men hur dessa mappar till filer \u00e4r lite annorlunda. Som ett exempel ser katalogstrukturen ut ungef\u00e4r s\u00e5 h\u00e4r:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165140-61e777e4161e6.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165140-61e777e4161e6.png\" alt=\"Bygga WordPress-administrationssk\u00e4rmar (komponenter, design, etc.)\"><\/a><\/p>\n<p>Nu, beroende p\u00e5 hur du implementerar din l\u00f6sning, beror p\u00e5 hur dessa sk\u00e4rmar visas.<\/p>\n<p>Det vill s\u00e4ga, ibland \u00e4r det att anv\u00e4nda <strong>settings_mesasages()<\/strong> vad du kommer att anv\u00e4nda; andra g\u00e5nger kan du v\u00e4lja att manuellt anv\u00e4nda <strong>require_once<\/strong> eftersom allt beror p\u00e5 hur du bygger l\u00f6sningen.<\/p>\n<p>Det \u00e4r l\u00e4tt att argumentera f\u00f6r att det borde finnas ett s\u00e4tt att g\u00f6ra det p\u00e5, men i takt med att m\u00e4nniskors krav p\u00e5 hur de anv\u00e4nder WordPress f\u00f6r\u00e4ndras, liksom <a href=\"https:\/\/wordpress.mediadoma.com\/sv\/objektorienterad-programmering-i-wordpress-statement-of-work\/\" title=\"kraven och implementeringen\">kraven och implementeringen<\/a>.<\/p>\n<h2>Hur kan koden se ut?<\/h2>\n<p>Om du v\u00e4ljer att g\u00e5 utanf\u00f6r Settings API och genomf\u00f6ra din implementering kan uppm\u00e4rkningen se ut ungef\u00e4r s\u00e5 h\u00e4r:<\/p>\n<h3>1 Det fullst\u00e4ndiga anv\u00e4ndargr\u00e4nssnittet<\/h3>\n<pre><code>&lt;?php\n\/**\n * This is the parent administration UI. This includes a single partial for the messaging.\n *\/\n?&gt;\n&lt;div class=\"wrap\"&gt;\n    &lt;h1 class=\"wp-heading-inline\"&gt;Import New Item&lt;\/h1&gt;\n    &lt;?php include_once 'partials\/error-invalid-file.php'; ?&gt;\n    &lt;div id=\"acme-upload-new-item-pdf\"&gt;\n        &lt;form action=\"\" enctype=\"multipart\/form-data\" method=\"post\"&gt;\n            &lt;p&gt;Upload a PDF&lt;\/p&gt;\n            &lt;input type=\"file\" \/&gt;\n            &lt;?php submit_button( 'Upload' ); ?&gt;\n            &lt;?php wp_nonce_field( 'acme-upload', 'acme-importer' ); ?&gt;\n        &lt;\/form&gt;\n    &lt;\/div&gt;&lt;!-- #acme-upload-new-item-pdf --&gt;\n&lt;\/div&gt;&lt;!-- .wrap --&gt;<\/code><\/pre>\n<h4>2 Inkluderade meddelanden<\/h4>\n<pre><code>&lt;div id=\"invalid-file-message\" class=\"error notice is-dismissible\"&gt;\n    &lt;p&gt;You have attempted to upload an invalid file type.&lt;\/p&gt;\n    &lt;button type=\"button\" class=\"notice-dismiss\"&gt;\n        &lt;span class=\"screen-reader-text\"&gt;Dismiss this notice.&lt;\/span&gt;\n    &lt;\/button&gt;\n&lt;\/div&gt;&lt;!-- #invalid-file-message --&gt;<\/code><\/pre>\n<h2>Det h\u00e4r \u00e4r Barebones<\/h2>\n<p>&#8217;Observera att detta inte inkluderar internationalisering eller andra saker som kan kr\u00e4vas i ditt projekt. Det \u00e4r verkligen ett minimum.<\/p>\n<p>Men om inte annat ger det en id\u00e9 om hur du kan ta filerna och s\u00e4tta ihop dem.<\/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>Ett enkelt exempel p\u00e5 hur man g\u00e5r tillv\u00e4ga f\u00f6r att bygga WordPress-administrationssk\u00e4rmar genom att dela upp det i komponenter.<\/p>\n","protected":false},"author":1,"featured_media":220968,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[848,922,724,868],"tags":[1173],"class_list":["post-229583","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handledningar","category-oevrig","category-utvecklaren","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/229583","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=229583"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/229583\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/220968"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=229583"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=229583"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=229583"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}