| Server IP : 5.129.245.98 / Your IP : 216.73.216.246 Web Server : Apache/2.4.66 (Debian) System : Linux 1b8c17c336b9 6.8.0-111-generic #111-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 11 23:16:02 UTC 2026 x86_64 User : www-data ( 33) PHP Version : 8.3.30 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : ON | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/html/wp-content/plugins/cyr2lat/src/php/BackgroundProcesses/ |
Upload File : |
<?php
/**
* Background old term slugs converting process
*
* @package cyr-to-lat
*/
namespace CyrToLat\BackgroundProcesses;
use CyrToLat\Main;
use stdClass;
/**
* Class TermConversionProcess
*/
class TermConversionProcess extends ConversionProcess {
/**
* Site locale.
*
* @var string|null
*/
private ?string $locale;
/**
* Current term to convert.
*
* @var stdClass
*/
private stdClass $term;
/**
* Process action name
*
* @var string
*/
protected $action;
/**
* TermConversionProcess constructor.
*
* @param Main $main Plugin main class.
*/
public function __construct( Main $main ) {
$this->action = constant( 'CYR_TO_LAT_TERM_CONVERSION_ACTION' );
$this->locale = get_locale();
parent::__construct( $main );
}
/**
* Task. Updates single term
*
* @param stdClass $term Queue item to iterate over.
*
* @return boolean
* @noinspection PhpParameterNameChangedDuringInheritanceInspection
* @noinspection PhpMissingReturnTypeInspection
* @noinspection ReturnTypeCanBeDeclaredInspection
*/
protected function task( $term ) {
global $wpdb;
$this->term = $term;
$slug = urldecode( $term->slug );
add_filter( 'locale', [ $this, 'filter_term_locale' ] );
$transliterated_slug = $this->main->transliterate( $slug );
remove_filter( 'locale', [ $this, 'filter_term_locale' ] );
if ( $transliterated_slug !== $slug ) {
// phpcs:ignore WordPress.DB.DirectDatabaseQuery
$wpdb->update( $wpdb->terms, [ 'slug' => rawurlencode( $transliterated_slug ) ], [ 'term_id' => $term->term_id ] );
$this->log( __( 'Term slug converted:', 'cyr2lat' ) . ' ' . $slug . ' => ' . $transliterated_slug );
}
return false;
}
/**
* Complete
*
* @noinspection ReturnTypeCanBeDeclaredInspection
*/
protected function complete() {
parent::complete();
wp_cache_flush();
$this->log( __( 'Term slugs conversion completed.', 'cyr2lat' ) );
}
/**
* Filter term locale
*
* @return string|mixed
* @noinspection PhpUndefinedFunctionInspection
*/
public function filter_term_locale() {
// Polylang filter.
if ( class_exists( 'Polylang' ) ) {
$pll_pll_get_term_language = pll_get_term_language( $this->term->term_taxonomy_id );
if ( false !== $pll_pll_get_term_language ) {
return $pll_pll_get_term_language;
}
return $this->locale;
}
// WPML filter.
$args = [
'element_type' => $this->term->taxonomy,
'element_id' => $this->term->term_taxonomy_id,
];
$wpml_element_language_details = apply_filters( 'wpml_element_language_details', false, $args );
if ( ! isset( $wpml_element_language_details->language_code ) ) {
return $this->locale;
}
$language_code = $wpml_element_language_details->language_code;
$wpml_active_languages = apply_filters( 'wpml_active_languages', false, [] );
return $wpml_active_languages[ $language_code ]['default_locale'] ?? $this->locale;
}
}