{"id":228485,"date":"2022-10-26T12:48:00","date_gmt":"2022-10-26T09:48:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228485"},"modified":"2022-11-09T02:45:50","modified_gmt":"2022-11-08T23:45:50","slug":"skapa-wordpress-anvaendare-programmerat","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/skapa-wordpress-anvaendare-programmerat\/","title":{"rendered":"Skapa WordPress-anv\u00e4ndare programmerat"},"content":{"rendered":"\n<p>Det h\u00e4r inl\u00e4gget \u00e4r den andra delen i en serie jag jobbar igenom som talar om WordPress <a href=\"https:\/\/tommcfarlin.com\/tag\/metadata-association\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Metadata Association<\/a>, och den f\u00f6rsta delen av detta inneb\u00e4r att arbeta igenom processen att <a href=\"https:\/\/tommcfarlin.com\/create-a-user-in-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">programmatiskt<\/a> skapa WordPress-anv\u00e4ndare (men det har g\u00e5tt fem \u00e5r!).<\/p>\n<p>Jag har pratat om att g\u00f6ra det h\u00e4r f\u00f6rut, men saker och ting f\u00f6r\u00e4ndras med tiden n\u00e4r vi f\u00e5r mer erfarenhet, eller hur? Och n\u00e4r jag arbetar igenom en serie som denna tror jag att det hj\u00e4lper att ha en upps\u00e4ttning krav som vi \u00e5tminstone kan f\u00f6lja f\u00f6r att simulera hur det kan vara att f\u00e5 detta att h\u00e4nda i ett riktigt projekt.<\/p>\n<p>S\u00e5 i det h\u00e4r inl\u00e4gget kommer vi att ta en titt p\u00e5 f\u00f6ljande:<\/p>\n<ol>\n<li>ta emot anv\u00e4ndarinformation i ett visst dataformat,<\/li>\n<li>Identifiera vilken information som kr\u00e4vs f\u00f6r att skapa en anv\u00e4ndare,<\/li>\n<li>Skapa anv\u00e4ndaren,<\/li>\n<li>Se till att v\u00e5r kod \u00e4r i niv\u00e5 med kodningsstandarder och l\u00e4sbarhet.<\/li>\n<\/ol>\n<p>Det l\u00e5ter som mycket, \u00e4ven om jag inte har f\u00f6r avsikt att g\u00f6ra detta till ett l\u00e5ngt inl\u00e4gg. Som sagt, om det h\u00e4r \u00e4r n\u00e5got du vill l\u00e4ra dig att t\u00e4nka igenom eller ta itu med, s\u00e5 \u00e4r det h\u00e4r.<\/p>\n<h2>Skapa WordPress-anv\u00e4ndare<\/h2>\n<p>Antag att n\u00e5gon \u2013 kanske en kund eller kanske bara du sj\u00e4lv \u2013 som information som kommer att anv\u00e4ndas f\u00f6r att skapa en anv\u00e4ndare. Den beh\u00f6ver \u00e5tminstone f\u00f6ljande information:<\/p>\n<ol>\n<li>ett anv\u00e4ndarnamn,<\/li>\n<li>ett l\u00f6senord,<\/li>\n<li>en e-postadress.<\/li>\n<\/ol>\n<p>N\u00e4r det kommer till att skapa ett anv\u00e4ndarnamn tenderar jag att anv\u00e4nda e-postadressen som anv\u00e4ndarnamn ocks\u00e5 eftersom det \u00e4r n\u00e5got som garanterat \u00e4r unikt f\u00f6r n\u00e4stan alla som anv\u00e4nder kontot.<\/p>\n<p>S\u00e5 f\u00f6r den h\u00e4r handledningen \u00e4r det precis vad jag ska anv\u00e4nda. N\u00e4r det g\u00e4ller l\u00f6senordet kommer jag att prata om l\u00f6senordsgenerering ett \u00f6gonblick.<\/p>\n<p>Slutligen kan du anta att data du har kommer i vilken form som helst: Kanske \u00e4r det i JSON, kanske \u00e4r det i en CSV, kanske \u00e4r det i en XML. Oavsett vilket \u00e4r det upp till dig att analysera denna information till PHP s\u00e5 att du enkelt kan arbeta med informationen.<\/p>\n<p>F\u00f6r att g\u00f6ra det enkelt f\u00f6r det h\u00e4r inl\u00e4gget kommer jag att anta att vi har en enda post och att vi kommer att ha informationen tillg\u00e4nglig i en array. Detta betyder inte att det b\u00f6rjar i en array, men det betyder att vi s\u00e5 sm\u00e5ningom placerar det i en array.<\/p>\n<h3>1 Anv\u00e4ndarens information<\/h3>\n<p>Anta att vi har en person som heter &quot;Meghan&quot; som vi kommer att l\u00e4gga till i systemet. Vi har en e-postadress, och det \u00e4r allt.<\/p>\n<p>Ett exempel p\u00e5 persona (artistens rendering, f\u00f6rst\u00e5s \ud83d\ude42<\/p>\n<p>Men det \u00e4r okej. Det \u00e4r barbenet av vad vi beh\u00f6ver. S\u00e5 l\u00e5t oss ta <a href=\"https:\/\/gist.github.com\/tommcfarlin\/d0b38a220778882f23f9de7a69c420e6#file-00-user-information-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">denna information<\/a> :<\/p>\n<pre><code>&lt;?php\n\n$user_info = array(\n  'email'      =&gt; 'meghan@emaildomain.com',\n  'first_name' =&gt; 'Meghan',\n  'last_name'  =&gt; 'McFarlin',\n);\n<\/code><\/pre>\n<p>Och f\u00f6rvandla det till n\u00e5got vi kan anv\u00e4nda f\u00f6r att skapa ett konto.<\/p>\n<h3>2 Skapa kontot<\/h3>\n<p>Det f\u00f6rsta vi beh\u00f6ver g\u00f6ra \u00e4r att se till att en anv\u00e4ndare inte redan finns f\u00f6r den h\u00e4r e-postadressen. Om det g\u00f6r det, s\u00e5 \u00e5terkommer vi helt enkelt. Du kanske vill visa ett <a href=\"https:\/\/code.tutsplus.com\/series\/creating-a-custom-wordpress-messaging-system--cms-1105\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">inst\u00e4llningsmeddelande<\/a> eller n\u00e5gon annan typ av information f\u00f6r att l\u00e5ta slutanv\u00e4ndaren veta att du inte skapar det h\u00e4r kontot eftersom det redan finns.<\/p>\n<p>Men det ligger utanf\u00f6r ramen f\u00f6r detta inl\u00e4gg.<\/p>\n<p>Ist\u00e4llet kommer vi <a href=\"https:\/\/gist.github.com\/tommcfarlin\/d0b38a220778882f23f9de7a69c420e6#file-01-user-already-exists-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">att \u00e5terkomma<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/\/ Read the email address - if it's - invalid or the user exists, then return.\n$email = $user_info['email'];\nif (! filter_var( $email, FILTER_VALIDATE_EMAIL) || username_exists( $email)) {\n  return;\n}\n<\/code><\/pre>\n<p>Sedan igen, l\u00e5t oss anta att anv\u00e4ndaren inte existerar. Om hon inte g\u00f6r det \u2013 vilket hon inte borde (annars finns det ingen anledning till det h\u00e4r inl\u00e4gget \ud83d\ude0f) \u2013 s\u00e5 ska vi skapa ett konto \u00e5t henne.<\/p>\n<p>F\u00f6r att g\u00f6ra detta beh\u00f6ver vi hennes e-postadress och ett l\u00f6senord. Lyckligtvis \u00e4r det enkelt att <a href=\"https:\/\/gist.github.com\/tommcfarlin\/d0b38a220778882f23f9de7a69c420e6#file-02-setting-a-password-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">skapa ett l\u00f6senord<\/a> :<\/p>\n<pre><code>&lt;?php\n\n$password = wp_generate_password( 16, false );\n<\/code><\/pre>\n<p>S\u00e5 nu kan vi ta e-postadressen och l\u00f6senordet och <a href=\"https:\/\/gist.github.com\/tommcfarlin\/d0b38a220778882f23f9de7a69c420e6#file-03-creating-the-user-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">skapa anv\u00e4ndarkontot<\/a>.<\/p>\n<pre><code>&lt;?php\n\n\/\/ Grab the email and create a password.\n$email    = $user_info['email'];\n$password = wp_generate_password( 12, false );\n\n\/\/ Create the user and set her role.\n$user_id = wp_create_user( $email, $password, $email );\n\n\/\/ Set the user's role (and remove the previous role).\n$user = new WP_User( $user_id );\n$user-&gt;set_role( 'author' );\n<\/code><\/pre>\n<p>Notera i koden ovan att vi ocks\u00e5 anger rollen. S\u00e4ttet att g\u00f6ra detta \u00e4r att f\u00f6rst ta en instans av <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_user\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_User<\/a> och sedan med v\u00e5rt $user_id och sedan st\u00e4lla in <a href=\"https:\/\/codex.wordpress.org\/Roles_and_Capabilities\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">rollen<\/a>.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167649-61e7a6824dc60.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-167649-61e7a6824dc60.png\" alt=\"Skapa WordPress-anv\u00e4ndare programmerat\" ><\/a><\/p>\n<p>Jag v\u00e4ljer att anv\u00e4nda <strong>f\u00f6rfattare<\/strong>, men det finns en upps\u00e4ttning andra som du kan v\u00e4lja mellan (eller anv\u00e4nda vad som finns i din datastruktur).<\/p>\n<h4>3 Finns det inte mer i det?<\/h4>\n<p>Och med det b\u00f6r din anv\u00e4ndare skapas. En del av detta beror till stor del p\u00e5 kroken du har anv\u00e4nt, hur du har implementerat detta i din process och hur du till\u00e5ter en administrat\u00f6r att skapa konton.<\/p>\n<p>Det h\u00e4r \u00e4r ett mer avancerat \u00e4mne som jag s\u00e5 sm\u00e5ningom skulle vilja ta upp i ett framtida inl\u00e4gg. F\u00f6r att h\u00e5lla den h\u00e4r serien s\u00e5 direkt och s\u00e5 smal som m\u00f6jligt f\u00f6rs\u00f6ker jag h\u00e5lla mig s\u00e5 fokuserad p\u00e5 de centrala stegen som kr\u00e4vs.<\/p>\n<p>Allt annat kan implementeras eller kl\u00e4s upp kring vad som helst som beh\u00f6vs enligt projektets krav.<\/p>\n<h2>Det \u00e4r bara att skapa ett konto<\/h2>\n<p>Detta \u00e4r dock bara bearbetningen av att programmatiskt skapa WordPress-anv\u00e4ndare. I sj\u00e4lva verket \u00e4r detta bara att skapa en anv\u00e4ndare.<\/p>\n<p>F\u00f6r att skapa flera anv\u00e4ndare, anta att du har flera arrayer med information genom vilka du kan iterera och sedan skapa anv\u00e4ndarna. Implementeringen \u00e4r densamma \u00e4ven om den kommer att variera fr\u00e5n varje konto.<\/p>\n<p>Med det sagt, imorgon ska jag ta mig an att programmatiskt skapa inl\u00e4ggsinneh\u00e5ll programmatiskt. Och efter det kommer vi att prata om att relatera en given anv\u00e4ndare till det givna inl\u00e4ggets inneh\u00e5ll och vad vi kan g\u00f6ra med det (liksom varf\u00f6r detta ens skulle spela n\u00e5gon roll).<\/p>\n<h2>Serie inl\u00e4gg<\/h2>\n<ol>\n<li><a href=\"https:\/\/tommcfarlin.com\/wordpress-metadata-association\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPress Metadata Association: Hur man g\u00f6r det<\/a><\/li>\n<li><a href=\"https:\/\/tommcfarlin.com\/creating-wordpress-users\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Skapa WordPress-anv\u00e4ndare programmerat<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/sv\/wordpress-inlaeggstyper-en-abstraktion-foer-enheter\/\" title=\"WordPress-inl\u00e4ggstyper: en abstraktion f\u00f6r enheter\">WordPress-inl\u00e4ggstyper: en abstraktion f\u00f6r enheter<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/sv\/wordpress-metadata-association-relaterande-enheter\/\" title=\"WordPress Metadata Association: Relaterande enheter\">WordPress Metadata Association: Relaterande enheter<\/a><\/li>\n<\/ol>\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>Detta \u00e4r dock bara bearbetningen av att programmatiskt skapa WordPress-anv\u00e4ndare. I sj\u00e4lva verket \u00e4r detta bara att skapa en anv\u00e4ndare.<\/p>\n","protected":false},"author":1,"featured_media":220605,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[901,922,724,868],"tags":[1173],"class_list":["post-228485","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-koda","category-oevrig","category-utvecklaren","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228485","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=228485"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228485\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/220605"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=228485"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=228485"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=228485"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}