WordPress: используйте метод = "post" для множественного выбора языка

Я создаю веб-сайт с двумя языками с двумя флагами в качестве страницы входа. Я планирую использовать <form method="post"> вокруг флагов, чтобы пользователь мог выбрать желаемый язык.

Затем на следующих страницах я хочу использовать что-то вроде:

 <?php if( $_POST['language']=='uk' ){ echo $uk; }elseif( $_POST['language']=='french' ){ echo $french;} ?> 

Поэтому, щелкнув флаг, они выбрали язык, который они хотят. Будет ли это работать только на следующей странице после того, как они щелкнут по флагом или смогут переносить их на разные страницы, и все еще выбирают, какой язык был выбран?

Если это не сработает, как еще это можно сделать?


ОБНОВИТЬ:

Я не думаю, что я дал понять, что я использую WordPress, который, по-видимому, не нравится $_SESSION .

У меня есть это на шаблоне region.php, чтобы отправить выбор языка:

  <form action="<?php the_permalink(); ?>/home" name="region" method="post"> <div id="uk"> <a href="javascript:document.region.submit()" name="UK"> <img style="margin-bottom:10px;" src="<?php bloginfo('stylesheet_directory'); ?>/images/-uk.png" width="259" height="160" alt="UK" /> </a> <h1 style="color:black!IMPORTANT;">Enter United Kingdom site</h1> </div> <div id="world"> <a href="javascript:document.region.submit()" name="World"> <img style="margin-bottom:10px;" src="<?php bloginfo('stylesheet_directory'); ?>/images/ world.png" width="258" height="160" alt=" Rest of the World" /> </a> <h1 style="color:black!IMPORTANT;">Enter Rest of the World site</h1> </div> </form> 

Что мне нужно, чтобы надеть каждый другой шаблон, чтобы проверить, какой язык был выбран? Чтобы помочь с примером, если Великобритания была выбрана, она может просто отозваться «Великобритания», если остальная часть мира была выбрана, то она может просто показать «Мир».

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

ответы

Во-первых, для добавления региональной / многоязычной поддержки на сайт wordpress нет лучшей альтернативы этому плагину: http://wpml.org/ . У этого есть стоимость, связанная с этим, но его не запретительная (вы платите за огромную поддержку).

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

Кодовый материал

У вашей исходной формы html не было никаких входов. Это была форма, которая ничего не представляла. Эта форма имеет два подчиненных, названных тем же самым location . Таким образом, какая бы ни кнопка нажата, будет отправлена ​​ее величина против $_POST['location'] .

 <form action="<?php the_permalink(); ?>/home" name="region" method="post"> <div id="uk"> <input type="submit" name="location" value="UK" /> <img style="margin-bottom:10px;" src="<?php bloginfo('stylesheet_directory'); ?>/images/uk.png" width="259" height="160" alt="UK" /> <h1 style="color:black!IMPORTANT;">Enter United Kingdom site</h1> </div> <div id="world"> <input type="submit" name="location" value="World" /> <img style="margin-bottom:10px;" src="<?php bloginfo('stylesheet_directory'); ?>/images/world.png" width="258" height="160" alt="Rest of the World" /> <h1 style="color:black!IMPORTANT;">Enter Rest of the World site</h1> </div> </form> 

Напишите действие WordPress для обработки сообщения. Добавьте это в файл функций вашей темы. посмотрите http://php.net/manual/en/function.setcookie.php для документов setcookie.

 function set_location_cookie() { if(isset($_POST['location'])) { setcookie('location', $_POST['location'], time()+1209600); } } add_action('init', 'set_location_cookie'); 

Затем, где угодно, вы хотите знать местоположение:

 <?php echo $_COOKIE["location"]; ?> 

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

Сначала я нажал на Великобританию, и это установило cookie, затем я вернулся и нажал «Мир», но это не копировало куки с миром, оно снова показало Великобританию. Можно ли протирать файлы cookie каждый раз, когда производится другой выбор?

Таким образом, это проблема, связанная с тем, как файлы cookie работают на техническом уровне:

Когда браузер делает это [запрашивает сайт], он будет смотреть на вашем компьютере на файл cookie, установленный [вашим сайтом]. Если он найдет файл cookie, ваш браузер отправит все пары имя-значение в файл на [сервер] вместе с URL-адресом. Если файл cookie не найден, он не будет отправлять данные cookie.

Новые данные cookie изначально не отправляются, b / c it inst до тех пор, пока запрос не будет отправлен из вашего браузера на сервер, чтобы данные нового файла cookie были сохранены и доступны для отправки с запросом.

