After creating Custom post type by user delete old one
I have created a form where users update their profile. When a profile is created or updated it creates a CPT called course. The url is the permalink + /course/ + the title of the course
/* CREATING COURSE PAGES FROM USER PROFILES */
function create_course_page( $user_id = '' ) {
$user = new WP_User($user_id);
if ( ! $user-ID ) return '';
// check if the user whose profile is updating has already a post
global $wpdb;
$course_post_exists = $wpdb-get_var( $wpdb-prepare(
SELECT ID FROM $wpdb-posts WHERE post_name = %s AND post_type = 'course' and post_status = 'publish', $user-course_name
) );
if ( ! in_array('instructor', $user-roles) ) return '';
$user_info = array_map( function( $a ){ return $a[0]; }, get_user_meta( $user-ID ) );
$title = $user_info['course_name'];
// of course create the content as you want
$content = 'This is the page for: ';
$content .= $user_info['description_course'];
$post = array(
'post_title' = $title,
'post_name' = $user-course_name,
'post_content' = $content,
'post_status' = 'publish',
'post_type' = 'course'
);
if ( $course_post_exists ) {
$post['ID'] = $course_post_exists;
wp_update_post( $post );
} else {
wp_insert_post( $post );
}
}
add_action( 'personal_options_update', 'create_course_page' );
add_action( 'edit_user_profile_update', 'create_course_page' );
The problem that I'm facing is that when someone changes the title of the course it creates a new post with this url.
So I want to delete the old post when a title change is done on the course.
NOTE: When changing title of the course it changes the URL, that is why I think it takes like a new post.
I have customised this code a bit to do the job:
/* REMOVE OLD COURSES WHEN UPDATE */
add_action( 'admin_init', 'removing_older_posts' );
function removing_older_posts() {
$args = array (
'post_type' = 'course',
'author' = get_current_user_id(),
'orderby' = 'date',
);
$query = new WP_Query( $args );
if ( $query-have_posts() ) { //if the current user has posts under his/her name
$i = 0; //create post counter
while ( $query-have_posts() ) { //loop through each post
$query-the_post(); //get the current post
if ($i 0) { //if you're not on the first post
wp_delete_post( $query-post-ID, true ); //delete the post
}
$i++; //increment the post counter
}
wp_reset_postdata();
}
}
But it isn't working.
Appreciate any suggestion :)
Topic wp-delete-post url-rewriting php custom-post-types Wordpress
Category Web