Главная > PHP, Программирование > Wordpress: плагин переводчик заголовков

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.

  1. 29 Март 2009 в 00:39 | #1
    А я заметил за собой ято я урл все равно редактирую вручную... И отключил плагин, который для этого нужен :/
  2. 29 Март 2009 в 10:18 | #2
    у тебя насколько я помню был плагин транслитерации, это как-то не кашерно
  3. 29 Март 2009 в 10:50 | #3
    Ну да, я от него отказался... :)
  4. 29 Март 2009 в 15:20 | #4
    Что-то я не понял сути этого плагина. А чем RusToLat не устраивает?
  5. 29 Март 2009 в 17:42 | #5
    RusToLat делает транслитерацию или я не прав? а у меня полноценный перевод
  6. 29 Март 2009 в 18:28 | #6
    Да, он делает транслитерацию. Теперь понял. Надо будет протестировать.
  7. Alex
    20 Июнь 2009 в 00:46 | #7
    Можешь подсказать плагин, который бы позволил сделать сайт мультиязычным, если я к примеру хочу писать неокоторые статьи на двух языках. я пока нашел xLanguage и WP Multilingual ..
  8. 20 Июнь 2009 в 01:48 | #8
    нет к сожалению я думаю что такого нет
  9. 20 Июнь 2009 в 01:55 | #9
    @CTAPbIu_MABP http://alexsnet.ru вроде рассказывал о таком плагине? у него он стоит вроде, смотри "Translator".
    ps. чего не спишь?
  1. Пока что нет уведомлений.