Updating My Contact Email Automatically

Cast your mind all the back to yesterday, dear reader, where I published the Ban the Spam post. In that post I talk about combatting spam, yet having my contact email plastered across this site.

Problem is, I have 3 places where I list this contact email; on my contact page (of course), on my reply by email button at the bottom of every post, and in a similar link at the bottom of every post in my RSS feed.

So as you can imagine, changing the contact address could be somewhat painful if I want to do it semi-regularly. Toward the end of yesterdayโ€™s post, I spoke briefly about this quandary:

Iโ€™d prefer to set the email address in a single place and have it replicated to both my contact page and my button.

Iโ€™ll have to think about how best to do that โ€“ Iโ€™m sure there will be a way for me to that within functions.php or something. If youโ€™re a WordPress ninja and have any ideas, Iโ€™m all ears.

I know just enough PHP to be dangerous, and have managed to come up with a solution for doing this. Itโ€™s probably not the best solution, but it works, so Iโ€™m happy.

I wanted to write this post mainly as a reminder to myself, but if it helps any of you guys, then all the better.

Functions, short codes and PHP, oh my!

I was pretty sure that I would be able to do something in my functions.php file with short codes etc. and I was right!

So I already had a couple of functions defined in there โ€“ one that pulls the post title for the reply by email button, and another that I stole from my good pal, Ru Singh. (thanks, Ru!)

In this post Iโ€™m going to start again with the functions, just so itโ€™s clear to me what I did, when I read it back later.

Defining the short codes

I decided I needed to define two short codes for this to work. One that displays an arbitrary string of text (in this case, an email address). And another that pulls the postโ€™s title.

Letโ€™s look at the email address one first:

// Shortcode for inserting the site's contact email
add_shortcode( 'contact_email', 'contact_email' );

function contact_email( $atts ) {
    return 'test@example.com';
}

This shot code allows me to use [contact_email] anywhere on this site and WordPress will automagically insert the string after the return.

Get the title

So weโ€™ve got the email address sorted. Next we need to do is create a short code that will pull the postโ€™s title. This function already exists in WordPress, I just needed a short code to pull it:

// Shortcode for generating the post title
add_shortcode( 'get_title', 'get_title' );

function get_title( $atts ) {
    return esc_attr( get_the_title( get_the_ID() ) );
}

As before, all I need to do now is place [get_title] anywhere inside a post and it will display that postโ€™s title.

Putting it all together

I now had the nuts and bolts to get this shin-dig on the road. All I had to do was put it together. So first I changed the email address on my contact page from, you know, the actual email address that I want people to email and replace it with my contact_email. So when visit the page and it renders, you see whatever that return value is for the short code. I also set the mailto: value of the link to be the short code.

Confused yet? This is short code inception here, people! To try and give you a a better demonstration, here is a logical representation in HTML:

<a href="mailto:[contact_email]">[contact_email]</a>

So if the return string on our shortcode is test@example.com, the rendered HTML that you see would be:

<a href="mailto:<span style="font-family: var(--mono); background: var(--accent-bg);">test@example.com</span>"><span style="font-family: var(--mono); background: var(--accent-bg);">test@example.com</a></span>

Make sense? Good, Iโ€™m glad weโ€™re now on the same page. ๐Ÿ™ƒ

Fixing the button

So thatโ€™s the contact page done. Next I need to sort the reply by email button. This was again, really easy. All I had to do was change the buttonโ€™s link to be the following:

<a href="mailto:[contact_email]?subject=Reply to '[get_title]'">Reply by email</a>

Which renders a link that emails the address in the contact_email short code and includes the post title in the subject line:

<a href="mailto:test@example.com?subject=Reply to 'Updating My Contact Email Automatically'">Reply by email</a>

Finally, the RSS feed

The last part was to bastardise Ruโ€™s code so that includes my short codes so that thereโ€™s a link at the end of every post in my RSS feed that, like my reply button, populates the contact_email in the to field and the subject line with the post title.

Hereโ€™s what that code looks like:

// Add reply link to RSS feed
add_filter( "the_content_feed", "feed_comment_via_email" );

function feed_comment_via_email($content)
{
   $content .= "<p><a href=\"mailto: " . do_shortcode( ' [contact_email] ' ) . "?subject=Reply to '" . do_shortcode( ' [get_title] ' ) . "'" . "\">Reply via email</a></p>";
   return $content;
}

All this code is doing, is injecting a link at the bottom of each RSS feed entry that, you guessed it, uses my short codes.

How to use this code

Now that I have all the code I need, I just need to implement it on my theme. Iโ€™m using a child theme for this so my theme changes persist through theme updates.

All I did was tie these code snippets together and added them to my functions.php file:

// Shortcode for inserting the site's contact email
add_shortcode( 'contact_email', 'contact_email' );

function contact_email( $atts ) {
    return 'test@example.com'; // Change this value when it's time to update your email everywhere!
}

// Shortcode for generating the post title
add_shortcode( 'get_title', 'get_title' );

function get_title( $atts ) {
    return esc_attr( get_the_title( get_the_ID() ) );
}

// Add reply link to RSS feed
add_filter( "the_content_feed", "feed_comment_via_email" );

function feed_comment_via_email($content)
{
   $content .= "<p><a href=\"mailto: " . do_shortcode( ' [contact_email] ' ) . "?subject=Reply to '" . do_shortcode( ' [get_title] ' ) . "'" . "\">Reply via email</a></p>";
   return $content;
}

Changing the email

If at a later date I want to update the contact email for this site, all I need to do is replace the email address on line 5 above and the 3 locations where I use that address will automatically be updated.

No muss, no fuss. Winning.

Like I said at the start of this post, this probably isnโ€™t the most elegant solution to the problem, but itโ€™s a working solution so Iโ€™m happy. If you have any idea as to how I can improve this, please do let me know.

โœ‰๏ธ Reply by email

๐Ÿ‘ˆ๐Ÿป The one before
Ban the Spam!
Up next ๐Ÿ‘‰๐Ÿป
iCreep