Automatic Two Way (Bidirectional) Relationships with ACF5
This is an add on plugin for Advanced Custom Fields (ACF) >= Version 5.
This plugin will not work with ACF Version 4.
This plugin will not provide any functionality if ACF >=5 is not installed.***
This plugin does not create a new type of field or any admin interface. This plugin when used as
explained below makes the existing ACF Relationship and Post Object fields work bi-directionaly,
automatically updating the relationship field on the other end of the relationship.
For more information see Other Notes
This plugin is also on GitHub
https://github.com/Hube2/acf-post2post
When you add a post to a relationship or post object field and the same field name appears on the post added to the relationship then the relationship field on the related post will be updated to include a relationship to the post being edited.
If a post is removed from a relationship then the post being removed will also be updated to remove the relationship to the post being edited.
If a post object field is being used
If the field in a related post, whether it is a post object field that only allows 1 value or a relationship field that has a maximum number of related posts, if the field in the related post already has the maximum number of values allowed, by default, a new value will not be added. You can override this default by specifying overwrite settings.
How to add overwrite settings
add_filter('acf-post2post/overwrite-settings', 'my_overwrite_settings'); function my_overwrite_settings($settings) { $settings['field_name'] = array( 'overwrite' => true, 'type' => 'first' ); return $settings; }
Each element of the $settings array is an array. The index of the array is the field that you want to specify settings for. Each field can have 2 arguments.
after a value is removed from the existing list the new value is added to the end of the list.
You can disable automatic bidirectional relationships for specific field keys using the filter
// field_XXXXXXXX = the field key of the field // you want to disable bidirectional relationships for add_filter('acf/post2post/update_relationships/key=field_XXXXXXXX', '__return_false');
There are two actions that can be used after a post is updated and passes a single post ID. Please make sure you see the subtle difference in these two hooks.
The first is run after each related post is updated
add_action('acf/post2post/relationship_updated', 'my_post_updated_action'); function my_post_updated_action($post_id) { // $post_id == the post ID that was updated // do something after the related post is updated }
The second is run after all posts are updated and passes an array of post IDs.
add_action('acf/post2post/relationships_updated', 'my_post_updated_action'); function my_post_updated_action($posts) { // $posts == and array of post IDs that were updated // do something to all posts after update foreach ($posts as $post_id) { // do something to post } }
Install like any other plugin
Nothing yet
LIKE "{ID}"