Поддержка Проблемы и решения Транслит данных в профиле

  • Всем привет! Столкнулся с одной проблемой связанной с WordPress! Все мы знаем, что изначально все ссылки (рубрик, меток, категорий, название записей и т.п.) имеют тот язык (кодировку), на котором они написаны и какую локализацию имеет сам WordPress. Эту проблему решает такой плагин как Rus-To-Lat, который автоматически из кирилицы их переводит в латиницу. В большинстве своём он отлично справляется со своей задачей, но он не меняет кодировку в данных из профиля пользователей.

    Что я имею ввиду?

    Например: Я добавил новое поле в профиле пользователей (автора) статьи, например «Город», в котором указано «Москва». Далее я создаю тэг «Москва» (Rus-to-Lat автоматически его переводит в «moscow») и соответственно пытаюсь вывести ссылку из профиля автора (the_author_meta) в нужном месте и привязать её к тэгу, что бы можно было найти все материалы, связанные с «Москвой» таким способом:

    <a href="http://mysite.ru/tag/<?php the_author_meta('city'); ?>"><?php the_author_meta('city');?></a>

    Но как Вы наверное и понимаете, что в данном примере это будет выглядеть всё таким образом:

    <a href="http://mysite.ru/tag/<strong>Москва</strong>">Москва</a>

    А вот тэг то расположен по другому адресу, уже с транслитом и с маленькой буквой:

    <a href="http://mysite.ru/tag/<strong>moscow</strong>">Москва</a>

    Вот и сам вопрос: как можно поля из профиля автора конвертировать в кирилицу и привязать её к тэгу или категории? Если Вы поняли, что я пытался объяснить, но знаете решение попроще, прошу рассказать, буду очень рад 🙂

Просмотр 10 ответов — с 1 по 10 (всего 10)
  • <?php
    $city = get_the_author_meta('city');
    $term = get_term_by('name', $city, 'post_tag');
    if($term) echo '<a href="'.get_term_link($term->slug, 'post_tag').'">'.$term->name.'</a>';
    else echo $city;
    ?>

    Спасибо vjpo огромное за оперативность, все работает как надо! Если вместо тэгов надо, что бы тоже самое происходило с категориями, меняем post_tag на category…
    Это так, может кому еще пригодится 🙂

    vjpo, а как можно учесть несколько значений, написанных например через запятую? Пользователь указывает два города, Москва, Санкт-Петербург, где разделитель между тэгами нужными является запятая? Я так понимаю, через функцию if…

    <?php
    $cities = preg_split( '/\s*,\s*/', get_the_author_meta('city'));
    foreach($cities as $city)
        ($term = get_term_by('name', $city, 'post_tag')) ? $res[] = '<a href="'.get_term_link($term->slug, 'post_tag').'">'.$term->name.'</a>' : $res[] = $city;
    echo implode(', ', $res );
    ?>

    Москва, Санкт-Петербург

    Чтобы не получилось, как в песнях «Бологое, Бологое», «Вологда» или «New York, New York», если пользователель введет один и тот же город несколько раз через зпт, можно подправить одну строку на
    $cities = array_unique($cities = preg_split( '/\s*,\s*/', get_the_author_meta('city')));

    Спасибо, будем пробовать, пока что-то не получается. Значения тэгами не делаются.

    сейчас…

    Не знаю, в чем ошибка, у меня работает и тот вариант. Можно так.

    <?php
    $sep = '';
    $cities = array_map('trim', explode(',', get_the_author_meta('city')));
    foreach($cities as $city) {
        $term = get_term_by('name', $city, 'post_tag');
        if($term) echo $sep.'<a href="'.get_term_link($term->slug, 'post_tag').'">'.$term->name.'</a>';
        else echo $sep.$city;
        $sep = ', ';
    }
    ?>

    Извиняюсь vjpo, всё отлично работает, оба варианта! Разобрался, была проблемма с тэгами и категорями на сайте. Ещё раз спасибо, очень полезное узнал от тебя.

    На всякий случай, Rus-To-Lat устарел, есть Cyr to Lat.

    Поставил, гляну. А там отличия какие-то есть ещё, кроме как еще перевод медиа файлов?

Просмотр 10 ответов — с 1 по 10 (всего 10)
  • Тема «Транслит данных в профиле» закрыта для новых ответов.