• DONATE to NULLED!
    Вы можете помочь Форуму и команде, поддержать финансово.
    starwanderer - модератор этого раздела будет Вам благодарен!

Помощь Как сделать красивые ссылки у рубрик

Статус
В этой теме нельзя размещать новые ответы.

LLlaMaH

Вот он я
Регистрация
31 Мар 2009
Сообщения
247
Реакции
320
Делал очередной ГС с помощью плагина фидвордпресс.
Там в настройках можно указать, чтобы автоматом создавалась рубрика, если такой еще нет. Но я забыл (как в той песне, сам не знаю, почему) включить плагин рус-ту-лат. И ссылки у всех рубрик с русским названием (а их около 400 штук) выглядят типа /%d0%b1%d0%be . Вопрос. Можно как-нибудь автоматически переопределить все ссылки на рубрики (сделать их /rubrika), а не переименовывать каждую ссылку вручную?
 
Делал очередной ГС с помощью плагина фидвордпресс.
Там в настройках можно указать, чтобы автоматом создавалась рубрика, если такой еще нет. Но я забыл (как в той песне, сам не знаю, почему) включить плагин рус-ту-лат. И ссылки у всех рубрик с русским названием (а их около 400 штук) выглядят типа /%d0%b1%d0%be . Вопрос. Можно как-нибудь автоматически переопределить все ссылки на рубрики (сделать их /rubrika), а не переименовывать каждую ссылку вручную?
найди гденить(в том же плагине rus2lat например) функцию перегона текста в транслит, и пройдись по нужным столбцам в дампе БД.
 
найди гденить(в том же плагине rus2lat например) функцию перегона текста в транслит, и пройдись по нужным столбцам в дампе БД.
Не совсем понял, что делать. Сделал дамп базы, нашел функцию, которая переводит в транслит. Там стоит присваивание русской букве ее латинского акэвивалента. Вот что значит "пройдись" по нужным столбцам не могу понять?
 
как-то так

Код:
/* коннект к бд */

//функция транслита
function translit ($string) {
     .....
     return $translit_string;
}

//запрос к БД, перебор всех названий рубрик и меток, перевод их в транслит, запись транслита в slug-значение
$q = "select id, name from wp_blog_terms";
$r = mysql_query ($q);
while ($m = mysql_fetch_array($r)) {
     $translit_name = translit($m['name']);
     $q2 = "update wp_blog_terms set slug='".$translit_name."' where id=".$m['id'];
     if (mysql_query($q2)) echo $m['name']." -> ".$translit_name."\n";
     else echo mysql_errno() . ": " . mysql_error() . "\n";
}
 
Код:
<? mysql_connect ("host","user","pass");
mysql_select_db ("base");
$gost = array(
   "Є"=>"EH","І"=>"I","і"=>"i","№"=>"#","є"=>"eh",
   "А"=>"A","Б"=>"B","В"=>"V","Г"=>"G","Д"=>"D",
   "Е"=>"E","Ё"=>"JO","Ж"=>"ZH",
   "З"=>"Z","И"=>"I","Й"=>"JJ","К"=>"K","Л"=>"L",
   "М"=>"M","Н"=>"N","О"=>"O","П"=>"P","Р"=>"R",
   "С"=>"S","Т"=>"T","У"=>"U","Ф"=>"F","Х"=>"KH",
   "Ц"=>"C","Ч"=>"CH","Ш"=>"SH","Щ"=>"SHH","Ъ"=>"'",
   "Ы"=>"Y","Ь"=>"","Э"=>"EH","Ю"=>"YU","Я"=>"YA",
   "а"=>"a","б"=>"b","в"=>"v","г"=>"g","д"=>"d",
   "е"=>"e","ё"=>"jo","ж"=>"zh",
   "з"=>"z","и"=>"i","й"=>"jj","к"=>"k","л"=>"l",
   "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
   "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"kh",
   "ц"=>"c","ч"=>"ch","ш"=>"sh","щ"=>"shh","ъ"=>"",
   "ы"=>"y","ь"=>"","э"=>"eh","ю"=>"yu","я"=>"ya","«"=>"","»"=>"","—"=>"-"
  );
  
  function sanitize_title_with_translit($title) {
  global $gost;
	return strtr($title, $gost);
	}
