Hey there, I’m trying to use ACF to create a custom field on events created through an ical feed. The issue I’m having is that sometimes, usually every other ical fetch, it removes the ACF fields and the associated data from the events. If I hit the “update” button on the event it adds the ACF fields back in but lacks the data.
Is there a way to prevent this from happening? Is there a hook I could use for the creation of the event with the iCal feed to add the ACF field then so it doesn’t get removed?
Stephen Muffatti
It seems after more investigation that the iCal fetch is getting the same events but trashing the old ones before inserting the new ones. I guess this means the UID is different?
Stephen Muffatti
HI Stephen,
Yes, if the UUIDs are different then it deletes the event and creates a new one.
Stephen Harris
Hey,
Thanks for taking the time to respond to my post. I have a couple of follow up questions:
-
Could tell me where I can see the function that checks the UUIDs to
see if they are the same or not?
-
In your experience, have you ever run into an iCal feed that updated
the UUIDs for each item everytime it was fetch? What could the
purpose of this be?
Again, thank you for your hard work and the time you take to respond to these forums.
Stephen Muffatti
1) That logic is at line 414 of event-organiser-ical-sync/ical-functions.php
. It uses eo_get_event_by_uid()
to attempt to find an event with that UUID.
2) Only because the feed hadn’t been implemented properly. The iCal specification offers guidance on generating UUIDs which involves using the current time:
A good method to assure uniqueness is to put the
domain name or a domain literal IP address of the host on which the
identifier was created on the right hand side of the “@”, and on the
left hand side, put a combination of the current calendar date and
time of day (i.e., formatted in as a DATE-TIME value) along with some
other currently unique (perhaps sequential) identifier available on
the system (for example, a process id number). Using a date/time
value on the left hand side and a domain name or domain literal on
the right hand side makes it possible to guarantee uniqueness since
no two hosts should be using the same domain name or IP address at
the same time.
What’s not made explicitly clear is that that should be done once and persisted with the event. If each time the feed is read each event is given a new a UID then its impossible to match events with previous imports.
Stephen Harris
Alright, so I was able to confirm that once the events are imported that they are in fact getting new UIDs. However, the company supplying the feed insists it’s a problem on my end. How can I confirm that the UIDs are being changed on their end when they refresh their feed and it’s not an issue on my end?
A side note – I’m having trouble with this plugin on a separate site in which it will not fetch a feed at all and instead gives a 403 forbidden code for a feed that works everywhere else. I’m sort of at a loss for why that’s happening.
Apologies for my questions, I feel like I must be missing something that’s causing my recent struggles, and thank you again for your time.
Stephen Muffatti
Hey, as an update:
I verified that the UIDs were being changed before the plugin using an iCal validator to check the feeds.
I know it would be bad practice but I’m wondering if there’s a way to switch how the plugin checks for matching UIDs and maybe set it to check Name and Date or something? I’m just trying to think of possible workarounds.
Stephen Muffatti
Not without editing the plug-in’s code. You replace the call to eo_get_event_by_uid()
with something like:
$found_event = eo_get_events( array(
'showpastevents' => true,
'group_events_by' => 'series',
'no_found_rows' => true,
'update_post_term_cache' => false,
'update_meta_term_cache' => false,
'post_status' => 'any',
'numberposts' => 1,
'post_name__in' => [sanitize_title_with_dashes($event_post->post_title)]
));
I’ve not tested, this, and its actually looking up the post title by the slug, so it’s having to generate a slug from the title (which might not match the actual slug).
So it may require some tweaking.
Stephen Harris
Thank you for this. I’m going to try and implement this in the next couple of days and I will report back .
Stephen Muffatti