-
AuthorPosts
-
March 1, 2017 at 6:02 am #753421
For along time now I have used Javascript to obfuscate email address – so they can’t be read by spambots.
<a href="javascript:window.location.href ='mailto:'+['name','domain.com'].join('@')+'?subject='+'Email Subject'">Click to email</a>
More recently on Enfolds the JS had to be placed in side an AVIA [av_codeblock] [/av_codeblock]
[av_codeblock wrapper_element='' wrapper_element_attributes='' escape_html='' deactivate_shortcode='' deactivate_wrapper='']<a href="javascript:window.location.href ='mailto:'+['name','domain.com'].join('@')+'?subject='+'Email Subject'">Click to email</a>[/av_codeblock]
As this is a [shortcode] I would then copy this short code to include as an inline element.
<ul> <li>P: 00 0000 0000</li> <li>M: 0000 000 000</li> <li>E: [av_codeblock wrapper_element='' wrapper_element_attributes='' escape_html='' deactivate_shortcode='' deactivate_wrapper='']<a href="javascript:window.location.href ='mailto:'+['name','domain.com'].join('@')+'?subject='+'Email Subject'">Click to email</a>[/av_codeblock]</li> </ul>
However I noticed that every time the AVIA layout element was loaded and edited and updated the [Shortcode] and JS would disappear.
I got fed up and asked our programmers to write this nice little [Shortcode]
Please add the following in your child-theme functions.php file.
Set your default values:
’email’ => (Email address hidden if logged out) ‘,
‘subject’ => ‘Email Website Enquiry’,
‘text’ => ‘Click to email’,
‘class’ => ”
On your page where you want insert and email address add the shortcode:EXAMPLE 1: custom email address with default values for the other shortcodes variables
[obfuscate_email email=" (Email address hidden if logged out) " ]
EXAMPLE 2: Fully custom to override default values.
[obfuscate_email email=" (Email address hidden if logged out) " subject="Website - John Smith - Email Enquiry" text=" Email John Smith"]
CUSTOM CSS CLASS
You can add class=”” to the shortcode to add your own custom CSS class.
EXAMPLE 3: CSS CLASS[obfuscate_email email=" (Email address hidden if logged out) " subject="Website - John Smith - Email Enquiry" text=" Email John Smith" class="custom_class"]
now watch the magic happen!
/*------------------------------------------------------------------------------- SHORTCODE - obfuscate email [obfuscate_email email=" (Email address hidden if logged out) " subject="Test Subject" text="Click to Email" class="custom_class"] -------------------------------------------------------------------------------*/ function obfuscate_email_shortcode( $atts ){ //default values extract( shortcode_atts([ 'email' => ' (Email address hidden if logged out) ', 'subject' => 'Email Website Enquiry', 'text' => 'Click to email', 'class' => '' ], $atts ) ); //split the email address so it can't be read by spam bots $email_parts = explode( '@', $email, 2 ); //recreate the js url $url = sprintf( "javascript:window.location.href='mailto:' + [ '%s', '%s' ].join('@') + '?subject=%s'", $email_parts[0], $email_parts[1], $subject ); //print to screen return sprintf( '<a href="%s" class="%s">%s</a>', $url, $class, $text ); } add_shortcode( 'obfuscate_email', 'obfuscate_email_shortcode' );
Please Share!
- This topic was modified 7 years, 8 months ago by HuxburyQuinn. Reason: code sections didn't look right on screen
March 1, 2017 at 9:35 am #753551Hey HuxburyQuinn,
Thank you for sharing your solution, we really appreciate it!
I’m sure it will also help others who are trying to achieve the same :)Best regards,
VinayFebruary 20, 2018 at 11:07 am #914783Update
How to include a Body with multiple lines in a mailto: linkReplace the //default values code section with the code below:
//default values extract( shortcode_atts([ 'email' => ' (Email address hidden if logged out) ', 'subject' => 'Website Email Enquiry', 'text' => 'Email Us', 'body' => '', 'class' => 'custom_class' ], $atts ) );
Then replace the sprintf output with the following:
$url = sprintf( "javascript:window.location.href='mailto:' + [ '%s', '%s' ].join('@') + '?subject=%s&body=%s'", $email_parts[0], $email_parts[1], $subject, str_replace( '<br />', '%250D%250A', $body ) );
Explination
Stackoverflow – insert a line break in mailto body
\r\n
and%0D%0A
within the shortcode body=”line 1 example\r\nline 2 example” OR body=”line 1 example%0D%0Aline 2 example” did not work within the shortcode and in modern email applications.After troubleshooting for 3 hours – I worked out that
urlencode($body)
honoured line returns. However the body output had replaced spaces with a plus’s ‘+’.Not very readable.
So in the updated code we search for <br /> in the body content and replace %0D%0A with the urlencode format %250D%250A to maintain the line returns.
- This reply was modified 6 years, 8 months ago by HuxburyQuinn.
February 21, 2018 at 3:38 am #915164February 28, 2018 at 4:12 am #918781UPDATE
PHP extract() function is being depreciated – so I have updated the code below
https://externals.io/message/100637
/*------------------------------------------------------------------------------- SHORTCODE - obfuscate email [obfuscate_email email=" (Email address hidden if logged out) " subject="Test Subject" body="Message with line returns line 2 line 3" text="Click to Email" class="custom_class"] -------------------------------------------------------------------------------*/ function obfuscate_email_shortcode( $atts ){ //default values $atts = shortcode_atts([ 'email' => ' (Email address hidden if logged out) ', 'subject' => 'Website Email Enquiry', 'text' => 'Email Us', 'body' => '', 'class' => 'email_hide' ], $atts ); //split the email address so it can't be read by spam bots $email_parts = explode( '@', $atts['email'], 2 ); //recreate the js url $url = sprintf( "javascript:window.location.href='mailto:' + [ '%s', '%s' ].join('@') + '?subject=%s&body=%s'", $email_parts[0], $email_parts[1], $atts['subject'], str_replace( '<br />', '%250D%250A', $atts['body'] ) ); //print to screen return sprintf( '<a href="%s" class="%s">%s</a>', $url, $atts['class'], $atts['text'] ); } add_shortcode( 'obfuscate_email', 'obfuscate_email_shortcode' );
February 28, 2018 at 8:15 am #918846Hi,
Thanks for sharing this solution. It would really be helpful to other enfold users who needs to obfuscate email address :)
Best regards,
Nikko -
AuthorPosts
- You must be logged in to reply to this topic.