Есть ли способ вручную контролировать имя страницы в Wordpress? - PullRequest
0 голосов
/ 18 января 2011

Я работаю на двуязычном веб-сайте для клиента, английский / французский. Я использую плагин qTranslate для контента, который отлично работает. Однако клиент запрашивает, что URL-адреса также должны быть переведены на французский.

http://englishdomain.com/users

http://frenchdomain.com/utilisateurs

В приведенных выше примерах URL «utilisateurs» должен использовать ту же страницу в админке, что и «пользователи». У меня уже есть поддержка работы englishdomain.com и frenchdomain.com ... Мне просто нужно найти способ сказать wordpress использовать страницу «users», когда pagename - «utilisateurs».

На этом сайте много разделов, поэтому я подумал о том, чтобы настроить массив всех английских => французских совпадений, а затем проверить их оттуда.

Любая помощь будет оценена. Спасибо!

Ответы [ 4 ]

1 голос
/ 18 января 2011

Интересная цель. URL фактически создается на основе слагаемой страницы, которая является единственной в своем роде ... поэтому нет простого способа соединить пару /users/ с /utilisateurs/. Или, по крайней мере, не родной путь.

Лучшее, что вы можете сделать, это подключиться к методам перенаправления URL-адресов WordPress и выполнить поиск в настроенном вручную массиве английских => слагов французской страницы.

Прямо на макушке головы, generate_rewrite_rules может быть хорошим хуком, на который стоит обратить внимание начинающим.

Другая возможность - подключиться к фильтру query_vars и вручную заменить все слагы французской страницы их английскими эквивалентами. Тогда ваш французский URL должен запросить базу данных WordPress для той же самой страницы, что и английский URL. Вам просто нужно быть уверенным, что английский слаг присутствует в базе данных, иначе вы столкнетесь с проблемами.


Не проверено Пример

Хитрость заключается в том, чтобы подключиться к системе запросов WordPress и динамически заменять части запроса по мере продвижения. Допустим, вы начинаете с такого массива (у меня есть только один элемент, потому что я не говорю по-французски):

$translations = array(
    'utilisateurs' => 'users'
);

Теперь нам нужна функция, которая будет принимать французскую строку и возвращать ее английский эквивалент:

function translate_slug( $french ) {
    if( in_array( $french, array_keys( $translations ) ) {
        return $translations[$french];
    }
    return $french
}

Далее мы подключаем фильтр query_vars и заменяем наши переменные слагаемой страницы желаемыми английскими эквивалентами:

function filter_french_slugs() {
    global $wp_query;
    $wp_query->query_vars['pagename'] = translate_slug( $wp_query->query_vars['pagename'] );
    $wp_query->query_vars['name'] = translate_slug( $wp_query->query_vars['name'] );
}
add_filter( 'pre_get_posts', 'filter_french_slugs' );

Это должно преобразовать вещи для вас, но, как я сказал выше, это пока не проверено на данный момент ... просто идея того, как вы могли бы это осуществить.

0 голосов
/ 01 мая 2012

Способ - захватить запрос до того, как wp_query установит значение (pre_get_posts);и / или перезаписать его в объекте wp_query.

Это работает для меня с глобальными переменными $ _REQUEST и перезаписью параметров wp_query, я не проверяю это с исходным объектом $ wp_query-> get ('param');

Пример. Примечание. Вместо этого используйте глобальный объект. Лучше всего передать объект WP_Query в функцию и вернуть его.См. Кодекс, wp_query передается по ссылке (http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts).

function filter_french_slugs(WP_Query $query) {
    // Don't forget sanitize $_REQUEST params, for safety. Eg. array_map()
    // Your request param (example post_type):
    $original_post_type = translate_slug($_REQUEST['my_localized_post_type']);
    // Or gettext
    $original_post_type = __($_REQUEST['my_localized_post_type']); // Sanitize this param

    // XXX The most important:
    $query->set('post_type', $original_post_type);

    // You can also work through an array of all query_vars

    // XXX Important
    return $query;
}
add_filter('pre_get_posts', 'filter_french_slugs');
0 голосов
/ 21 января 2011

Попробуйте qTranslate slug с плагином .

Добавляет виджет qTranslate Slug на страницу редактирования, который позволяет вам указать отдельного слага для каждогоlanguage.

Насколько я могу судить, он работает только на сообщениях и страницах, но не на таксономиях или пользовательских типах сообщений.

0 голосов
/ 19 января 2011

Это сложно. Вы можете посмотреть на такой плагин, как WPML, но я не думаю, что кто-то из них сделает то, что вы хотите.

Одной из возможностей для изучения является использование плагина перенаправления Urban Giraffe:

http://urbangiraffe.com/plugins/redirection/

Существует действие "сквозной", которое можно использовать, чтобы делать то, что вы хотите. Вам нужно будет определить правила перенаправления для каждой страницы, но это должно сработать.

...