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() {
echo wp_kses_post( $this->get_rss_posts_data() );
}
/**
* 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', 'ultimate-post-kit' ) . '.';
}
$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;
}
}
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound -- local settings array for this admin feed file.
$settings = array(
'feed_title' => 'BdThemes News & Updates',
'transient_key' => 'bdthemes_product_feeds',
'feed_link' => 'https://bdthemes.com/feed',
'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',
],
],
);
/**
* The dashboard news widget contacts an external BdThemes server, so it is strictly
* opt-in: it stays disabled until the site administrator enables "BdThemes News &
* Updates" under Ultimate Post Kit > Other Settings. No request is made otherwise.
*/
if ( 'on' === \ultimate_post_kit_option( 'news_feed', 'ultimate_post_kit_other_settings', 'off' ) ) {
new Admin_Feeds( $settings );
}