Skip to content

Early-bird lifetime licence: $199 once, for the first 200 buyers only. See the offer

Greeklish file names for uploads

Uploaded files with Greek names get names in Latin letters (φωτογραφία.jpg becomes fotografia.jpg), so their addresses work everywhere.

  • Type PHP
  • Runs Everywhere (runs as WordPress loads)
  • Category Greek e-shop
  • Tested with WordPress 7.1
PHP
<?php

// Greek letters in the names of uploaded files become Latin letters
// (φωτογραφία.jpg → fotografia.jpg). Only uploads change, and only their
// Greek letters: WordPress then cleans up the name as usual.
$greeklish = static function ( string $text ): string {
	return (string) preg_replace_callback(
		'/\p{Greek}+/u',
		static function ( array $m ): string {
			$word = strtr( mb_strtolower( $m[0], 'UTF-8' ), array( 'ου' => 'ou', 'ού' => 'ou' ) );
			return strtr(
				$word,
				array(
					'α' => 'a', 'ά' => 'a', 'β' => 'v', 'γ' => 'g', 'δ' => 'd', 'ε' => 'e', 'έ' => 'e',
					'ζ' => 'z', 'η' => 'i', 'ή' => 'i', 'θ' => 'th', 'ι' => 'i', 'ί' => 'i', 'ϊ' => 'i',
					'ΐ' => 'i', 'κ' => 'k', 'λ' => 'l', 'μ' => 'm', 'ν' => 'n', 'ξ' => 'x', 'ο' => 'o',
					'ό' => 'o', 'π' => 'p', 'ρ' => 'r', 'σ' => 's', 'ς' => 's', 'τ' => 't', 'υ' => 'y',
					'ύ' => 'y', 'ϋ' => 'y', 'ΰ' => 'y', 'φ' => 'f', 'χ' => 'ch', 'ψ' => 'ps', 'ω' => 'o',
					'ώ' => 'o',
				)
			);
		},
		$text
	);
};

$rename = static function ( $file ) use ( $greeklish ) {
	if ( is_array( $file ) && isset( $file['name'] ) && preg_match( '/\p{Greek}/u', (string) $file['name'] ) ) {
		$file['name'] = $greeklish( (string) $file['name'] );
	}
	return $file;
};
add_filter( 'wp_handle_upload_prefilter', $rename );
add_filter( 'wp_handle_sideload_prefilter', $rename );

In these packs

  • Greek e-shop: For shops in Greece: receipt or invoice with a checked VAT number (ΑΦΜ), Greek phone and postcode checks, a cash on delivery fee, and greeklish addresses.

Move your snippets over this afternoon.

Importing changes nothing until you switch over, and your old shortcodes keep working.