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

Тема в разделе "Wordpress", создана пользователем LLlaMaH, 15 авг 2009.

Статус темы:
Закрыта.
Модераторы: DzSoft, Sorcus
  1. LLlaMaH

    LLlaMaH Вот он я

    Регистр.:
    1 апр 2009
    Сообщения:
    251
    Симпатии:
    359
    Делал очередной ГС с помощью плагина фидвордпресс.
    Там в настройках можно указать, чтобы автоматом создавалась рубрика, если такой еще нет. Но я забыл (как в той песне, сам не знаю, почему) включить плагин рус-ту-лат. И ссылки у всех рубрик с русским названием (а их около 400 штук) выглядят типа /%d0%b1%d0%be . Вопрос. Можно как-нибудь автоматически переопределить все ссылки на рубрики (сделать их /rubrika), а не переименовывать каждую ссылку вручную?
     
  2. whitewolff

    whitewolff Лимонадный Джо :)

    Регистр.:
    29 май 2007
    Сообщения:
    168
    Симпатии:
    33
    найди гденить(в том же плагине rus2lat например) функцию перегона текста в транслит, и пройдись по нужным столбцам в дампе БД.
     
  3. LLlaMaH

    LLlaMaH Вот он я

    Регистр.:
    1 апр 2009
    Сообщения:
    251
    Симпатии:
    359
    Не совсем понял, что делать. Сделал дамп базы, нашел функцию, которая переводит в транслит. Там стоит присваивание русской букве ее латинского акэвивалента. Вот что значит "пройдись" по нужным столбцам не могу понять?
     
  4. mydooms

    mydooms Постоялец

    Регистр.:
    22 фев 2008
    Сообщения:
    105
    Симпатии:
    26
    как-то так

    Код:
    /* коннект к бд */
    
    //функция транслита
    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";
    }
         
     
  5. LLlaMaH

    LLlaMaH Вот он я

    Регистр.:
    1 апр 2009
    Сообщения:
    251
    Симпатии:
    359
    Код:
    <? 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 я знаю на уровне начинающего)? Благо сделал дамп базы.
     
  6. Un4got10

    Un4got10 Создатель

    Регистр.:
    1 фев 2009
    Сообщения:
    18
    Симпатии:
    0
    а не легче руками в админке?
     
  7. LLlaMaH

    LLlaMaH Вот он я

    Регистр.:
    1 апр 2009
    Сообщения:
    251
    Симпатии:
    359
    Я уже так и сделал. Но не прошу тему закрыть, потому что хотелось бы разобраться, в чем у меня была ошибка.
     
  8. blet

    blet Постоялец

    Регистр.:
    8 май 2007
    Сообщения:
    105
    Симпатии:
    16
    как вариант можно юзать штатные функции движка, кладем скрипт в папку корня 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);
        }
     
  9. Serenitun

    Serenitun Писатель

    Регистр.:
    26 май 2009
    Сообщения:
    16
    Симпатии:
    1
    В работе данного модуля (рус-ту-лат) я заметил глюк, когда подключаешь его к уже существующему блогу и перегоняешь все названия тем, иногда корявит названия тем содержащих символы подчеркивания.

    Когда ставишь на блог с нуля, то все нормально.:nezn:
     
  10. incognet

    incognet Создатель

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