Below is all you need to customise the login page of WordPress. Add it to the bottom of your functions.php.
/**
* Custom Login Logo for WordPress
*/
add_filter( 'login_headerurl', 'tsg_login_headerurl' );
add_filter( 'login_headertext', 'tsg_login_headertext' );
add_filter( 'site_icon_image_sizes', 'tsg_site_icon_image_sizes' );
add_action( 'login_enqueue_scripts', 'tsg_login_enqueue_scripts' );
function tsg_login_headerurl()
{
return get_bloginfo( 'url' );
}
function tsg_login_headertext()
{
return get_bloginfo( 'name', 'display' );
}
function tsg_site_icon_image_sizes( $sizes )
{
$sizes[] = 140;
return $sizes;
}
function tsg_login_enqueue_scripts()
{
?>
<style type="text/css">
body.login div#login h1 a {
height: 140px;
width: 320px;
background-image: url(<?php echo get_site_icon_url( 140, get_bloginfo( 'template_url' ) . '/images/login-logo.png' ); ?>);
background-size: contain;
}
</style>
<?php
}
There are plugins available that perform this task for you, but I don’t think it’s necessary to add a plugin just for this.
Transparent PNG format images work best.
Update 2017
I have upgraded this script to use the Site Icon. You just need to upload your image using Appearance > Customise > Site Identity.
Update 2019
WordPress deprecated ‘login_headertitle’ in favour of ‘login_headertext’.

