web-dev-qa-db-de.com

wie erstelle und zeige ich Sitzungen in Wordpress?

Ich bin neu in WordPress, kenne aber alle erforderlichen Kenntnisse in PHP. Ich benutze ein Formular, um eine Sitzung auf einer Seite zu erstellen und dann auf einer anderen Seite auf diese Sitzungen zuzugreifen. Ich habe das schon ohne Wordpress gemacht. Was ich brauche, ist jemand sagt mir, wie dies in Word Press zu tun ist. Welche Dateien muss ich in WordPress ändern, welchen Code soll ich in welche Datei eingeben?

Der Hauptteil ist, ich benutze Google-Map-API, um die Entfernung zwischen zwei Standorten zu berechnen

hier ist mein Code:
22.php file:

<?php

 session_start();
$pickup = '';
$pickupadd = '';
$dropoff = '';
$dropoffadd = '';
$km = '';
$_SESSION['pickup'] = $pickup;
$_SESSION['pickupadd'] = $pickupadd;
$_SESSION['dropoff'] = $dropoff;
$_SESSION['dropoffadd'] = $dropoffadd;
$_SESSION['km'] = $km;
?>


<form class="uk-form" action="1111.php" method="get"><label style="color:  
#0095da;"> Pick UP</label>
<input id="pickup" name="pickup" class="controls" style="width: 100%;  
border-bottom: 1px solid #0095da; border-left: 1px solid #0095da; height: 
30px;" type="text" placeholder="Enter a Pick UP location" />
<input id="pickup_address" name="pickupadd" class="controls" style="width:  
100%; border-bottom: 1px solid #0095da; border-left: 1px solid #0095da; 
height: 30px; margin-top: 10px;" type="text" placeholder="House#, Street, 
etc." /><label style="color: #0095da;"> Drop OFF</label>
<input id="dropoff" name="dropoff" class="controls" style="width: 100%; 
border-bottom: 1px solid #0095da; border-left: 1px solid #0095da; height: 
30px;" type="text" placeholder="Enter a Drop OFF location" />
<input id="dropoff_address" name="dropoffadd" class="controls" style="width: 
100%; border-bottom: 1px solid #0095da; border-left: 1px solid #0095da; 
height: 30px; margin-top: 10px;" type="text" placeholder="House#, Street, 
etc." /><label style="color: #0095da;"> Pickup Time</label>
<input id="km" name="km" class="controls" type="hidden" value="" />
<input type="submit" />

</form>

1111.php Datei:

 <?php

session_start();
$pickup = $_SESSION['pickup'] ;
$pickupadd = $_SESSION['pickupadd'] ;
$dropoff = $_SESSION['dropoff'] ;
$dropoffadd = $_SESSION['dropoffadd'] ;
$km = $_SESSION['km'] ;
if (isset($_GET["pickup"]) || isset($_GET["pickupadd"]) ||    
isset($_GET["dropoff"]) || isset($_GET["dropoffadd"]) || isset($_GET["km"])  
) {
$_SESSION["pickup"] = $_GET["pickup"];
$_SESSION["pickupadd"] = $_GET["pickupadd"];
$_SESSION["dropoff"] = $_GET["dropoff"];
$_SESSION["dropoffadd"] = $_GET["dropoffadd"];
$_SESSION["km"] = $_GET["km"];
}

?>

<body>
<?php 

    echo $_SESSION["pickup"]; 
    echo $_SESSION["pickupadd"]; 
    echo $_SESSION["dropoff"]; 
    echo $_SESSION["dropoffadd"]; 
    echo $_SESSION["km"]; 

?>
</body>
1
Devilism

Sie möchten den Init-Hook verwenden, um die Sitzung zu starten, z. B .:

function start_session() {
    if(!session_id()) {
        session_start();
    }
}

add_action('init', 'start_session', 1);

function end_session() {
    session_destroy ();
}

add_action('wp_logout', 'end_session');
add_action('wp_login', 'end_session');

Das würde in die functions.php Datei gehen.

Ich schlage vor, Sie schauen hier für weitere Informationen:

https://codex.wordpress.org/Plugin_API/Hooks

1
TomC

TomC hat recht, aber darauf aufzubauen ist das, was ich tue. Hauptsächlich verwende ich dies mit einem globalen Objekt, das ich in die Sitzung serialisiere, um es zu speichern und von der Sitzung aus zu unserialisieren. Hier habe ich gerade ein Array Ihrer Variablen verwendet. Auf diese Weise brauchen Sie sich nicht um das Speichern in der Sitzung zu kümmern, und die Sitzungsnutzung kann problemlos für andere Daten erweitert werden.

Meine Hauptverwendung sind Einkaufskörbe und Bestellungen, daher sind ordnungsgemäße Desinfektion, Validierung und Nichtbeachtung wichtig , aber sie werden hier ausgelassen, um die Beispiele sauber zu halten. Siehe https://developer.wordpress.org/plugins/security/nonces/ und https://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data

Angenommen, dies hängt alles mit Ihrem Thema zusammen, dann haben Sie einen Init-Code, der dem von TomC in functions.php ähnelt.

add_action( 'init', 'setup_session' );

function setup_session() {

    session_start();
    global $map_data;

    if (isset($_SESSION['map_data'])) {
        $map_data = unserialize($_SESSION['map_data']);
    } else {
        $map_data = array();    
    }

    process_get();
    /* chain it after session setup, but could also hook into
       init with a lower priority so that $_GET always writes
       over older session data, or put your own action here to
       give multiple functions access to your sessions
    */
}

add_action( 'shutdown', 'save_session' ); 

function save_session() {

    global $map_data;
    if (isset($map_data)) {
        $_SESSION['map_data'] = serialize($map_data);
    }

}

function process_get() {

    // do modify this to:
    // check nonce
    // sanitise
    // validate

`   global $map_data;

    if ( isset($_GET["pickup"]) || isset($_GET["pickupadd"]) ||  isset($_GET["dropoff"]) || isset($_GET["dropoffadd"]) || isset($_GET["km"])  
 ) {
    $map_data["pickup"] = $_GET["pickup"];
    $map_data["pickupadd"] = $_GET["pickupadd"];
    $map_data["dropoff"] = $_GET["dropoff"];
    $map_data["dropoffadd"] = $_GET["dropoffadd"];
    $map_data["km"] = $_GET["km"];
}
// if any of these $_GET vars is set, replace the whole array


}

Sie haben auch Recht, dass dies in Ihre Vorlagendateien aufgenommen werden kann, solange Sie Ihre Sitzung starten, bevor PHP die Header sendet. In einem gut geschriebenen Thema (und vorausgesetzt, Sie verwenden keine schlecht geschriebenen Plugins), bevor Ihr HTML-Tag funktioniert. Das Einbinden in WP -Aktionen ist in dieser Hinsicht etwas robuster, aber wenn Sie die $ _GET-Verarbeitung in eine Vorlage einfügen, können Sie sie einfach auf einer Seite belassen, anstatt sie auf allen auszuführen.

Sie können einen Schritt weiter gehen, obwohl dies unter Umständen aufwändiger ist als in Ihrem Fall. Verwenden Sie den benutzerdefinierten Sitzungscode: https://pippinsplugins.com/storing-session-data-in-wordpress-without-_session/

1