WordPress: плагин переводчик заголовков

Позавчера можно сказать девственности лишился, написал свой первый плагин под WordPress. Функционал не сложный, но нужный. Когда сохраняешь статью ссылка делается из названия с удалением всяких нецензурных символов и заменой пробелов на тире. Но никто же своим страницам не даёт русские ссылки, это плохо во-первых для SEO, а во-вторых просто не читабельно потому что буквы преобразуются в ASCII коды, да еще и по 6 символов на букву! Так например слово ‘бля’ будет зашифровано как %d0%b1%d0%bb%d1%8f. А переводить каждый раз руками все заголовки лень, вот я и прикрутил свой Google Transtator к WordPress’у.

Естественно я сначала попытался найти плагин реализующий подобный функционал в репозитории WordPress’а, но там был только перевод с китайского на английский, что мне немного не подходило ;). Поскольку опыта в написании плагинов под WordPress у меня не было я взял за основу именно этот плагин выкинув из него все лишнее, на мой взгляд и дополнив его своим Google Transtator’ом. Получилось я думаю не очень плохо, зато я переписал его под PHP5 и поправил объектную модель. Все что у меня получилось вы можете увидеть ниже.


<?php
/*
Plugin Name: TitleTranslate
Plugin URI: http://mabp.kiev.ua/2009/03/28/wordpress-plugin-title-translator/
Version: 1.0
Description: Translate title fot permanent link
Author: CTAPbIu_MABP
Author URI: http://mabp.kiev.ua/
*/

if(!class_exists('TitleTranslate')):
class TitleTranslate{
	private $slug_name;
	private $slug_title;

	public function __construct($wp_version){
		add_filter('title_save_pre', array(&$this,'get_from_title'), 0);
		add_filter('name_save_pre', array(&$this,'put_to_name'), 0);
		if($wp_version > 2.4 && strpos($_SERVER['REQUEST_URI'], 'admin-ajax.php') && $_POST['action'] === 'sample-permalink'){
			add_filter('sanitize_title', array(&$this,'ajax_slug'),0);
		}
	}

	public function ajax_slug($name){
		remove_filter('sanitize_title', array(&$this,'ajax_slug'), 0);
		$name = $this->put_to_name($name);
		add_filter('sanitize_title', array(&$this,'ajax_slug'), 0);
		return $name;
	}

	public function get_from_title($title){
		$this->slug_name = '';
		$this->slug_title = $title;
		return $title;
	}

	public function put_to_name($name){

		if(!empty($this->slug_name))
			return $this->slug_name;
		
		if(empty($name) && !empty($this->slug_title))
			$name = $this->slug_title;
				
		$translation = $this->translate($name);
		$translation = sanitize_user(sanitize_title($translation), true);
		return $translation ? $translation : $name;
	}
	
	public function translate($str, $from='ru', $to='en'){
		$fp = fsockopen("www.google.com", 80, $errno, $errstr, 30);
		if (!$fp) {
			//trigger_error("$errstr ($errno)<br />\n", E_USER_WARNING);
			return "";
		} else {
			$out = "GET /translate_a/t?client=t&sl=".$from."&tl=".$to."&text=".urlencode($str)." HTTP/1.1\r\n";
			$out .= "Host: www.google.com\r\n";
			$out .= "User-Agent: Mozilla/5.0\r\n";
			$out .= "Accept-Encoding: deflate\r\n";
			$out .= "Connection: Close\r\n\r\n";
			
			fputs($fp, $out);
			$res = "";
			while (!feof($fp)) {
				$res .=  fgets($fp, 1024);
			}
			fclose($fp);
		}
		
		$res = explode("\r\n\r\n",$res);
		$res = explode("\r\n",$res[1]);
		return substr($res[1],0,1) == '[' ?
			substr($res[1],2,strpos($res[1],'"',2)-2) :
			substr($res[1],1,-1);
	}
}
endif;

new TitleTranslate($wp_version);
?>

А если кто-то захочет скачать то вот ссылка на файл. Устанавливается так же как и все остальные плагины копированием *.php файла в папку wp-content/plugins.

9 Комментарии “WordPress: плагин переводчик заголовков

  1. А я заметил за собой ято я урл все равно редактирую вручную… И отключил плагин, который для этого нужен :/

  2. у тебя насколько я помню был плагин транслитерации, это как-то не кашерно

  3. Что-то я не понял сути этого плагина. А чем RusToLat не устраивает?

  4. Да, он делает транслитерацию. Теперь понял. Надо будет протестировать.

  5. Можешь подсказать плагин, который бы позволил сделать сайт мультиязычным, если я к примеру хочу писать неокоторые статьи на двух языках. я пока нашел xLanguage и WP Multilingual ..

Комментарии закрыты