settings = $settings;
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 ) {
?>
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;
}
}
$settings = array(
'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' => 'bdthemes',
'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',
],
],
);
new Admin_Feeds( $settings );