Hi there, I'm trying to create an RSS feed of events on my website, see here: https://fatherheart.net/?feed=eventon
As you can see its not displaying dates, speakers and location.
Any idea what I'm doing wrong? The subtitle is working, but not the other meta data.
- Feb 13,2025 AT 10:18PM - 9 months agoI created a snippet to generate the feed:
/**
* EVENTON CUSTOM RSS FEED
*
* Add this code to your theme’s functions.php file or a custom plugin.
*
* This snippet does the following:
* 1. Registers a new RSS feed endpoint (e.g. https://fatherheart.net/?feed=eventon).
* 2. Outputs an RSS feed that loops through EventON events and includes:
* – Start Date
* – End Date
* – Location
* – Subtitle
* – Speakers
*
* The snippet now checks for an “all day” flag (evcal_allday) so that if an event is
* all day, the dates are formatted using only the date (matching the display in the event card).
*
* Refer to
// Register a new feed endpoint.
function my_eventon_add_feed(){
add_feed(‘eventon’, ‘my_eventon_feed_template’);
}
add_action(‘init’, ‘my_eventon_add_feed’);
// Create the feed template function.
function my_eventon_feed_template(){
// Set the proper content type.
header(‘Content-Type: application/rss+xml; charset=’ . get_option(‘blog_charset’), true);
// Query your EventON events.
$args = array(
‘post_type’ => ‘ajde_events’, // Change this if your EventON post type is different.
‘posts_per_page’ => 50, // Adjust number of events as needed.
‘orderby’ => ‘date’,
‘order’ => ‘DESC’
);
$events = new WP_Query($args);
// Output the RSS XML.
echo ‘<?xml version=”1.0″ encoding=”‘ . get_option(‘blog_charset’) . ‘”?’ . ‘>’; ?>
<rss version=”2.0″>
<channel>
<title><?php bloginfo_rss(‘name’); ?> – EventON Events</title>
<link><?php bloginfo_rss(‘url’); ?></link>
<description><?php bloginfo_rss(“description”); ?></description>
<language><?php bloginfo_rss(‘language’); ?></language>
<lastBuildDate><?php echo mysql2date(‘r’, get_lastpostmodified(‘GMT’)); ?></lastBuildDate>
<?php while($events->have_posts()) : $events->the_post();
$post_id = get_the_ID();
// Retrieve event dates (assumed to be stored as Unix timestamps).
$start_date_meta = get_post_meta($post_id, ‘evcal_start_date’, true);
$end_date_meta = get_post_meta($post_id, ‘evcal_end_date’, true);
// Check if the event is “all day” (meta key: evcal_allday).
$allday = get_post_meta($post_id, ‘evcal_allday’, true);
if($start_date_meta && is_numeric($start_date_meta)){
if($allday == ‘yes’){
$formatted_start_date = date_i18n(get_option(‘date_format’), $start_date_meta);
} else {
$formatted_start_date = date_i18n(get_option(‘date_format’) . ‘ ‘ . get_option(‘time_format’), $start_date_meta);
}
} else {
$formatted_start_date = ‘N/A’;
}
if($end_date_meta && is_numeric($end_date_meta)){
if($allday == ‘yes’){
$formatted_end_date = date_i18n(get_option(‘date_format’), $end_date_meta);
} else {
$formatted_end_date = date_i18n(get_option(‘date_format’) . ‘ ‘ . get_option(‘time_format’), $end_date_meta);
}
} else {
$formatted_end_date = ‘N/A’;
}
// Retrieve location.
$location = get_post_meta($post_id, ‘evcal_location’, true);
$formatted_location = $location ? esc_html($location) : ‘N/A’;
// Retrieve subtitle.
$subtitle = get_post_meta($post_id, ‘evcal_subtitle’, true);
$formatted_subtitle = $subtitle ? esc_html($subtitle) : ‘N/A’;
// Retrieve speakers (if stored as a simple meta field).
$speakers = get_post_meta($post_id, ‘evcal_event_speakers’, true);
if(is_array($speakers)){
$formatted_speakers = implode(“, “, $speakers);
} else {
$formatted_speakers = $speakers ? $speakers : ‘N/A’;
}
?>
<item>
<title><?php the_title_rss(); ?></title>
<link><?php the_permalink_rss(); ?></link>
<pubDate><?php echo mysql2date(‘r’, get_the_date(‘Y-m-d H:i:s’)); ?></pubDate>
<guid isPermaLink=”false”><?php the_guid(); ?></guid>
<description><![CDATA[
<?php the_excerpt_rss(); ?>
<br /><br />
<strong>Start Date:</strong> <?php echo esc_html($formatted_start_date); ?><br />
<strong>End Date:</strong> <?php echo esc_html($formatted_end_date); ?><br />
<strong>Location:</strong> <?php echo $formatted_location; ?><br />
<strong>Subtitle:</strong> <?php echo $formatted_subtitle; ?><br />
<strong>Speakers:</strong> <?php echo esc_html($formatted_speakers); ?><br />
]]></description>
</item>
<?php endwhile; wp_reset_postdata(); ?>
</channel>
</rss>
<?php
}
Hello,
Date/Time:
evcal_srow UNIX event start value
evcal_erow UNIX event end value
Please take a look at how you retrieve locations:
The same with speakers, just use event_speaker $taxonomy.
Brilliant, thanks! That’s what I was looking for.
We are glad your issue is resolved, if you have any further questions or concerns please create a new ticket. If you have a moment, we would greatly appreciate if you could kindly leave us a review at Codecanyon. By going to your account > Downloads. We are very grateful for your kind review!