This topic refers to this old thread: https://toolset.com/forums/topic/relationship-migration-problem-no-merge-allowed/
What I know about PHP is dangerous - could I please ask for some help here to write the snippet for the first relationship to be run in custom codes?
The migrated relationship has created 'publication_authorship' between post types 'people' and 'publication'.
I have created the new M2M relationship post type 'publication-person'
However, I can't work out the syntax to loop through the posts and create the new values.
I'd need to:
- use toolset_get_related_posts to loop through 'poeple' (or 'publication_authorship'?) and get the related posts
- and for each of those results use toolset_connect_posts to create the new record in 'publication-person'
Could you please assist here?
Many thanks
Hello,
Please elaborate the question with more details:
and for each of those results use toolset_connect_posts to create the new record in 'publication-person'
How are you going to create the new record record in 'publication-person'?
There should be some connection between between "person" post and "people" post.
Are those "person" posts using the same post title as "people" posts?
I have checked your previous thread:
https://toolset.com/forums/topic/relationship-migration-problem-no-merge-allowed/
Both the duplicator package file link and site credentials are not valid any more.
Please provide your website database dump file in below private message box, I need to test it in my localhost.
Hi Luo
As per Nigel's post - I was using the Legacy relationships, and had one post type (authorships) to act as intermediary between people (the authors of the content) and the various publication post types.
When I ran the migration to the new relationships, Types 3 can't share the same intermediate post type, so the migration created one post type for people_authorship and then multiple post types for publication_authorship (and news_authorship, blog_authorship etc.).
I want to write a script to run in Toolset Custom Code to copy the data to each new M2M relationship post type, as Nigel suggested.
The script would loop through people_authorship and publication_authorship to get the related publications and use toolset_connect_posts to make a connection using the new people - publication relationship in the new M2M relationship post type 'Publications People'.
I would then repeat for each of the other post types to re-create the relationships between people and that post type.
Thanks for the details, I am downloading the files, will update here if there is anything found.
Here are what I found, you can try these:
1) Create a PHP file in your website root folder, for example "batch-merge-relationships.php", with below codes:
<?php
define( 'WP_USE_THEMES', false ); // Don't load theme support functionality
require( 'wp-load.php' );
// change settings - Start
$relationship = 'publication-person';
$parent_type = 'publication';
$child_type = 'people';
$parent_field_slug = '_wpcf_belongs_publication_id';
$child_field_slug = '_wpcf_belongs_people_id';
// change settings - End
$args = array(
'post_type' => 'authorship',
'fields' => 'ids',
'nopaging' => 'true',
/* 'posts_per_page' => 1,
'paged' => true, */
'meta_query' => array(
'relation' => 'AND',
array(
'key' => $parent_field_slug,
'compare' => 'EXISTS',
),
array(
'key' => $parent_field_slug,
'compare' => 'NOT IN',
'value' => array('', 0),
),
array(
'key' => $child_field_slug,
'compare' => 'EXISTS',
),
array(
'key' => $child_field_slug,
'compare' => 'NOT IN',
'value' => array('', 0),
),
),
);
$query = new WP_Query( $args );
$post_ids = $query->posts;
header('Content-Type: text/plain');
foreach($post_ids as $k => $post_id){
$parent = get_post_meta($post_id, $parent_field_slug, true);
$child = get_post_meta($post_id, $child_field_slug, true);
if(function_exists('toolset_connect_posts') && get_post_type($parent) == $parent_type && get_post_type($child) == $child_type){
echo '( ' . $post_id . ')';
if(toolset_connect_posts( $relationship, $parent, $child )){
echo ' connected: ' . $parent . ' and ' . $child;
}
echo "\r\n";
}
}
2) Open above file URLs, for example:
hidden link
You should be able to see the results.
Please backup your website database first, and you can delete that file after the migration.
Thank you Luo! I really appreciate the assistance - this worked 100%. Really useful script for anyone who needs to convert legacy post relationships to current M2M relationships.