WordPress: Verwenden Sie method=”post” für die Auswahl mehrerer Sprachen

Lesezeit: 11 Minuten

Wordpress Verwenden Sie methodpost fur die Auswahl mehrerer Sprachen
rauben

Ich baue eine Website mit zwei Sprachen und zwei Flaggen als Einstiegsseite. Ich plane die Verwendung <form method="post"> um die Flaggen, damit der Benutzer die gewünschte Sprache auswählen kann.

Dann möchte ich auf den folgenden Seiten so etwas verwenden wie:

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

Wenn sie also auf die Flagge klicken, haben sie die gewünschte Sprache ausgewählt. Funktioniert das nur auf der nächsten Seite, nachdem sie auf die Flagge geklickt haben, oder können sie weiter zu verschiedenen Seiten navigieren und trotzdem erkennen, welche Sprache ausgewählt wurde?

Wenn das nicht geht, wie kann man es sonst machen?


AKTUALISIEREN:

Ich glaube nicht, dass ich vorher klargestellt habe, dass ich WordPress verwende, was anscheinend nicht gefällt $_SESSION.

Ich habe dies auf einer Vorlage namens region.php, um die Sprachauswahl zu übermitteln:

    <form action="<?php the_permalink(); ?>/home" name="region" method="post">              
        <div id="uk">
            <a href="https://stackoverflow.com/questions/11796046/javascript:document.region.submit()" name="UK">
                <img style="margin-bottom:10px;" src="https://stackoverflow.com/questions/11796046/<?php%20bloginfo("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="https://stackoverflow.com/questions/11796046/javascript:document.region.submit()" name="World">
                <img style="margin-bottom:10px;" src="https://stackoverflow.com/questions/11796046/<?php%20bloginfo("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>

Was muss ich in jede andere Vorlage einfügen, um zu überprüfen, welche Sprache ausgewählt wurde? Um das Beispiel zu unterstützen, wenn UK ausgewählt wurde, kann es einfach “UK” wiedergeben, wenn der Rest der Welt ausgewählt wurde, kann es einfach “Welt” anzeigen.

Dies muss über mehrere Seiten hinweg funktionieren, wenn sie also auf die About-Seite gehen, wird die Sprache überprüft, und wenn sie dann zur Kontaktseite navigieren, wird die Sprache erneut überprüft – all das muss von der anfänglichen Sprachauswahl kommen.

  • Was Ihr Code tun wird (wenn der Benutzer das Formular absendet, nachdem er seine Auswahl getroffen hat, und wenn der PHP-Code auf der Seite ausgeführt wird, die Sie in der definieren action Attribut Ihres Formulars) ist Echo, was auch immer Sie eingestellt haben $uk oder $french zu. Es sieht so aus, als hätten Sie diese Variablen auf keinen Wert gesetzt, also wird nichts gedruckt.

    – Matt

    3. August 2012 um 12:51 Uhr

  • Außerdem sollten Sie in Zukunft WP-bezogene Fragen an posten wordpress.stackexchange.com

    – Francis Yaconiello

    16. August 2012 um 14:38 Uhr

  • @FrancisYaconiello Mir wurde gesagt, dass es dort eine PHP-Frage gibt, ein paar Leute sind dort übertrieben!

    – Rauben

    16. August 2012 um 14:59 Uhr

Wordpress Verwenden Sie methodpost fur die Auswahl mehrerer Sprachen
Fluffeh

Ich würde die Auswahl in a fallen lassen $_SESSION Variable. Das wird bei ihnen bleiben, bis sie gehen. Du könntest auch ganz nett ein Cookie verwenden. Eigentlich wäre eine Kombination der beiden großartig, sie bindet Benutzer, die Cookies nicht zulassen, auf einer Visit-to-Visit-Basis, und Leute, die Cookies aktiviert haben, müssen nur einmal auswählen.

Bearbeiten: Beispiel für Arbeitscode:

<form action="<?php the_permalink(); ?>/home" name="region" method="post">              
    <div id="uk">
    <a href="https://stackoverflow.com/questions/11796046/javascript:document.region.submit()" name="UK">
        <img style="margin-bottom:10px;" src="https://stackoverflow.com/questions/11796046/<?php%20bloginfo("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="https://stackoverflow.com/questions/11796046/javascript:document.region.submit()" name="World">
        <img style="margin-bottom:10px;" src="https://stackoverflow.com/questions/11796046/<?php%20bloginfo("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.

Seite, auf die das Formular umleitet:

<?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.
?>

IhreIndexseite.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;
    }

?>

