I'm in the process of going through all my forms and updating them to the new method of setting relationships between different post types. I noticed the only reference to relationships when creating a Conditional Group is the legacy relationship field. Can you tell me how I would migrate the following code?
[cred_show_group if="($(_wpcf_belongs_product-listing_id) eq '' )" mode='fade-slide']
...
[/cred_show_group]
Thanks
For migrated relationships that code will proceed working as we added a compatibility layer for the new API <> Old API.
For Post relationships set up freshly, in the new Many To Many releases, you cannot reference that hidden custom field anymore.
New relationships do not save that field, as they use a Custom Database table to connect the posts.
There is a new API to GET posts and related content for new relationships:
https://toolset.com/documentation/customizing-sites-using-php/post-relationships-api/
The easiest is to use a Custom ShortCode that returns the value (Post ID) you want to compare to or 0 if none.
I assume your above code example is used on a CRED Edit Form for Child posts.
I assume a Many To Many Relationship between 2 post types.
I assume this is NOT a migrated but a NEW relationship, as elsehow this is not needed.
Hence, after setting up your new Many to Many relationship, you can create this Custom ShortCode:
function check_if_have_related_posts(){
//Get current post object and ID
global $post;
$post_id_current = $post->ID;
//The Post relationship slug to check
$relationship_to_query = "post_type_one-post_type_two";
//Set the role the other post type has:
$role = "child"; //could be parent, child
//Get related posts with new API, if none, it'll return 0, if any, the ID (hence not 0).
$related_post = toolset_get_related_post( $post_id_current, $relationship_to_query, $role);
return $related_post;
}
add_shortcode( 'have-related-posts', 'check_if_have_related_posts' );
Now you can check in HTML conditional or CRED Conditionals like this:
[cred_show_group if="([have-related-posts] ne '0' )" mode='fade-slide']
It has related posts
[/cred_show_group]
Hi Beda,
Thanks for the response. That's very helpful. I made some modifications to your suggestion and it appears to be working. Before closing the ticket, would you mind giving it a quick glance and see if you think there's anything I overlooked? My intention is to be able to pass a post ID and a parent post type slug to check and have it return the parent post ID - this way I have a bit more versatility in where I can use the shortcode.
- Aaron
/* GET PARENT POST ID */
function be_get_parent_id($atts){
//Get current post object and ID
global $post;
$post_id_current = $post->ID;
$a = shortcode_atts( array(
'postid' => $post_id_current,
'parent' => '',
), $atts );
//get post type
$post_id_current = $a['postid'];
$post_type_current = get_post_type($post_id_current);
//The Post relationship slug to check
$relationship_to_query = $a['parent']."_".$post_type_current;
//Set the role the other post type has:
$role = "parent";
//Get related posts with new API, if none, it'll return 0, if any, the ID (hence not 0).
$related_post = toolset_get_related_post( $post_id_current, $relationship_to_query, $role);
return $related_post;
}
add_shortcode( 'be-get-parent-id', 'be_get_parent_id' );
Not entirely sure what you want to achieve, however this is Custom code that is not anymore related to Toolset.
If you want to pass the single variables in ShortCode attributes you can do so according the DOC about it:
https://codex.wordpress.org/Shortcode_API
For example I can pass the relation type and the parent slug in the shortcode attributes:
function be_get_parent_id($atts){
global $post;
$post_id_current = $post->ID;
$a = shortcode_atts( array(
'relationship' => '',
'role' => '',
), $atts );
$relationship_to_query = $a['relationship'];
$role = $a['role'];
//Get related posts with new API, if none, it'll return 0, if any, the ID (hence not 0).
$related_post = toolset_get_related_post( $post_id_current, $relationship_to_query, $role);
return $related_post;
}
add_shortcode( 'be-get-parent-id', 'be_get_parent_id' );
That I use as:
[be-get-parent-id role="child" relationship="toolset-post-type-toolset-parent"]
It will output the single post related in that relationship in child role.
0 if none.
Okay, thanks again for the help. All good to go here.
- Aaron