xprofile_filter_link_profile_data( string $field_value, string $field_type = 'textbox' )
Filter an Extended Profile field value, and attempt to make clickable links to members search results out of them.
Description Description
- Not run on datebox field types.
- Not run on values without commas with less than 5 words.
- URL’s are made clickable.
To disable globally: remove_filter( ‘bp_get_the_profile_field_value’, ‘xprofile_filter_link_profile_data’, 9, 3 );
To disable for a single field, use the ‘Autolink’ settings in Dashboard > Users > Profile Fields.
Parameters Parameters
- $field_value
-
(Required) Profile field data value.
- $field_type
-
(Optional) Profile field type.
Default value: 'textbox'
Return Return
(string|array)
Source Source
File: bp-xprofile/bp-xprofile-filters.php
function xprofile_filter_link_profile_data( $field_value, $field_type = 'textbox' ) {
global $field;
if ( ! $field->get_do_autolink() ) {
return $field_value;
}
if ( 'datebox' === $field_type ) {
return $field_value;
}
if ( strpos( $field_value, ',' ) === false && strpos( $field_value, ';' ) === false && ( count( explode( ' ', $field_value ) ) > 5 ) ) {
return $field_value;
}
if ( strpos( $field_value, ',' ) !== false ) {
// Comma-separated lists.
$list_type = 'comma';
$values = explode( ',', $field_value );
} else {
/*
* Semicolon-separated lists.
*
* bp_xprofile_escape_field_data() runs before this function, which often runs esc_html().
* In turn, that encodes HTML entities in the string (";" becomes "'").
*
* Before splitting on the ";" character, decode the HTML entities, and re-encode after.
* This prevents input like "O'Hara" rendering as "O' Hara" (with each of those parts
* having a seperate HTML link).
*/
$list_type = 'semicolon';
$field_value = wp_specialchars_decode( $field_value, ENT_QUOTES );
$values = explode( ';', $field_value );
array_walk( $values, function( &$value, $key ) use ( $field_type, $field ) {
$value = bp_xprofile_escape_field_data( $value, $field_type, $field->id );
} );
}
if ( ! empty( $values ) ) {
foreach ( (array) $values as $value ) {
$value = trim( $value );
// If the value is a URL, skip it and just make it clickable.
if ( preg_match( '@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@', $value ) ) {
$new_values[] = make_clickable( $value );
// Is not clickable.
} else {
// More than 5 spaces.
if ( count( explode( ' ', $value ) ) > 5 ) {
$new_values[] = $value;
// Less than 5 spaces.
} else {
$query_arg = bp_core_get_component_search_query_arg( 'members' );
$search_url = add_query_arg( array( $query_arg => urlencode( $value ) ), bp_get_members_directory_permalink() );
$new_values[] = '<a href="' . esc_url( $search_url ) . '" rel="nofollow">' . $value . '</a>';
}
}
}
if ( 'comma' === $list_type ) {
$values = implode( ', ', $new_values );
} else {
$values = implode( '; ', $new_values );
}
}
return $values;
}
Changelog Changelog
| Version | Description |
|---|---|
| 1.1.0 | Introduced. |