1

I try to keep a copy of the previous version a custom post when this one is updated. It works, but duplicate the previous version twice. Help appreciated !

DUPLICATE FUNCTION :

function duplicate($post_id) {
$title   = get_the_title($post_id);
$oldpost = get_post($post_id);
$post    = array(
  'post_title' => $title,
  'post_status' => 'draft',
  'post_date' => $oldpost->post_date,
  'post_type' => $oldpost->post_type
);

$new_post_id = wp_insert_post($post);


$meta = get_post_meta($post_id);
foreach ( $meta as $key => $values) {
  foreach ($values as $value) {
    update_post_meta( $new_post_id, $key, $value );
  }
}
// GALLERY
$gal = get_field('field_5ebbe9729c82d', $post_id);
update_field('field_5ebbe9729c82d', $gal, $new_post_id);


return $new_post_id; }

SAVE WITH A NEW DATE

function modify_post_date( $post_id, $post, $update )
{   
if ( defined( 'DOING_CRON' ) && DOING_CRON ) { return; }
if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { return; }
if ( defined( 'DOING_AJAX' ) && DOING_AJAX )  { return; }
if (wp_is_post_autosave($post_id)) { return; }
if( !$update ) { return; }
if ( !current_user_can( 'edit_post', $post_id ) ) { return; }
if( $post->post_type !== 'armoire' ) { return; }
if( wp_is_post_revision( $post_id ) ) { return; }
if( $post->post_status == 'publish' ) {

    remove_action( 'save_post' , 'modify_post_date' , 10, 3 ); 

    $new_date = $post->post_modified;
    $old_date = $post->post_date;
    $title = $post->post_title;
    $current_user = wp_get_current_user();
    $author = $current_user->ID;
    wp_update_post( array(  'post_date' => $new_date ));

    remove_action( 'save_post' , 'modify_post_date' , 10, 3 ); 

}
}
add_action( 'save_post' , 'modify_post_date' , 10, 3 ); 

SAVE PREVIOUS VERSION

function _duplicate($post_id, $post_after, $post_before){

$p_status = get_post_status($post_id); 
$p_type = get_post_type($post_id); 

if ( defined( 'DOING_CRON' ) && DOING_CRON ) { return; }
if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { return; }
if ( defined( 'DOING_AJAX' ) && DOING_AJAX )  { return; }
if (wp_is_post_autosave($post_id)) { return; }
if ( !current_user_can( 'edit_post', $post_id ) ) { return; }
if( $p_type !== 'armoire' ) { return; }
if( wp_is_post_revision( $post_id ) ) { return; }


if( $p_status == 'publish' ) {

    remove_action( 'post_updated', '_duplicate', 50, 3 );

    duplicate($post_before);

    remove_action( 'post_updated', '_duplicate', 50, 3 );
}
}

add_action( 'post_updated', '_duplicate', 50, 3 );

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.