{"componentChunkName":"component---src-pages-markdown-remark-fields-slug-js","path":"/engineering/wordpress-custom-login-form-part-1/","result":{"data":{"markdownRemark":{"id":"0c8fb1e2-8a9d-5ae4-b53f-941256884102","excerpt":"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…","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>","headings":[{"value":"Building a WordPress Login Form (Out of the box)","depth":2},{"value":"Handling the login form response (Custom)","depth":2}],"fields":{"slug":"/engineering/wordpress-custom-login-form-part-1/"},"frontmatter":{"metatitle":null,"metadescription":null,"description":null,"title":"Wordpress Custom Login Form Part 1","canonical":null,"date":"March 01, 2016","updated_date":null,"tags":["WordPress","Learning"],"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1,"src":"/static/400bee4b6d2f5f571912dff23f863421/d399c/wordpress-icon-150x1501-150x150.png","srcSet":"/static/400bee4b6d2f5f571912dff23f863421/d399c/wordpress-icon-150x1501-150x150.png 150w","sizes":"(max-width: 150px) 100vw, 150px"}}},"author":{"id":"Zoie Carnegie","github":null,"bio":"Graduated from NAIT Digital Media and IT specializing in application development. PHP is my favorite language. I am a continuous learner always trying new languages, applications, frameworks. Passions are Programming, Photography and Travel.","avatar":null}}}},"pageContext":{"id":"0c8fb1e2-8a9d-5ae4-b53f-941256884102","fields__slug":"/engineering/wordpress-custom-login-form-part-1/","__params":{"fields__slug":"engineering"}}},"staticQueryHashes":["1171199041","1384082988","1711371485","1753898100","2100481360","229320306","23180105","528864852"]}