Как использовать правило перезаписи или переписать конечную точку для переключения языков?

Цель состоит в том, чтобы это работало:

www.pageurl.de - & gt; ничего не происходит

www.pageurl.de/en/- & gt; переменная устанавливается и сохраняется в файле cookie

, это также необходимо для работы с постоянными ссылками, категориями и т. д., например:

www.pageurl.de/en/linktopost /

www.pageurl.de/en/categoryname /

я пытался работать с
add_rewrite_endpoint ('en', EP_PERMALINK | EP_PAGES | EP_ROOT | EP_CATEGORIES);

но конечная точка (что имеет смысл) работает только в конце URL

я также пытался работать с

$ language = "EN"; add_rewrite_rule ('^'. $ language. '/([^ /] *) /? $', 'index.php? lang = $ match [1]', 'top'); но www.pageurl .de /en /возвращает только 404

Каков наилучший способ сделать это?

Мне нужно, чтобы языковая модель была в URL на всей странице, скажем, после при изменении страницы в меню «en» должно быть в URL.

Ответы и комментарии:

большое спасибо, это здорово, теперь я установил cookie со значением из регулярного выражения. Знаете ли вы, как можно разместить параметр языка ("/ en /") в URL на всей странице? Как добавить параметр к каждой ссылке на странице? Большое спасибо!
Создан 06-09-2016 08:58 buckdanny

Для этого вы можете добавить фильтр в «home_url» (developer.wordpress.org/reference/hooks/home_url) и добавить языковой фрагмент к возвращаемому URL.
Создан 07-09-2016 02:11 maxime schoeni

вау, большое спасибо, это отличный намек! Еще одна проблема: правила перезаписи работают для индекса и для страниц, но не для постов нестандартного типа, ссылки дают 404, знаете ли вы, почему?
Создан 08-09-2016 09:30 buckdanny

я думаю, что могу исправить это с помощью `$ key = '(?: de | en /)?' , $ Ключ; `меняется на $ key = '(?: de | en) /?' , $ Ключ;
Создан 08-09-2016 10:17 buckdanny

следующая проблема: home_urlfilter изменяет только постоянные ссылки, но не echo (home_ur) l или get_bloginfo ('url'). Я не понимаю, почему
Создан 08-09-2016 10:51 buckdanny

Вы не можете сделать это, просто добавив правило перезаписи, вам нужно изменить все записанные правила.
Вот простой способ сделать это:
function my_rewrite_rules ($ rules) {

    $ new_rules = array ();

    $ new_rules ['(?: de | en) /? $'] = 'index.php';

    foreach ($ rules as $ key => $ val) {

        $ key = '(?: de | en) /?' , $ Ключ;

        $ new_rules [$ key] = $ val;

    }

    вернуть $ new_rules;
}

add_filter ('rewrite_rules_array', 'my_rewrite_rules', 11);

Теперь вам все еще нужен способ получить значение языка, чтобы сохранить его в файле cookie.
Вы можете добавить параметр для языка, чтобы получить его внутри суперглобального $ _GET. Но это будет означать, чтобы компенсировать все остальные параметры всех других правил, и это будет включать много регулярных выражений.
Вместо этого вы можете просто получить язык, запросив глобальную переменную $ _SERVER:
preg_match ('/ / (de | en) ( / | $ | ? | #) /', $ _SERVER ['REQUEST_URI'], $ соответствует);
Создан 08-09-2016 12:20