data ) ? $user_object->data : ''; $expiration = ! empty( $settings['eael_auto_clear_cache'] ) && ! empty( $settings['eael_twitter_feed_cache_limit'] ) ? absint( $settings['eael_twitter_feed_cache_limit'] ) * MINUTE_IN_SECONDS : DAY_IN_SECONDS; $cache_key = $settings['eael_twitter_feed_ac_name'] . '_' . $expiration . '_' . md5( $settings['eael_twitter_feed_hashtag_name'] . $settings['eael_twitter_feed_consumer_key'] . $settings['eael_twitter_feed_consumer_secret'] . ( empty( $settings['eael_twitter_feed_bearer_token'] ) ? '' : $settings['eael_twitter_feed_bearer_token'] ) ) . '_tf_cache'; $items = get_transient( $cache_key ); $html = ''; $twitter_v2 = ! empty( $settings['eael_twitter_api_v2'] ) && 'yes' === $settings['eael_twitter_api_v2'] ? true : false; $account_name = sanitize_text_field( str_replace('@', '', $settings['eael_twitter_feed_ac_name']) ); if ( ! $twitter_v2 && ( empty($settings['eael_twitter_feed_consumer_key']) || empty($settings['eael_twitter_feed_consumer_secret']) ) ) { return; } if ( $twitter_v2 && empty( $settings['eael_twitter_feed_bearer_token'] ) ) { return; } if( $user_object ){ $user_id = ! empty( $user_object->id ) ? $user_object->id : ''; $user_profile_image_url = ! empty( $user_object->profile_image_url ) ? $user_object->profile_image_url : ''; $user_username = ! empty( $user_object->username ) ? $user_object->username : ''; $user_name = ! empty( $user_object->name ) ? $user_object->name : ''; } if ($items === false) { if ( ! $twitter_v2 && empty( $token ) ) { $credentials = base64_encode($settings['eael_twitter_feed_consumer_key'] . ':' . $settings['eael_twitter_feed_consumer_secret']); add_filter('https_ssl_verify', '__return_false'); $response = wp_remote_post('https://api.twitter.com/oauth2/token', [ 'method' => 'POST', 'httpversion' => '1.1', 'blocking' => true, 'headers' => [ 'Authorization' => 'Basic ' . $credentials, 'Content-Type' => 'application/x-www-form-urlencoded;charset=UTF-8', ], 'body' => ['grant_type' => 'client_credentials'], ]); $body = json_decode(wp_remote_retrieve_body($response)); if ($body) { update_option($id . '_' . $settings['eael_twitter_feed_ac_name'] . '_tf_token', $body->access_token); $token = $body->access_token; } } add_filter('https_ssl_verify', '__return_false'); $api_endpoint = esc_url( 'https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=' . $settings['eael_twitter_feed_ac_name'] . '&count=999&tweet_mode=extended' ); if ( $twitter_v2 ){ $token = ! empty( $settings['eael_twitter_feed_bearer_token'] ) ? $settings['eael_twitter_feed_bearer_token'] : ''; $tweet_fields = [ 'entities', 'public_metrics', 'in_reply_to_user_id', 'attachments', 'created_at' ]; $tweet_fields_params = implode(',', $tweet_fields); if ( empty( $user_object ) ){ $api_endpoint_user = esc_url( "https://api.twitter.com/2/users/by/username/$account_name?user.fields=profile_image_url" ); $response_user = wp_remote_get($api_endpoint_user, [ 'blocking' => true, 'headers' => [ 'Authorization' => "Bearer $token", ], ]); $body_user = json_decode(wp_remote_retrieve_body($response_user)); if ($body_user) { $user_object = $body_user; update_option($id . '_' . $settings['eael_twitter_feed_ac_name'] . '_tf_user_object', $user_object); $user_id = ! empty( $user_object->id ) ? $user_object->id : ''; $user_profile_image_url = ! empty( $user_object->profile_image_url ) ? $user_object->profile_image_url : ''; $user_username = ! empty( $user_object->username ) ? $user_object->username : ''; $user_name = ! empty( $user_object->name ) ? $user_object->name : ''; } } if ( empty( $user_id ) ){ return $html; } $api_endpoint = esc_url( "https://api.twitter.com/2/users/$user_id/tweets?max_results=100&tweet.fields=$tweet_fields_params" ); } $response = wp_remote_get($api_endpoint, [ 'blocking' => true, 'headers' => [ 'Authorization' => "Bearer $token", ], ]); if ( is_wp_error( $response ) ) { return $html; } if ( ! empty( $response['response'] ) && $response['response']['code'] == 200 ) { $items = json_decode( wp_remote_retrieve_body( $response ), true ); $items = $twitter_v2 && ! empty( $items['data'] ) ? $items['data'] : $items; set_transient( $cache_key, $items, $expiration ); } } if ( empty( $items ) ) { return $html; } if ( $settings['eael_twitter_feed_hashtag_name'] ) { foreach ($items as $key => $item) { $match = false; if ( ! empty( $item['entities']['hashtags'] ) ) { foreach ($item['entities']['hashtags'] as $tag) { $tag['text'] = $twitter_v2 ? $tag['tag'] : $tag['text']; if (strcasecmp($tag['text'], $settings['eael_twitter_feed_hashtag_name']) == 0) { $match = true; } } } if ($match == false) { unset($items[$key]); } } } $items = array_splice($items, 0, $settings['eael_twitter_feed_post_limit']); $post_per_page = ! empty($settings['eael_twitter_feed_posts_per_page']) ? $settings['eael_twitter_feed_posts_per_page'] : 10; $counter = 0; $current_page = 1; self::$twitter_feed_fetched_count = count($items); foreach ($items as $item) { $counter++; if ($post_per_page > 0) { $current_page = ceil($counter / $post_per_page); } $is_reply = ! empty($item['in_reply_to_status_id']) ? true : false; if( $twitter_v2 ){ $is_reply = !empty($item['in_reply_to_user_id']) ? true : false; } $show_reply = ( !empty($settings['eael_twitter_feed_show_replies']) && 'true' === $settings['eael_twitter_feed_show_replies'] ) ? true : false; if($is_reply && !$show_reply){ continue; } $item['full_text'] = $twitter_v2 ? $item['text'] : $item['full_text']; $delimeter = strlen($item['full_text']) > $settings['eael_twitter_feed_content_length'] ? '...' : ''; $media = isset( $item['extended_entities']['media'] ) ? $item['extended_entities']['media'] : ( isset( $item['retweeted_status']['entities']['media'] ) ? $item['retweeted_status']['entities']['media'] : ( isset( $item['quoted_status']['entities']['media'] ) ? $item['quoted_status']['entities']['media'] : [] ) ); $show_pagination = ! empty($settings['pagination']) && 'yes' === $settings['pagination'] ? true : false; if($show_pagination){ $pagination_class = ' page-' . $current_page; $pagination_class .= 1 === intval( $current_page ) ? ' eael-d-block' : ' eael-d-none'; } else { $pagination_class = 'page-1 eael-d-block'; } if ($counter == count($items)) { $pagination_class .= ' eael-last-twitter-feed-item'; } $user_name_full = ''; $html .= '
' . $content . '
'; $item_user_screen_name = ! empty( $item['user']['screen_name'] ) ? $item['user']['screen_name'] : ''; $item_user_screen_name = $twitter_v2 && ! empty( $user_username ) ? $user_username : ''; if ($settings['eael_twitter_feed_show_read_more'] == 'true' && ! empty( $item_user_screen_name ) ) { $read_more = !empty( $settings[ 'eael_twitter_feed_show_read_more_text' ] ) ? $settings[ 'eael_twitter_feed_show_read_more_text' ] : __( 'Read More', 'essential-addons-for-elementor-lite' ); $html .= ''. esc_html( $read_more ).' '; } $html .= '