bp_activity_action_parse_url()
AJAX endpoint for link preview URL parser.
Description
Source
File: bp-activity/bp-activity-functions.php
function bp_activity_action_parse_url() {
require_once trailingslashit( buddypress()->plugin_dir . 'bp-activity/vendors' ) . '/website-parser/website_parser.php';
// curling
$json_data = array();
if ( class_exists( 'WebsiteParser' ) ) {
$url = $_POST['url'];
if ( strpos( $url, 'youtube' ) > 0 || strpos( $url, 'youtu' ) > 0 || strpos( $url, 'vimeo' ) > 0 ) {
// Fetch the oembed code for URL.
$embed_code = wp_oembed_get( $url );
$json_data['title'] = ' ';
$json_data['description'] = $embed_code;
$json_data['images'] = '';
$json_data['error'] = '';
wp_send_json( $json_data );
}
$parser = new WebsiteParser( $url );
$body = wp_remote_get( $url );
if ( ! is_wp_error( $body ) && isset( $body['body'] ) ) {
$title = '';
$description = '';
$images = array();
$parser->content = $body['body'];
$meta_tags = $parser->getMetaTags( false );
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 = html_entity_decode( $tag[1], ENT_QUOTES, "utf-8" );
} elseif ( strtolower( $tag[0] ) == 'description' && $description == '' ) {
$description = html_entity_decode( $tag[1], ENT_QUOTES, "utf-8" );
}
if ( $tag[0] == 'og:image' ) {
$images[] = $tag[1];
}
}
}
}
if ( $title == '' ) {
$title = $parser->getTitle( false );
}
if ( empty( $images ) ) {
$images = $parser->getImageSources( false );
}
// Generate Image URL Previews
if ( empty( $images ) ) {
$content_type = wp_remote_retrieve_header( $body, 'content-type' );
if ( false !== strpos( $content_type, 'image' ) ) {
$images = array( $url );
}
}
$json_data['title'] = $title;
$json_data['description'] = $description;
$json_data['images'] = $images;
$json_data['error'] = '';
} else {
$json_data['error'] = 'Sorry! preview is not available right now. Please try again later.';
}
} else {
$json_data['error'] = 'Sorry! preview is not available right now. Please try again later.';
}
wp_send_json( $json_data );
}
Changelog
| Version | Description |
|---|---|
| BuddyBoss 1.0.0 | 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.