{"id":229691,"date":"2022-11-22T20:25:00","date_gmt":"2022-11-22T17:25:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229691"},"modified":"2022-11-09T15:57:51","modified_gmt":"2022-11-09T12:57:51","slug":"ladda-upp-filer-i-wordpress-revisited-del-1-kundsidan","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/ladda-upp-filer-i-wordpress-revisited-del-1-kundsidan\/","title":{"rendered":"Ladda upp filer i WordPress, Revisited: Del 1 &#8211; Kundsidan"},"content":{"rendered":"\n<p>F\u00f6r flera \u00e5r sedan skrev jag om hur man <a href=\"https:\/\/tommcfarlin.com\/upload-files-in-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">laddar upp filer i WordPress<\/a> fr\u00e5n det administrativa omr\u00e5det. Det h\u00e4r inl\u00e4gget \u00e4r praktiskt taget en uppdatering av det inl\u00e4gget, men det t\u00e4cker nya \u00f6verv\u00e4ganden som jag g\u00f6r och n\u00e5gra andra processer som jag tycker \u00e4r n\u00f6dv\u00e4ndiga.<\/p>\n<p>F\u00f6r det h\u00e4r inl\u00e4gget kommer jag att arbeta bort exemplet med att ladda upp en PDF-fil och hur man \u00e4ven g\u00f6r den tillg\u00e4nglig i mediebiblioteket.<\/p>\n<p>Genom att g\u00f6ra det planerar jag ocks\u00e5 att t\u00e4cka n\u00e5gra \u00f6verv\u00e4ganden som b\u00f6r g\u00f6ras p\u00e5 klientsidan och serversidan samt saker att leta efter n\u00e4r n\u00e5gon \u00f6verf\u00f6r information \u00f6ver tr\u00e5den.<\/p>\n<h2>Ladda upp filer i WordPress (och till mediebiblioteket)<\/h2>\n<p>Innan jag kommer till k\u00e4rnan i det h\u00e4r inl\u00e4gget antar jag att du har:<\/p>\n<ol>\n<li>En undermenysida eller administrat\u00f6rssida med en filinmatning,<\/li>\n<li>Att du \u00e4r r\u00e4tt inst\u00e4lld f\u00f6r att acceptera MIME-typer,<\/li>\n<li>Att du \u00e4r bekv\u00e4m med lite JavaScript,<\/li>\n<li>Och du \u00e4r bekv\u00e4m med att arbeta med anpassade meddelanden utanf\u00f6r standard WordPress API.<\/li>\n<\/ol>\n<p>Om s\u00e5 \u00e4r fallet b\u00f6r all kod vara relativt sj\u00e4lvf\u00f6rklarande (inte f\u00f6r att jag inte ska dela upp den bit f\u00f6r bit), men om n\u00e5got av ovanst\u00e5ende l\u00e5ter f\u00f6rvirrande kan inl\u00e4gget inneh\u00e5lla en del material som kr\u00e4ver lite mer forskning i Codex eller om JavaScript som jag kommer att tillhandah\u00e5lla h\u00e4r.<\/p>\n<p>Oavsett vilket kommer jag att g\u00f6ra det jag kan g\u00f6ra s\u00e5 omfattande som m\u00f6jligt.<\/p>\n<h3>1 Huvudid\u00e9n<\/h3>\n<p>Id\u00e9n med funktionen \u00e4r enkel: Du vill ge anv\u00e4ndaren m\u00f6jligheten att ladda upp PDF-filer via WordPress administrationsomr\u00e5de. Du vill ocks\u00e5 att filen ska finnas tillg\u00e4nglig i mediebiblioteket.<\/p>\n<p>M\u00f6jligheten att g\u00f6ra detta \u00e4r inte sv\u00e5rt, men det finns s\u00e4tt att f\u00f6rb\u00e4ttra anv\u00e4ndarens upplevelse som jag ocks\u00e5 skulle vilja ta upp i det h\u00e4r inl\u00e4gget (som att inte kunna ladda upp n\u00e5got f\u00f6rr\u00e4n filen har specificerats i inmatningsrutan, f\u00f6r exempel).<\/p>\n<h3>2 Anv\u00e4ndargr\u00e4nssnittet f\u00f6r att verifiera filtypen<\/h3>\n<p>F\u00f6rst, som jag sa \u00f6verst i inl\u00e4gget, utg\u00e5r jag fr\u00e5n att du har grunden lagd f\u00f6r administrationssidan i WordPress. Detta kan g\u00f6ras p\u00e5 vissa s\u00e4tt \u2013 jag har valt att anv\u00e4nda <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_submenu_page\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">en undermenysida<\/a>, men det finns n\u00e5gra s\u00e4tt detta kan g\u00f6ras.<\/p>\n<p>F\u00f6r det andra \u00e4r sidan enkel: den inneh\u00e5ller sidtiteln, ett filinmatningsf\u00e4lt och en &quot;Ladda upp&quot;-knapp som \u00e4r inaktiverad som standard:<\/p>\n<p>Observera att n\u00e4r jag f\u00f6rs\u00f6ker l\u00e4gga till en bild som inte \u00e4r en PDF f\u00e5r jag ett felmeddelande och knappen &quot;Ladda upp&quot; \u00e4r fortfarande inaktiverad:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-164805-61e76e82b59a7.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-164805-61e76e82b59a7.png\" alt=\"Ladda upp filer i WordPress, Revisited: Del 1 - Kundsidan\" ><\/a><\/p>\n<p>Men n\u00e4r jag l\u00e4gger till en fil som \u00e4r av den f\u00f6rv\u00e4ntade typen \u00e4r knappen &quot;Ladda upp&quot; aktiverad:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-164805-61e76e857097f.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-164805-61e76e857097f.png\" alt=\"Ladda upp filer i WordPress, Revisited: Del 1 - Kundsidan\" ><\/a><\/p>\n<p>Detta kr\u00e4ver n\u00e5gra saker:<\/p>\n<ul>\n<li>JavaScript som sniffar ut filtypen,<\/li>\n<li>Delar med synlighet som kan v\u00e4xlas dynamiskt via JavaScript,<\/li>\n<li>Och m\u00f6jligheten att aktivera eller inaktivera en filinmatningsknapp.<\/li>\n<\/ul>\n<p><strong>En viktig anm\u00e4rkning \u00e4r<\/strong> att <strong>p\u00e5 klientsidan:<\/strong> Vi kan bara anta att filen \u00e4r av r\u00e4tt filtyp baserat p\u00e5 dess till\u00e4gg. Vi m\u00e5ste g\u00f6ra mer arbete p\u00e5 serversidan f\u00f6r att s\u00e4kerst\u00e4lla att detta \u00e4r korrekt.<\/p>\n<p>Men po\u00e4ngen med att kontrollera p\u00e5 klientsidan f\u00f6r att se till att vi ger den b\u00e4sta m\u00f6jliga upplevelsen genom aviseringsmeddelanden och aktivera eller inaktivera alternativ baserat p\u00e5 typen av fil.<\/p>\n<h3>3 Verifiera filtypen p\u00e5 klientsidan<\/h3>\n<p>Anta att vi f\u00f6r det h\u00e4r exemplet har en partial som \u00e5terges n\u00e4r vi f\u00f6rs\u00f6ker ladda upp en fil som inte \u00e4r en PDF. Som standard har beh\u00e5llaren en <strong>style=&quot;display:none;&quot;<\/strong> attribut som vi kommer att manipulera via JavaScript inom kort:<\/p>\n<pre><code>&lt;?php\n\/**\n * Displays whenever a person tries to upload a file that isn't a PDF. This is toggled via JavaScript.\n *\/\n?&gt;\n\n&lt;div id=\"invalid-file-message\" class=\"error notice is-dismissible\" style=\"display:none;\"&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;\n<\/code><\/pre>\n<p>Observera att denna del har ett ID f\u00f6r <strong>invalid-file-message<\/strong>. Detta \u00e4r lite generaliserat eftersom du kanske vill prefixa det med n\u00e5got annat, men f\u00f6r detta inl\u00e4ggs syfte f\u00f6rst\u00e5r du id\u00e9n.<\/p>\n<p>F\u00f6r att v\u00e4xla synligheten f\u00f6r detta meddelande m\u00e5ste du st\u00e4lla in en hanterare i JavaScript f\u00f6r att \u00f6vervaka f\u00f6r\u00e4ndringen i filinmatningselementet.<\/p>\n<h3>4 \u00d6vervaka filinmatningselementet<\/h3>\n<p>Vid det h\u00e4r laget m\u00e5ste det finnas en JavaScript-fil som \u00f6vervakar v\u00e4rdet p\u00e5 filinmatningselementets <strong>\u00e4ndringsh\u00e4ndelse<\/strong> s\u00e5 att den kan avg\u00f6ra vilken \u00e5tg\u00e4rd som ska vidtas.<\/p>\n<p>Ta en titt p\u00e5 <a href=\"https:\/\/gist.github.com\/tommcfarlin\/79c7f788488e6dc84079fcf3795fa417#file-01-montorfileupload-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">den h\u00e4r koden:<\/a><\/p>\n<p>Denna kod kommer att leta efter v\u00e4rdet p\u00e5 inmatningsf\u00e4ltet. Om filtypen inte matchar <strong>pdf<\/strong> kommer den att v\u00e4xla synligheten f\u00f6r felmeddelandet ovan; annars visas uppladdningsknappen.<\/p>\n<p>Och kom ih\u00e5g att det \u00e4r bra att k\u00f6a det h\u00e4r skriptet endast i administrationsomr\u00e5det och p\u00e5 <a href=\"https:\/\/gist.github.com\/tommcfarlin\/79c7f788488e6dc84079fcf3795fa417#file-02-enqueue-file-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sidan som det kr\u00e4vs<\/a> :<\/p>\n<pre><code>&lt;?php\n\npublic function enqueue()\n{\n    if (!is_admin() 'acme-upload-pdf' !== get_current_screen()-&gt;id) {\n        return;\n    }\n\n    wp_enqueue_script(\n        'acme-upload-pdf-admin',\n        $this-&gt;pluginUrl. 'assets\/scripts\/admin.js',\n        ['jquery'],\n    );\n}\n<\/code><\/pre>\n<p>Allt detta kommer att se till att din plugin registrerar skriptet korrekt p\u00e5 sidan d\u00e4r det beh\u00f6vs, ingen annanstans, och att det kontrolleras korrekt f\u00f6r att s\u00e4kerst\u00e4lla att filen som specificeras \u00e4r av r\u00e4tt typ.<\/p>\n<h2>Men det finns mer<\/h2>\n<p>Ursprungligen skulle detta vara ett inl\u00e4gg, men m\u00e4ngden inneh\u00e5ll f\u00f6r att kr\u00e4va allt skulle ta f\u00f6r l\u00e5ng tid att s\u00e5lla igenom (\u00e5tminstone enligt min mening). S\u00e5 jag f\u00f6rs\u00f6ker g\u00f6ra det lite l\u00e4ttare att f\u00f6lja genom att dela upp det i ett par inl\u00e4gg.<\/p>\n<p>Som tidigare n\u00e4mnts finns det bara s\u00e5 mycket vi kan g\u00f6ra p\u00e5 kundsidan. Visst, det finns steg som weUplo kan vidta f\u00f6r att f\u00f6rb\u00e4ttra anv\u00e4ndarupplevelsen, men det \u00e4r inte det s\u00e4kraste, och det finns mer arbete att g\u00f6ra p\u00e5 serversidan.<\/p>\n<p>I den andra halvan av den h\u00e4r serien kommer jag att titta p\u00e5 PHP som kr\u00e4vs f\u00f6r att hantera uppladdningen av filer och g\u00f6ra det s\u00e4kert.<\/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>N\u00e4r man tittar p\u00e5 att ladda upp filer i WordPress \u00e4r det viktigt att t\u00e4nka p\u00e5 anv\u00e4ndarens upplevelse och s\u00e4kerhetsaspekterna ocks\u00e5.<\/p>\n","protected":false},"author":1,"featured_media":164806,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[848,901,724,868],"tags":[1173],"class_list":["post-229691","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handledningar","category-koda","category-utvecklaren","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/229691","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=229691"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/229691\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/164806"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=229691"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=229691"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=229691"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}