Wenn Sie WordPress verwenden, sollten Sie dies wahrscheinlich tun lesen Sie dies.

  • @Rob hat ein Beispiel für dich gepostet, Kumpel.

    – Fluffeh

    6. August 2012 um 10:57 Uhr

  • Danke für das Beispiel. Ich habe meine Frage ein wenig aktualisiert, ich glaube nicht, dass sie mich noch erreicht (daher das Kopfgeld für die zusätzliche Hilfe !!).

    – Rauben

    6. August 2012 um 12:48 Uhr

  • @Rob Wie ist es dir ergangen? Ich weiß, dass Sie einige zusätzliche Repräsentanten darauf geworfen haben, damit es funktioniert – ist es in Betrieb?

    – Fluffeh

    6. August 2012 um 22:45 Uhr

  • Hallo. Nur gerade wieder drauf. Das erste Problem, das ich sehe, ist, dass ich kein Länderfeld habe, da ich über zwei Bilder einreiche. Gibt es eine Möglichkeit, dies zu umgehen?

    – Rauben

    7. August 2012 um 8:01 Uhr

  • Dies kann eine weitere Option für Sie sein, wenn Sie Sitzungen nicht zum Laufen bringen können. thinkoutloud.co.za/content/20091012/…

    – Toni M

    8. August 2012 um 14:25 Uhr

1646247552 803 Wordpress Verwenden Sie methodpost fur die Auswahl mehrerer Sprachen
Francis Yaconiello

Antworten

Erstens gibt es für das Hinzufügen regionaler / mehrsprachiger Unterstützung zu einer WordPress-Site keine bessere Alternative als dieses Plugin: http://wpml.org/. Es ist mit Kosten verbunden, aber es ist nicht unerschwinglich (Sie zahlen für großartigen Support).

Zweitens können Sie $_SESSION nicht standardmäßig verwenden. WP ist per Design zustandslos. Allerdings gibt es online unzählige Plugins und Tutorials, um diese Funktionalität zu erhalten.

Code-Zeug

Ihr ursprüngliches HTML-Formular hatte keine Eingaben. Es war ein Formular, das nichts übermittelte. Dieses Formular hat zwei Übermittlungen mit dem gleichen Namen location. Unabhängig davon, welche Schaltfläche angeklickt wird, wird ihr Wert an die gesendet $_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="https://stackoverflow.com/questions/11796046/<?php%20bloginfo("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="https://stackoverflow.com/questions/11796046/<?php%20bloginfo("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>

Schreiben Sie eine WordPress-Aktion, um den Beitrag zu bearbeiten. Fügen Sie dies der Funktionsdatei Ihres Designs hinzu. ansehen http://php.net/manual/en/function.setcookie.php für setcookie-Dokumente.

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

Dann, wo immer Sie den Standort wissen möchten:

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

ZUSÄTZLICHE INFORMATION

Ich habe zunächst auf UK geklickt, um damit zu beginnen, und dies hat das Cookie gesetzt. Ich bin dann zurückgegangen und habe auf World geklickt, aber das hat das Cookie mit world nicht kopiert, es hat nur wieder UK angezeigt. Ist es möglich, bei jeder anderen Auswahl über das Cookie zu wischen?

Dies ist also ein Problem bezüglich der Funktionsweise von Cookies auf technischer Ebene:

Wenn der Browser dies tut [requests a site]wird es auf Ihrem Computer nach einer Cookie-Datei suchen, die [your site] wurde festgelegt. Wenn es eine Cookie-Datei findet, sendet Ihr Browser alle Name-Wert-Paare in der Datei an [the] Server zusammen mit der URL. Wenn es keine Cookie-Datei findet, werden keine Cookie-Daten gesendet.

Die neuen Cookie-Daten werden zunächst nicht gesendet, b/c erst nachdem die Anfrage von Ihrem Browser an den Server gesendet wurde, dass die neuen Cookie-Daten gespeichert werden und mit der Anfrage versendet werden können.

Wie machst du das dann?
Umleitung nach einem erfolgreichen Set-Cookie-Event.

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');

Ist es auch möglich, die Bilder der Flaggen als Submit-Buttons zu verwenden?
Ja, verwenden Sie CSS, um Ihre Eingabeschaltflächen zu gestalten.

Fügen Sie jeder Eingabe eine ID hinzu: id="uk-button" und 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;
}

  • Ich habe es gerade ausprobiert, es funktioniert großartig, abgesehen von einer Sache – ich habe zunächst auf UK geklickt, um damit zu beginnen, und das hat das Cookie gesetzt, ich bin dann zurückgegangen und habe auf World geklickt, aber das hat das Cookie nicht mit world kopiert, it gerade wieder UK gezeigt. Ist es möglich, bei jeder anderen Auswahl über das Cookie zu wischen?

    – Rauben

    17. August 2012 um 13:55 Uhr

  • Ist es auch möglich, die Bilder der Flaggen als Submit-Buttons zu verwenden?

    – Rauben

    17. August 2012 um 14:04 Uhr

  • Danke für die wirklich umfassende Antwort. Alle funktionieren jetzt perfekt.

    – Rauben

    20. August 2012 um 13:11 Uhr

