{"componentChunkName":"component---src-templates-tag-js","path":"/tags/learning/","result":{"data":{"site":{"siteMetadata":{"title":"LoginRadius Blog"}},"allMarkdownRemark":{"totalCount":2,"edges":[{"node":{"fields":{"slug":"/engineering/wordpress-custom-login-form-part-1/"},"html":"<p>I often come across people and clients who would like to build their custom login, registration, and lost password form in WordPress instead of using the default wp-login.php page. It's probably because it's too wordpress-y.</p>\n<p>In this tutorial, I will demonstrate how to build a custom login form using the default functionality that wordpress gives us.</p>\n<ul>\n<li><a href=\"#buildlogin\">Building a Custom Login Form</a></li>\n<li><a href=\"#loginresponse\">Handling the Login Form Response</a></li>\n</ul>\n<h2 id=\"building-a-wordpress-login-form-out-of-the-box\" style=\"position:relative;\"><a href=\"#building-a-wordpress-login-form-out-of-the-box\" aria-label=\"building a wordpress login form out of the box permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Building a WordPress Login Form (Out of the box)</h2>\n<p>This is what WordPress gives us out of the box.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 574px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 79.79094076655052%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAIAAACZeshMAAAACXBIWXMAAAsTAAALEwEAmpwYAAABSUlEQVQoz42TsU7DMBCG+568QDfExM6MxMLEysTAwAOAhACpEogBVQUxhgoS3DRnOznHTuLyJyVQVU3aXydHOfvz+c7ngewWa2VS3bNgsNFLDXl6O9m/fPwUc61qz05wQoSA4yAcXoz2zh/O7t5spuHcCSaiVMmPKD65GR9ePV1PAuy1E6yUhpRSnOmY5FTM8yyF90+bYQRkZu99URRlWfpaC8hX3rc/mOqEjTEy5ShOYtLGldyY+bfKuV44xnlzZ2zBuVs1kzvJ8DvVDTOmpc4yY21ZrZkr/ZbIzloUxTAj7ao1yDWF6MsZBata1YArlgYQhYNtgbESIyOBZfCmyO+JORhNj18iMna129bhhUdiv8L1VM1tvSZmeB8cPX8lbNM+uFedx17dZfk2qG1JfATJGfW2J7pPCBGGoZiJ6LtWFIUYiTY+KvkDJA6JMgMgcv4AAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"wp-login\"\n        title=\"wp-login\"\n        src=\"/static/65a844891c904aa48a40be38b7735f76/86389/wp-login.png\"\n        srcset=\"/static/65a844891c904aa48a40be38b7735f76/86389/wp-login.png 574w\"\n        sizes=\"(max-width: 574px) 100vw, 574px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span><br>\nThere are quite a few different options available to make a custom login page. You can build a <a href=\"https://codex.wordpress.org/Shortcode_API\">shortcode</a> so that you could simply put [wp-login] or something you like on any page/post, make a page theme file and use that page to attach to a post/page, a widget could be a good solution too, or maybe you'd like to simply edit the existing form and add some pizzazz to it.</p>\n<p>I am going to show you all of this tutorial using the page-theme method because it is probably the easiest to implement for beginners. This will also give you an intro into page themes, if your not familiar with it.</p>\n<p>To start our theme, you will need to do the following:</p>\n<ol>\n<li>Install WordPress</li>\n<li>Navigate to your <em>wp-content/themes</em> folder and choose a theme to edit or install a new one</li>\n<li>create a file called <em>page-login.php</em> in the theme directory</li>\n<li>Next open that file with a text editor of your choosing and add the following at the top of the php file.</li>\n</ol>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"php\" data-index=\"0\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;lt;?php</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk3\">/*</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk3\">Template Name: Login</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk3\">*/</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\"> </span></span>\n<span class=\"grvsc-line\"><span class=\"mtk11\">get_header</span><span class=\"mtk1\">(); ?</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\"> </span></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;lt;div id=</span><span class=\"mtk8\">&quot;primary&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk4\">class</span><span class=\"mtk1\">=</span><span class=\"mtk8\">&quot;content-area&quot;</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;lt;div id=</span><span class=\"mtk8\">&quot;content&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk4\">class</span><span class=\"mtk1\">=</span><span class=\"mtk8\">&quot;site-content&quot;</span><span class=\"mtk1\"> role=</span><span class=\"mtk8\">&quot;main&quot;</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\"> </span></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;lt;/div</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt;</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;lt;!-- </span><span class=\"mtk3\">#content --&amp;amp;amp;gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;lt;/div</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt;</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;lt;!-- </span><span class=\"mtk3\">#primary --&amp;amp;amp;gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\"> </span></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;lt;?php </span><span class=\"mtk11\">get_sidebar</span><span class=\"mtk1\">(); ?</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;lt;?php </span><span class=\"mtk11\">get_footer</span><span class=\"mtk1\">(); ?</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt;</span></span></code></pre>\n<p>To initialize this page template, make sure to activate the theme you've selected in \"Appearance/Themes\" in your admin dashboard and then navigate to a page or post. On the right hand side of your page/post editor you should now see a dropdown available for template under \"Page Attributes\". Change your template to \"Login\" or to the name that you specified in \"Template Name:\" and that will attach that page theme to this page/post.</p>\n<p>Now we're ready to start editing this page-login.php template file. So first open this file in your favorite editor and Let's get a login page started.</p>\n<p>To quickly show you how to get this login on the page Let's paste the following code between the div with id of content.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"php\" data-index=\"1\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;lt;div id=</span><span class=\"mtk8\">&quot;primary&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk4\">class</span><span class=\"mtk1\">=</span><span class=\"mtk8\">&quot;content-area&quot;</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;lt;div id=</span><span class=\"mtk8\">&quot;content&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk4\">class</span><span class=\"mtk1\">=</span><span class=\"mtk8\">&quot;site-content&quot;</span><span class=\"mtk1\"> role=</span><span class=\"mtk8\">&quot;main&quot;</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;lt;?php </span><span class=\"mtk11\">wp_login_form</span><span class=\"mtk1\">(); ?</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;lt;/div</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt;</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;lt;!-- </span><span class=\"mtk3\">#content --&amp;amp;amp;gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;lt;/div</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt;</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;lt;!-- </span><span class=\"mtk3\">#primary --&amp;amp;amp;gt;</span></span></code></pre>\n<p>Look at what that small piece of code do</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 620px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 47.096774193548384%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAZElEQVQoz8XRTQuAIAwGYP//H9WDuA+WCTlrF6lDZOSh9zAEeZibznuvqvunuBCCYVkEENac7Vx7RMTqALfWmDmlVEq5Yia2qzEmIns/WBC33u1ZnhgRYoxvwM3MUwv7A8/88wGsLxStC5PBOgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"custom-login\"\n        title=\"custom-login\"\n        src=\"/static/48eca8e7849771947eb5cf7f664a0d27/2a195/custom-login.png\"\n        srcset=\"/static/48eca8e7849771947eb5cf7f664a0d27/2a195/custom-login.png 620w\"\n        sizes=\"(max-width: 620px) 100vw, 620px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Now we need to set some arguments that we can provide to this form to customize it. Let's take a look at the documentation for <a href=\"https://developer.wordpress.org/reference/functions/wp_login_form/\">wp<em>login</em>form()</a></p>\n<p>In that document, it explains all the uses and arguments of wp<em>login</em>form(). Let's use those arguments section and see what happens. Paste the $args section shown in the wordpress doc right above our login form.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"php\" data-index=\"2\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;lt;?php </span><span class=\"mtk12\">$args</span><span class=\"mtk1\"> = </span><span class=\"mtk11\">array</span><span class=\"mtk1\">(</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk8\">&#39;echo&#39;</span><span class=\"mtk1\"> =</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt; </span><span class=\"mtk4\">true</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk8\">&#39;redirect&#39;</span><span class=\"mtk1\"> =</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt; ( </span><span class=\"mtk11\">is_ssl</span><span class=\"mtk1\">() ? </span><span class=\"mtk8\">&#39;https://&#39;</span><span class=\"mtk1\"> : </span><span class=\"mtk8\">&#39;http://&#39;</span><span class=\"mtk1\"> ) . </span><span class=\"mtk12\">$_SERVER</span><span class=\"mtk1\">[</span><span class=\"mtk8\">&#39;HTTP_HOST&#39;</span><span class=\"mtk1\">] . </span><span class=\"mtk12\">$_SERVER</span><span class=\"mtk1\">[</span><span class=\"mtk8\">&#39;REQUEST_URI&#39;</span><span class=\"mtk1\">],</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk8\">&#39;form_id&#39;</span><span class=\"mtk1\"> =</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt; </span><span class=\"mtk8\">&#39;loginform&#39;</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk8\">&#39;label_username&#39;</span><span class=\"mtk1\"> =</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt; </span><span class=\"mtk11\">__</span><span class=\"mtk1\">( </span><span class=\"mtk8\">&#39;Username&#39;</span><span class=\"mtk1\"> ),</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk8\">&#39;label_password&#39;</span><span class=\"mtk1\"> =</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt; </span><span class=\"mtk11\">__</span><span class=\"mtk1\">( </span><span class=\"mtk8\">&#39;Password&#39;</span><span class=\"mtk1\"> ),</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk8\">&#39;label_remember&#39;</span><span class=\"mtk1\"> =</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt; </span><span class=\"mtk11\">__</span><span class=\"mtk1\">( </span><span class=\"mtk8\">&#39;Remember Me&#39;</span><span class=\"mtk1\"> ),</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk8\">&#39;label_log_in&#39;</span><span class=\"mtk1\"> =</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt; </span><span class=\"mtk11\">__</span><span class=\"mtk1\">( </span><span class=\"mtk8\">&#39;Log In&#39;</span><span class=\"mtk1\"> ),</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk8\">&#39;id_username&#39;</span><span class=\"mtk1\"> =</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt; </span><span class=\"mtk8\">&#39;user_login&#39;</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk8\">&#39;id_password&#39;</span><span class=\"mtk1\"> =</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt; </span><span class=\"mtk8\">&#39;user_pass&#39;</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk8\">&#39;id_remember&#39;</span><span class=\"mtk1\"> =</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt; </span><span class=\"mtk8\">&#39;rememberme&#39;</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk8\">&#39;id_submit&#39;</span><span class=\"mtk1\"> =</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt; </span><span class=\"mtk8\">&#39;wp-submit&#39;</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk8\">&#39;remember&#39;</span><span class=\"mtk1\"> =</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt; </span><span class=\"mtk4\">true</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk8\">&#39;value_username&#39;</span><span class=\"mtk1\"> =</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt; </span><span class=\"mtk8\">&#39;&#39;</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk8\">&#39;value_remember&#39;</span><span class=\"mtk1\"> =</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt; </span><span class=\"mtk4\">false</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">); ?</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;lt;?php </span><span class=\"mtk11\">wp_login_form</span><span class=\"mtk1\">( </span><span class=\"mtk12\">$args</span><span class=\"mtk1\"> ); ?</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt;</span></span></code></pre>\n<p>It will look the same as the one we did earlier but, by customizing the arguments above, you can customize elements of the login form.</p>\n<h2 id=\"handling-the-login-form-response-custom\" style=\"position:relative;\"><a href=\"#handling-the-login-form-response-custom\" aria-label=\"handling the login form response custom permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Handling the login form response (Custom)</h2>\n<p>To handle the Login Form response we need to grab the $_POST parameters and login the user. You can create this as complex as you like, but I will demonstrate a simpler but effective method.</p>\n<p>For this action, we'll be using the <strong>after<em>setup</em>theme</strong> and <strong>wp_authenticate</strong>. I have added the following two functions within the functions.php file. The first function <strong>optional<em>email</em>address_login</strong> searches for a users email address based on their username, with this functionality you can log in using your email address or the username.</p>\n<p>The second function, <strong>login_user</strong>, handles the actual functionality of the login by receiving the $<em>POST parameters and passing them into the wp</em>signon method.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"php\" data-index=\"3\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk3\">/**</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk3\">* optional_email_address_login allows the user</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk3\">* to log in with a email address as well as a username</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk3\">* </span><span class=\"mtk4\">@param</span><span class=\"mtk3\"> </span><span class=\"mtk4\">string</span><span class=\"mtk3\"> &amp;amp;amp;amp;$username username or email</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk3\">* </span><span class=\"mtk4\">@param</span><span class=\"mtk3\"> </span><span class=\"mtk4\">string</span><span class=\"mtk3\"> &amp;amp;amp;amp;$password password</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk3\">*/</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">function</span><span class=\"mtk1\"> </span><span class=\"mtk11\">optional_email_address_login</span><span class=\"mtk1\">( &amp;amp;amp;amp;</span><span class=\"mtk12\">$username</span><span class=\"mtk1\">, &amp;amp;amp;amp;</span><span class=\"mtk12\">$password</span><span class=\"mtk1\"> ) {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk12\">$user</span><span class=\"mtk1\"> = </span><span class=\"mtk11\">get_user_by</span><span class=\"mtk1\">( </span><span class=\"mtk8\">&#39;email&#39;</span><span class=\"mtk1\">, </span><span class=\"mtk12\">$username</span><span class=\"mtk1\"> );</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">if</span><span class=\"mtk1\"> ( ! </span><span class=\"mtk11\">empty</span><span class=\"mtk1\">( </span><span class=\"mtk12\">$user</span><span class=\"mtk1\">-</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt;user_login ) )</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">{</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk12\">$username</span><span class=\"mtk1\"> = </span><span class=\"mtk12\">$user</span><span class=\"mtk1\">-</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt;user_login;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">}</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">}</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk3\">// Allows the use of email logins</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk11\">add_action</span><span class=\"mtk1\">( </span><span class=\"mtk8\">&#39;wp_authenticate&#39;</span><span class=\"mtk1\">, </span><span class=\"mtk8\">&#39;optional_email_address_login&#39;</span><span class=\"mtk1\">, </span><span class=\"mtk7\">1</span><span class=\"mtk1\">, </span><span class=\"mtk7\">2</span><span class=\"mtk1\"> );</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\"> </span></span>\n<span class=\"grvsc-line\"><span class=\"mtk3\">/**</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk3\">* login_user handles the $_POST array and logs in users</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk3\">*/</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">function</span><span class=\"mtk1\"> </span><span class=\"mtk11\">login_user</span><span class=\"mtk1\">() {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">if</span><span class=\"mtk1\"> ( ! </span><span class=\"mtk11\">is_user_logged_in</span><span class=\"mtk1\">() ) {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk12\">$creds</span><span class=\"mtk1\"> = </span><span class=\"mtk11\">array</span><span class=\"mtk1\">();</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk12\">$creds</span><span class=\"mtk1\">[</span><span class=\"mtk8\">&#39;user_login&#39;</span><span class=\"mtk1\">] = </span><span class=\"mtk11\">isset</span><span class=\"mtk1\">( </span><span class=\"mtk12\">$_POST</span><span class=\"mtk1\">[</span><span class=\"mtk8\">&#39;log&#39;</span><span class=\"mtk1\">] ) ? </span><span class=\"mtk12\">$_POST</span><span class=\"mtk1\">[</span><span class=\"mtk8\">&#39;log&#39;</span><span class=\"mtk1\">] : </span><span class=\"mtk8\">&#39;&#39;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk12\">$creds</span><span class=\"mtk1\">[</span><span class=\"mtk8\">&#39;user_password&#39;</span><span class=\"mtk1\">] = </span><span class=\"mtk11\">isset</span><span class=\"mtk1\">( </span><span class=\"mtk12\">$_POST</span><span class=\"mtk1\">[</span><span class=\"mtk8\">&#39;pwd&#39;</span><span class=\"mtk1\">] ) ? </span><span class=\"mtk12\">$_POST</span><span class=\"mtk1\">[</span><span class=\"mtk8\">&#39;pwd&#39;</span><span class=\"mtk1\">] : </span><span class=\"mtk8\">&#39;&#39;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk12\">$creds</span><span class=\"mtk1\">[</span><span class=\"mtk8\">&#39;remember&#39;</span><span class=\"mtk1\">] = </span><span class=\"mtk11\">isset</span><span class=\"mtk1\">( </span><span class=\"mtk12\">$_POST</span><span class=\"mtk1\">[</span><span class=\"mtk8\">&#39;rememberme&#39;</span><span class=\"mtk1\">] ) ? </span><span class=\"mtk4\">true</span><span class=\"mtk1\"> : </span><span class=\"mtk4\">false</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk12\">$user</span><span class=\"mtk1\"> = </span><span class=\"mtk11\">wp_signon</span><span class=\"mtk1\">( </span><span class=\"mtk12\">$creds</span><span class=\"mtk1\">, </span><span class=\"mtk4\">false</span><span class=\"mtk1\"> );</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\"> </span></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">if</span><span class=\"mtk1\"> ( </span><span class=\"mtk11\">is_wp_error</span><span class=\"mtk1\">( </span><span class=\"mtk12\">$user</span><span class=\"mtk1\"> ) ) {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk11\">error_log</span><span class=\"mtk1\">( </span><span class=\"mtk12\">$user</span><span class=\"mtk1\">-</span><span class=\"mtk4\">&</span><span class=\"mtk1\">amp;amp;amp;gt;</span><span class=\"mtk11\">get_error_message</span><span class=\"mtk1\">() );</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">}</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">}</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">}</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk3\">// Run login_user before headers and cookies are sent</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk11\">add_action</span><span class=\"mtk1\">( </span><span class=\"mtk8\">&#39;after_setup_theme&#39;</span><span class=\"mtk1\">, </span><span class=\"mtk8\">&#39;login_user&#39;</span><span class=\"mtk1\"> );</span></span></code></pre>\n<p>In this example I have used the default WordPress login form that you could customize and style to your desire. In the next blog, I will be demonstrating how to build a login form that is fully customized. We won’t be using the provided wordpress functions!</p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n  .dark-default-dark {\n    background-color: #1E1E1E;\n    color: #D4D4D4;\n  }\n  .dark-default-dark .mtk4 { color: #569CD6; }\n  .dark-default-dark .mtk1 { color: #D4D4D4; }\n  .dark-default-dark .mtk3 { color: #6A9955; }\n  .dark-default-dark .mtk11 { color: #DCDCAA; }\n  .dark-default-dark .mtk8 { color: #CE9178; }\n  .dark-default-dark .mtk12 { color: #9CDCFE; }\n  .dark-default-dark .mtk15 { color: #C586C0; }\n  .dark-default-dark .mtk7 { color: #B5CEA8; }\n</style>","frontmatter":{"date":"March 01, 2016","updated_date":null,"title":"Wordpress Custom Login Form Part 1","tags":["WordPress","Learning"],"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1,"src":"/static/400bee4b6d2f5f571912dff23f863421/6d161/wordpress-icon-150x1501-150x150.png","srcSet":"/static/400bee4b6d2f5f571912dff23f863421/6d161/wordpress-icon-150x1501-150x150.png 150w","sizes":"(max-width: 150px) 100vw, 150px"}}},"author":{"id":"Zoie Carnegie","github":null,"avatar":null}}}},{"node":{"fields":{"slug":"/engineering/learning-how-to-code/"},"html":"<p>When you work for a tech company in an office capacity, it feels like everyone around you is speaking another language. Which they are, most of their work exists in coding language. To feel more relevant, I signed up on <a href=\"https://www.codecademy.com/\">codecademy.com</a> and started working on their beginner courses (for free! you should try it!).</p>\n<p>Here are some things I have learned about coding:</p>\n<ol>\n<li>There are many different ways to code. Not every website or app is made using the same terms or patterns, programmers and developers have options for how they want to format their content, and how they want to communicate with their computer.</li>\n<li>Coding is more about seeing what you want in your head than about math. Deciding exactly what you want and communicating it is the big struggle. Having your website/app be capable of computing things is optional, but the layout is mandatory. (Not to mention the most noticeable aspect of your site).</li>\n<li>Code is like a language. The words and punctuation must be learned for each coding language. Though they can be linked to English words (like “p” for a new paragraph), you have to be able to pull them up quick in your mind. As with any language, repetition is key to recognition.</li>\n<li>You don’t have to start from scratch (but you can). There are frameworks available, like Bootstrap, which have some existing templates you can draw from. This helps you when you are constructing your site, so that you can set up your layout quicker, and have more time to work on your content.</li>\n<li>\n<p>There are some areas of knowledge that you don’t need to memorize, but having an understanding of what they do will be helpful in coding:</p>\n<ol>\n<li>The hexi-decimal system (and how it relates to color)</li>\n<li>Binary code</li>\n<li>ASCII</li>\n</ol>\n</li>\n<li>Once you learn some of the basics, websites you see every day will start to seem simpler. You will be able to pick out some of their elements, and if you look at their bare code, you will recognize how they come together.</li>\n<li>The world of coders is large and easy to access. If you have questions, there is someone online who is willing and eager to answer. This is not a skill that anyone was born with, and due to new languages etc, everyone is still learning. </li>\n</ol>\n<p>I hope that this list has contributed to your knowledge, and would encourage you to check online for available resources to expand (or begin) your abilities in coding.</p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n</style>","frontmatter":{"date":"December 29, 2015","updated_date":null,"title":"Learning How to Code","tags":["Learning","Coding","Learning resources"],"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1,"src":"/static/26a66e05ab78493dc6d84d3afe0d8a82/630fb/begin-code-300x300.png","srcSet":"/static/26a66e05ab78493dc6d84d3afe0d8a82/69585/begin-code-300x300.png 200w,\n/static/26a66e05ab78493dc6d84d3afe0d8a82/630fb/begin-code-300x300.png 300w","sizes":"(max-width: 300px) 100vw, 300px"}}},"author":{"id":"Carling","github":null,"avatar":null}}}}]}},"pageContext":{"tag":"Learning"}},"staticQueryHashes":["1171199041","1384082988","2100481360","23180105","528864852"]}