//запрос к БД, перебор всех названий рубрик и меток, перевод их в транслит, запись транслита в slug-значение
$q = "select term_id, name from wp_terms";
$r = mysql_query ($q);
while ($m = mysql_fetch_array($r)) {
     $translit_name = sanitize_title_with_translit($m['name']);
     $q2 = "update wp_terms set slug='".$translit_name."' where term_id=".$m['term_id'];
     if (mysql_query($q2)) echo $m['name']." -> ".$translit_name."\n";
     else echo mysql_errno() . ": " . mysql_error() . "\n";
} ?>

Что-то я здесь не учел - русские имена не перевелись в латиницу, а вот те, которые были в латинице стали вида "???????". Может кто подскажет (PHP я знаю на уровне начинающего)? Благо сделал дамп базы.
 
как вариант можно юзать штатные функции движка, кладем скрипт в папку корня WP
PHP:
require_once('../wp-config.php');
include_once(ABSPATH.'/wp-includes/query.php');//wp-admin/upgrade-functions.php
include_once(ABSPATH.'/wp-admin/upgrade-functions.php');//wp-admin/upgrade-functions.php

 $terms_all_ids = $wpdb->get_results("SELECT term_id FROM $wpdb->terms WHERE term_group='0'" );
 
foreach ($terms_all_ids as $terms_all_id){
echo $terms_all_id->term_id.br();
$josaa = $wpdb->get_results("SELECT name FROM $wpdb->terms WHERE term_id=$terms_all_id->term_id" );
//echo ($josaa->slug);
echo transli($josaa[0]->name);
$trans_dr_name=transli($josaa[0]->name);
echo "<br />";
$wpdb->query("
	UPDATE $wpdb->terms 
  SET slug = '$trans_dr_name'
	WHERE term_id = '$terms_all_id->term_id' "); 
echo "<br />";
}

function transli($title_tit) {
	$iso = array(
   "Є"=>"YE","/"=>"","І"=>"I","Ѓ"=>"G","і"=>"i","±"=>"#","є"=>"ye","ѓ"=>"g",
   "А"=>"A","Б"=>"B","В"=>"V","Г"=>"G","Д"=>"D",
   "Е"=>"E","Ё"=>"YO","Ж"=>"ZH"," "=>"-",
   "З"=>"Z","И"=>"I","Й"=>"J","К"=>"K","Л"=>"L",
   "М"=>"M","Н"=>"N","О"=>"O","П"=>"P","Р"=>"R",
   "С"=>"S","Т"=>"T","У"=>"U","Ф"=>"F","Х"=>"X",
   "Ц"=>"C","Ч"=>"CH","Ш"=>"SH","Щ"=>"SHH","Ъ"=>"'",
   "Ы"=>"Y","Ь"=>"","Э"=>"E","Ю"=>"YU","Я"=>"YA",
   "а"=>"a","б"=>"b","в"=>"v","г"=>"g","д"=>"d",
   "е"=>"e","ё"=>"yo","ж"=>"zh",
   "з"=>"z","и"=>"i","й"=>"j","к"=>"k","л"=>"l",
   "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
   "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"x",
   "ц"=>"c","ч"=>"ch","ш"=>"sh","щ"=>"shh","ъ"=>"",
   "ы"=>"y","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya"
  );
			    return strtr($title_tit, $iso);
	}
 
В работе данного модуля (рус-ту-лат) я заметил глюк, когда подключаешь его к уже существующему блогу и перегоняешь все названия тем, иногда корявит названия тем содержащих символы подчеркивания.

Когда ставишь на блог с нуля, то все нормально.:nezn:
 
А не у кого не возникало идее написать плагин на подобии rus2lat только чтоды он не трогал уже имеющиеся посты и только транслитирировал НОВЫЕ посты.
У меня это тоже больная тема возможно и сяду как не будь напишу плагин, как руки дойдут сделать так напишу обязательно на форуме.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху