Sometimes you have URLs without http://
OR https://
into WordPress post content.
So you can use the following function for that. You can use this function for the_content filter for WP. And also you can use this anywhere in PHP code other than WP.
<?php | |
/** | |
* Fix the URLs from the content. | |
* | |
* This function will add protocol to URLs which has no protocol added. | |
* | |
* For example, | |
* | |
* google.com –> http://google.com | |
* https://google.com –> https://google.com | |
* http://google.com –> http://google.com | |
* | |
* @param string $content Content. | |
* @return string Content with fixed URLs. | |
*/ | |
function fix_content_urls( $content = '' ) { | |
// Bail, if anything goes wrong. | |
if ( empty( $content ) ) { | |
return; | |
} | |
// Get all the links. | |
preg_match_all( '/<a[^>]+href=([\'"])(?<href>.+?)\1[^>]*>/i', $content, $result ); | |
$search = $replace = array(); | |
// Create search & replace array. | |
if ( isset( $result['href'] ) && ! empty( $result['href'] ) ) { | |
foreach ( $result['href'] as $url ) { | |
$parsed_url = parse_url( $url ); | |
// If no protocol found, then add it for replacement. | |
if ( ! empty( $parsed_url ) && ! isset( $parsed_url['scheme'] ) ) { | |
$search[] = $url; // Original URL. | |
$replace[] = esc_url( $url ); // Fixed URL. | |
} | |
} | |
// Fix the URLs. | |
$content = str_replace( $search, $replace, $content ); | |
// Freeup the variables. | |
unset( $search ); | |
unset( $replace ); | |
} | |
return $content; | |
} |
Share this:
- Click to share on Twitter (Opens in new window)
- Click to share on Facebook (Opens in new window)
- Click to share on LinkedIn (Opens in new window)
- Click to share on Reddit (Opens in new window)
- Click to share on Tumblr (Opens in new window)
- Click to share on Pinterest (Opens in new window)
- Click to share on WhatsApp (Opens in new window)