Wordpress WMPL Post Type Switcher support

Adding WPML support to PostType Switcher plugin is easy. My solution is based on https://wordpress.org/support/topic/simple-hack-to-add-wpml-support/ posts.

Open Post Type Switcher plugin PHP file

It is located at wp-content/plugins/post-type-switcher/post-type-switcher.php

Find lines

// Update post type
$data['post_type'] = $post_type;

Add following code above them

// Update WPML translations as well
global $wpdb, $sitepress;
include_once( WP_PLUGIN_DIR . '/sitepress-multilingual-cms/inc/wpml-api.php' );

$post_trid = apply_filters( 'wpml_element_trid', NULL, $postarr['ID'], 'post_' . $data['post_type'] );
$translations = apply_filters( 'wpml_get_element_translations', NULL, $post_trid, 'post_' . $data['post_type'] );

if( is_array( $translations ) && !empty( $translations ) && function_exists('icl_object_id') ) {
  foreach( $translations as $translation ){
    $elem_id = $translation->element_id;

    // skip currently switched element
    if ( $elem_id == $postarr['ID'] ) continue;

    // Set the new post type.
    set_post_type( $elem_id, $post_type );

  }
}

After applying described changes your Post Type Switcher plugin will be compatible with WPML. Now each time you change a post type (eg. from post to page) all translations will be moved as well.