bbp_make_clickable( string $text = '' )
Convert plaintext URI to HTML links.
Description Description
Converts URI, www and ftp, and email addresses. Finishes by fixing links within links.
This custom version of WordPress’s make_clickable() skips links inside of pre and code tags.
Parameters Parameters
- $text
-
(Optional) Content to convert URIs.
Default value: ''
Return Return
(string) Content with converted URIs.
Source Source
File: includes/common/formatting.php
function bbp_make_clickable( $text = '' ) { $r = ''; $textarr = preg_split( '/(<[^<>]+>)/', $text, -1, PREG_SPLIT_DELIM_CAPTURE ); // split out HTML tags $nested_code_pre = 0; // Keep track of how many levels link is nested inside <pre> or <code> foreach ( $textarr as $piece ) { if ( preg_match( '|^<code[\s>]|i', $piece ) || preg_match( '|^<pre[\s>]|i', $piece ) || preg_match( '|^<script[\s>]|i', $piece ) || preg_match( '|^<style[\s>]|i', $piece ) ) { $nested_code_pre++; } elseif ( $nested_code_pre && ( '</code>' === strtolower( $piece ) || '</pre>' === strtolower( $piece ) || '</script>' === strtolower( $piece ) || '</style>' === strtolower( $piece ) ) ) { $nested_code_pre--; } if ( $nested_code_pre || empty( $piece ) || ( $piece[0] === '<' && ! preg_match( '|^<\s*[\w]{1,20}+://|', $piece ) ) ) { $r .= $piece; continue; } // Long strings might contain expensive edge cases ... if ( 10000 < strlen( $piece ) ) { // ... break it up foreach ( _split_str_by_whitespace( $piece, 2100 ) as $chunk ) { // 2100: Extra room for scheme and leading and trailing paretheses if ( 2101 < strlen( $chunk ) ) { $r .= $chunk; // Too big, no whitespace: bail. } else { $r .= bbp_make_clickable( $chunk ); } } } else { $ret = " {$piece} "; // Pad with whitespace to simplify the regexes $ret = apply_filters( 'bbp_make_clickable', $ret, $text ); $ret = substr( $ret, 1, -1 ); // Remove our whitespace padding. $r .= $ret; } } // Cleanup of accidental links within links return preg_replace( '#(<a([ \r\n\t]+[^>]+?>|>))<a [^>]+?>([^>]+?)</a>([^<]*)</a>#i', "$1$3$4</a>", $r ); }
Changelog Changelog
Version | Description |
---|---|
2.4.0 | Introduced. |