bp_core_parse_url( string $url )
Parse url and get data about URL.
Description
Parameters
- $url
-
(Required) URL to parse data.
Return
(array) Parsed URL data.
Source
File: bp-core/bp-core-functions.php
function bp_core_parse_url( $url ) {
$cache_key = 'bp_activity_oembed_' . md5( serialize( $url ) );
// get transient data for url.
$parsed_url_data = get_transient( $cache_key );
if ( ! empty( $parsed_url_data ) ) {
return $parsed_url_data;
}
$parsed_url_data = array();
// Fetch the oembed code for URL.
$embed_code = wp_oembed_get( $url, array( 'discover' => false ) );
if ( ! empty( $embed_code ) ) {
$parsed_url_data['title'] = ' ';
$parsed_url_data['description'] = $embed_code;
$parsed_url_data['images'] = '';
$parsed_url_data['error'] = '';
$parsed_url_data['wp_embed'] = true;
} else {
// safely get URL and response body.
$response = wp_safe_remote_get( $url );
$body = wp_remote_retrieve_body( $response );
// if response is not empty
if ( ! is_wp_error( $body ) && ! empty( $body ) ) {
// Load HTML to DOM Object
$dom = new DOMDocument();
@$dom->loadHTML( mb_convert_encoding( $body, 'HTML-ENTITIES', 'UTF-8' ) );
$meta_tags = array();
$images = array();
$description = '';
$title = '';
$xpath = new DOMXPath( $dom );
$query = '//*/meta[starts-with(@property, \'og:\')]';
$metas_query = $xpath->query( $query );
foreach ( $metas_query as $meta ) {
$property = $meta->getAttribute( 'property' );
$content = $meta->getAttribute( 'content' );
$meta_tags[] = array( $property, $content );
}
if ( is_array( $meta_tags ) && ! empty( $meta_tags ) ) {
foreach ( $meta_tags as $tag ) {
if ( is_array( $tag ) && ! empty( $tag ) ) {
if ( $tag[0] == 'og:title' ) {
$title = $tag[1];
}
if ( $tag[0] == 'og:description' || 'description' === strtolower( $tag[0] ) ) {
$description = html_entity_decode( $tag[1], ENT_QUOTES, 'utf-8' );
}
if ( $tag[0] == 'og:image' ) {
$images[] = $tag[1];
}
}
}
}
// Parse DOM to get Title
if ( empty( $title ) ) {
$nodes = $dom->getElementsByTagName( 'title' );
$title = $nodes->item( 0 )->nodeValue;
}
// Parse DOM to get Meta Description
if ( empty( $description ) ) {
$metas = $dom->getElementsByTagName( 'meta' );
for ( $i = 0; $i < $metas->length; $i ++ ) {
$meta = $metas->item( $i );
if ( 'description' === $meta->getAttribute( 'name' ) ) {
$description = $meta->getAttribute( 'content' );
break;
}
}
}
// Parse DOM to get Images
$image_elements = $dom->getElementsByTagName( 'img' );
for ( $i = 0; $i < $image_elements->length; $i ++ ) {
$image = $image_elements->item( $i );
$src = $image->getAttribute( 'src' );
if ( filter_var( $src, FILTER_VALIDATE_URL ) ) {
$images[] = $src;
}
}
if ( ! empty( $description ) && '' === trim( $title ) ) {
$title = $description;
}
if ( ! empty( $title ) && '' === trim( $description ) ) {
$description = $title;
}
if ( ! empty( $title ) ) {
$parsed_url_data['title'] = $title;
}
if ( ! empty( $description ) ) {
$parsed_url_data['description'] = $description;
}
if ( ! empty( $images ) ) {
$parsed_url_data['images'] = $images;
}
if ( ! empty( $title ) || ! empty( $description ) || ! empty( $images ) ) {
$parsed_url_data['error'] = '';
}
}
}
if ( ! empty( $parsed_url_data ) ) {
// set the transient.
set_transient( $cache_key, $parsed_url_data, DAY_IN_SECONDS );
}
/**
* Filters parsed URL data.
*
* @since BuddyBoss 1.3.2
* @param array $parsed_url_data Parse URL data.
*/
return apply_filters( 'bp_core_parse_url', $parsed_url_data );
}
Changelog
| Version | Description |
|---|---|
| BuddyBoss 1.3.2 | 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.