Как вы это делаете? перенаправлять после успешного события cookie.

 function set_location_cookie() { if(isset($_POST['location'])) { // Set Cookie setcookie('location', $_POST['location'], time()+1209600); // Reload the current page so that the cookie is sent with the request header('Location: '.$_SERVER['REQUEST_URI']); } } add_action('init', 'set_location_cookie'); 

Также можно использовать изображения флагов в качестве кнопок отправки? Да, используйте CSS для стилизации ваших кнопок ввода.

Добавьте идентификатор к каждому входу: id="uk-button" и id="world-button"

CSS:

 #uk-button { background-image: url(uk-flag.png); background-size: 100%; background-repeat:no-repeat; } #world-button { background-image: url(world-flag.png); background-size: 100%; background-repeat:no-repeat; } 

Я бы отбросил выделение в переменную $_SESSION . Это останется с ними, пока они не уйдут. Вы также можете использовать cookie очень хорошо. На самом деле сочетание двух было бы здорово, это связывает пользователей, которые не разрешают куки-файлы запускаться на основе посещения, и людям, у которых есть файлы cookie, нужно будет только один раз выбрать.

Изменить: Пример рабочего кода:

 <form action="<?php the_permalink(); ?>/home" name="region" method="post"> <div id="uk"> <a href="javascript:document.region.submit()" name="UK"> <img style="margin-bottom:10px;" src="<?php bloginfo('stylesheet_directory'); ?>/images/=uk.png" width="259" height="160" alt="UK" /> </a> <h1 style="color:black!IMPORTANT;">Enter United Kingdom site</h1> </div> <div id="world"> <a href="javascript:document.region.submit()" name="World"> <img style="margin-bottom:10px;" src="<?php bloginfo('stylesheet_directory'); ?>/images/world.png" width="258" height="160" alt="Rest of the World" /> </a> <h1 style="color:black!IMPORTANT;">Enter Rest of the World site</h1> </div> </form> // I assume that this form sends a POST request to the following page URL. 

страницу, на которую перенаправляется форма:

 <?php session_start(); if(isset($_POST['country'])) // assuming that your form returns a field called 'country'... { $_SESSION['myCountry'] = htmlspecialchars($_POST['country']); // Assumes that myCountry is now 'UK' or 'World'... } header('Location: http://www.example.com/yourIndexPage.php'); // You want to use a quick snippet to process the form and // then redirect them away. This makes for less stupid BACK actions // in the browser as well as data being resent to the code. ?> 

yourIndexpage.php

 <?php // As the $_SESSION is now set, we can use it in the page as follows: session_start(); switch($_SESSION['myCountry']) { case 'UK': echo $UK; // And anything else you want to do with the UK language. break; case 'World': echo $world; // etc etc etc... break; default: // echo out default stuff, probably 'World' at a guess. break; } ?> 

Если вы используете wordpress, вы, вероятно, должны это прочитать .

Если вы не хотите использовать файлы cookie, вы можете сделать это таким образом.

 session_start(); if(!isset($_SESSION['language'])){ $_SESSION['language'] = 'English'; //default language } 

затем, когда у вас есть две кнопки, где один – английский, а другой – немецкий или любой другой, что вы желаете.

 <a href="?language=English">English</a> <a href="?language=German">German</a> 

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

 if(isset($_GET['language'])){ if($_GET['language'] == 'English'){ $_SESSION['language'] = 'English'; } if($_GET['language'] == 'German'){ $_SESSION['language'] = 'German'; } } 

Переменная $ _POST содержит данные, содержащиеся только в одном запросе (см. POST (HTTP) ), поэтому они будут видеть соответствующий контент после «щелчка» или отправки какой-либо формы, поэтому после запроса на вашу страницу.

Для более постоянного хранения пользовательских настроек необходимо сохранить эти параметры в данных «сеансов», которые доступны в переменной $ _SESSION и являются постоянными, поэтому будут доступны до тех пор, пока ваши посетители не будут просматривать ваши страницы. Более постоянное, но немного менее чистое решение – это сохранение настроек для файлов cookie, для которых вы можете определить срок действия, чтобы они также использовались во время следующего посещения.

См. Пример:

 <?php session_start(); $language = $_POST['language']; $_SESSION['language'] = $language; 

… и в другом месте:

 <?php session_start(); $language = $_SESSION['language']; 

Или вы можете использовать файлы cookie:

 <?php session_start(); $language = $_POST['language']; set_cookie('language', $language, 365 * 24 * 60 * 60); // will live for one year 

… и в другом месте:

 $language = $_COOKIE['language']; 

Он не будет работать на других страницах. POST-переменные отправляются не все время. Он отправляет только при отправке формы. Вы можете использовать COOKIES для своей задачи. Сохраните переменную там и проверьте ее на каждой странице.

Вам действительно нужны сеансы / файлы cookie, если вы хотите, чтобы выбор сохранялся (или продолжайте передавать значение через GET как ?lang=uk , но это не очень элегантно). Кстати, вам не нужен образ в гиперссылке, по которой поведение по умолчанию заблокировано, а его родительская форма отправлена ​​с помощью JavaScript. Вы можете просто использовать что-то вроде этого:

 <input alt="en-UK" name="lang" src="uk-flag.png" type="image" value="en-UK"> 

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