How to add a protocol to URLs from WordPress post content

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;
}

Leave a Reply