Wenn Sie keine Cookies verwenden möchten, können Sie dies auf diese Weise tun.

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

dann, wenn Sie 2 Knöpfe haben, wo einer Englisch und der andere Deutsch ist oder was auch immer Sie wünschen.

<a href="https://stackoverflow.com/questions/11796046/?language=English">English</a>
<a href="?language=German">German</a>

Sie können diese Prüfung verwenden, um zu überprüfen, welche Sprache die Seite haben soll.

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

  • Im letzten Codefeld, wo es heißt $_SESSION['language'] = 'English'; ersetze ich das durch den tatsächlichen englischen Inhalt?

    – Rauben

    3. August 2012 um 13:49 Uhr

  • @Rob Nein, Sie verwenden die Sitzungsvariable, um zu bestimmen, was Ihr Code tut. Enthält die Sitzung a 'en' zum Beispiel lässt du deinen Code die Seite auf Englisch anzeigen, während if die Variable hat 'es' Sie zeigen die Seite auf Spanisch an.

    – Fluffeh

    3. August 2012 um 13:56 Uhr

  • @Fluffeh Ich glaube nicht, dass ich es richtig verstehe. Das erste Codefeld sollte also so etwas wie die Kopfseite enthalten? Die zweite ist natürlich die Auswahl und die dritte ist zu überprüfen, welche Sprache ausgewählt wurde?

    – Rauben

    3. August 2012 um 14:12 Uhr

  • @Rob Nein, Sie verwenden die Datenspeicher in der Sitzung, um zu bestimmen, was Ihr Code tut.

    – Fluffeh

    3. August 2012 um 14:25 Uhr

  • @Fluffeh Ich habe gerade meine Frage mit dem aktualisiert, was ich versucht habe. Ich kann es auf der Seite zum Laufen bringen, NACHDEM ich eine Sprachauswahl getroffen habe, aber wenn ich zu weiteren Seiten navigiere, wird die Auswahl nicht übernommen.

    – Rauben

    3. August 2012 um 14:49 Uhr

Die Variable $_POST enthält Daten, die nur in Einzelanfragen enthalten sind (siehe POST (HTTP)), damit sie nach dem “Klicken” oder dem Posten eines Formulars entsprechende Inhalte sehen, also nur nach Aufforderung auf Ihrer Seite.

Für eine dauerhaftere Speicherung der Benutzereinstellungen ist es notwendig, diese Einstellungen in den “Sitzungsdaten” zu speichern, die in der Variablen $_SESSION verfügbar und dauerhaft sind, also verfügbar sind, bis Ihre Besucher Ihre Seiten durchsuchen. Eine dauerhaftere, aber etwas weniger reine Lösung ist das Speichern von Einstellungen für die Cookies, für die Sie das Ablaufdatum definieren können, damit sie auch beim nächsten Besuch verwendet werden.

Siehe einige Beispiele:

<?php

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

…und anderswo:

<?php

session_start();
$language = $_SESSION['language'];

Oder Sie können Cookies verwenden:

<?php

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

…und anderswo:

$language = $_COOKIE['language'];

Auf anderen Seiten funktioniert es nicht. POST-Variablen werden nicht immer gesendet. Es wird nur gesendet, wenn das Formular abgeschickt wird. Sie können COOKIES für Ihre Aufgabe verwenden. Speichern Sie die Variable dort und überprüfen Sie sie auf jeder Seite.

1646247553 458 Wordpress Verwenden Sie methodpost fur die Auswahl mehrerer Sprachen
ACJ

Sie brauchen wirklich Sitzungen/Cookies, wenn Sie möchten, dass die Auswahl bestehen bleibt (oder den Wert weiter durchgibt GET wie ?lang=uk, aber das ist nicht sehr elegant). Übrigens benötigen Sie kein Bild innerhalb eines Hyperlinks, dessen Standardverhalten blockiert ist und dessen übergeordnetes Formular mit JavaScript gesendet wird. Du könntest einfach so etwas verwenden:

<input alt="en-UK" name="lang" src="https://stackoverflow.com/questions/11796046/uk-flag.png" type="image" value="en-UK">

Dies würde als Bild funktionieren, das auch eine Schaltfläche zum Senden eines Formulars ist.

915140cookie-checkWordPress: Verwenden Sie method=”post” für die Auswahl mehrerer Sprachen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy