60 lines
1.8 KiB
PHP
60 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace WPML\Troubleshooting;
|
|
|
|
class AssignTranslationStatusToDuplicates {
|
|
|
|
public static function run() {
|
|
global $sitepress, $iclTranslationManagement;
|
|
|
|
$active_language_codes = array_keys( $sitepress->get_active_languages() );
|
|
$duplicated_posts = self::get_duplicates();
|
|
$updated_items = 0;
|
|
foreach ( $duplicated_posts as $original_post_id ) {
|
|
$element_type = 'post_' . get_post_type( $original_post_id );
|
|
$trid = $sitepress->get_element_trid( $original_post_id, $element_type );
|
|
$element_language_details = $sitepress->get_element_translations( $trid, $element_type );
|
|
$item_updated = false;
|
|
foreach ( $active_language_codes as $code ) {
|
|
if ( ! isset( $element_language_details[ $code ] ) ) {
|
|
continue;
|
|
}
|
|
/** @var \stdClass $element_translation */
|
|
$element_translation = $element_language_details[ $code ];
|
|
if ( ! isset( $element_translation->element_id ) || $element_translation->original ) {
|
|
continue;
|
|
}
|
|
$translation = $iclTranslationManagement->get_element_translation(
|
|
$element_translation->element_id,
|
|
$code,
|
|
$element_type
|
|
);
|
|
if ( ! $translation ) {
|
|
$status_helper = wpml_get_post_status_helper();
|
|
$status_helper->set_status( $element_translation->element_id, ICL_TM_DUPLICATE );
|
|
$item_updated = true;
|
|
}
|
|
}
|
|
if ( $item_updated ) {
|
|
$updated_items ++;
|
|
}
|
|
if ( $updated_items >= 20 ) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return $updated_items;
|
|
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
private static function get_duplicates() {
|
|
global $wpdb;
|
|
|
|
$duplicated_posts_sql = "SELECT meta_value FROM {$wpdb->postmeta} WHERE meta_key='_icl_lang_duplicate_of' AND meta_value<>'' GROUP BY meta_value;";
|
|
return $wpdb->get_col( $duplicated_posts_sql );
|
|
}
|
|
}
|