settings = $settings ?: [ 'feed_title' => 'BdThemes News & Updates', 'transient_key' => 'bdthemes_product_feeds', 'feed_link' => 'https://bdthemes.com/feed', 'remote_feed_link' => 'https://dashboard.bdthemes.io/wp-json/bdthemes/v1/product-feed/?product_category=element-pack', 'text_domain' => 'ultimate-store-kit', 'footer_links' => [ [ 'url' => 'https://bdthemes.com/blog/', 'title' => 'Blog', ], [ 'url' => 'https://bdthemes.com/knowledge-base/', 'title' => 'Docs', ], [ 'url' => 'https://store.bdthemes.com/', 'title' => 'Get Pro', ], [ 'url' => 'https://feedback.elementpack.pro/announcements/', 'title' => 'Changelog', ], ], ]; add_action('wp_dashboard_setup', [$this, 'register_rss_feeds']); } /** * Register RSS Feeds for Element Pack */ public function register_rss_feeds() { if (self::$feed_displayed) { /** * If the feed has already been displayed, do not add it again */ return; } wp_add_dashboard_widget( 'bdt-dashboard-overview', esc_html($this->settings['feed_title']), [$this, 'display_rss_feeds_content'], null, null, 'column4', 'core' ); /** * Mark the feed as displayed */ self::$feed_displayed = true; } /** * Display RSS Feeds Content */ public function display_rss_feeds_content() { $feeds = $this->get_remote_feeds_data(); if (is_array($feeds)) { foreach ($feeds as $feed) { ?>

content), 50)); ?> settings['text_domain']); ?>

get_rss_posts_data()); } /** * Get Remote Feeds Data * * @return array|mixed */ private function get_remote_feeds_data() { $transient_key = $this->settings['transient_key']; $cached_data = get_transient($transient_key); if (! empty($cached_data)) { return json_decode($cached_data); } $response = wp_remote_get( $this->settings['remote_feed_link'], array( 'timeout' => 30, 'headers' => array( 'Accept' => 'application/json', ), ) ); if (is_wp_error($response)) { return []; } $response_body = wp_remote_retrieve_body($response); set_transient($transient_key, $response_body, 6 * HOUR_IN_SECONDS); return json_decode($response_body); } /** * Get RSS Posts Data * * @return string */ private function get_rss_posts_data() { $transient_key = $this->settings['transient_key'] . '_rss'; $cached_data = get_transient($transient_key); if (! empty($cached_data)) { /** * Decode as associative array */ $rss_items = json_decode($cached_data, true); } else { include_once ABSPATH . WPINC . '/feed.php'; $rss = fetch_feed($this->settings['feed_link']); if (is_wp_error($rss)) { return '
  • ' . esc_html__('Items Not Found', $this->settings['text_domain']) . '.
  • '; } $maxitems = $rss->get_item_quantity(5); $rss_items = $rss->get_items(0, $maxitems); /** * Convert RSS items to a simpler array to avoid serialization issues */ $simplified_rss_items = array_map(function ($item) { return [ 'title' => $item->get_title(), 'link' => $item->get_permalink(), 'date' => $item->get_date('U'), 'content' => $item->get_content(), ]; }, $rss_items); set_transient($transient_key, json_encode($simplified_rss_items), 6 * HOUR_IN_SECONDS); $rss_items = $simplified_rss_items; } ob_start(); ?>
    = $cutoff; } }