WordPress plugin intelligence profile

ACF Post-2-Post

Automatic Two Way (Bidirectional) Relationships with ACF

WP PlugIndex snapshot

Current directory snapshot

Tested up to WordPress 7.1
Current version1.7.0
WordPress coverageTested up to WordPress 7.1
Minimum stackWP 4.0 · PHP —
Directory statusactive
Last directory update8 Sept 20261mo ago
Active installations3K+Adoption metric — not a quality score
WordPress.org rating5.0 / 5 from 39 ratings
Official packageDirect from WordPress.org

Repository metrics are context, not quality scores. Active installations measure adoption and can strongly reflect a plugin’s age and historical popularity. Ratings, recent updates and “Tested up to” metadata also do not guarantee modern code, error-free operation, security, feature completeness or suitability for a particular site. Why active installs don’t tell the whole story →

WP PlugIndex currently records ACF Post-2-Post version 1.7.0 as active, updated 1mo ago and tested up to WordPress 7.1.

Overview

About this plugin

This is an add on plugin for Advanced Custom Fields (ACF) >= Version 5.

This plugin will not work with ACF Version 4.

***

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

Github Repository

This plugin is also on GitHub

com/Hube2/acf-post2post

How To Use

  • Create a relationship or post object field.
  • The field must be at the top level. It cannot be a subfield of a repeater or a flexible content field.
  • The field name must be the same on all posts. In other words if you want to have different post types be related then you must add a field with the same field name on both post types.

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.

Post Object Fields

If a post object field is being used

  • If it allows multiple values then it will work the same way that relationship fields work.
  • If it does not allow multiple values and the related post already contains a value see Overwrite Settings

Overwrite Settings

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.

  • overwrite: true/false or 1/0. If set to true or 1 then new values will overwrite older values. The default value of this setting is false.
  • type: ‘first’ or ‘last’. Which of the existing values should be removed, the first one added or the last. The default value is ‘first’.

after a value is removed from the existing list the new value is added to the end of the list.

Field Exeptions

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');

After update hooks

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 } }

WordPress.org metadata

Plugin tags

Topics listed for this plugin in the WordPress.org directory.

  • bidirectional relationship
  • acf
Compatibility & maintenance

Compatibility & maintenance

Tested with WP 7.1

Marked as tested with the current WordPress 7.1 release.

Current WordPress releaseWordPress 7.1
WordPress.org Tested up to7.1
Minimum requirementsWordPress 4.0 · PHP not listed
Update activity8 Sept 20261mo ago

“Tested up to” is directory metadata supplied by the plugin author. WP PlugIndex does not turn an older declaration into a claim that the plugin is incompatible.

Changes recorded by WP PlugIndex

Recent tracked changes

WordPress compatibility6.9.77.1
Tracking & source

WP PlugIndex tracks public WordPress.org directory metadata and records selected version, compatibility and availability changes as they are detected.

Plugin watchlist

Watch this plugin

Sign in to your WP PlugIndex account or create a free account. Free accounts can watch up to 5 plugins and see what changed.

Watch limit

Watchlist limit reached

You have reached your current active watch limit.