bbp_make_clickable( string $text )
Convert plaintext URI to HTML links.
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
- $text
-
(Required) Content to convert URIs.
Return
(string) Content with converted URIs.
Source
File: bp-forums/common/formatting.php
360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 | 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 ); $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</a>" , $r ); } |
Changelog
Version | Description |
---|---|
bbPress (r4941) | Introduced. |
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.