web-dev-qa-db-fra.com

comment créer et afficher des sessions dans Wordpress?

Je ne connais pas encore Word, mais je connais toutes les compétences requises PHP. J'utilise un formulaire pour créer une session sur une page, puis accéder à ces sessions sur une autre page. Je l'ai déjà fait sans Word Press. Ce dont j'ai besoin, c'est que quelqu'un me dise comment faire cela dans Word Press. quels fichiers je dois changer dans Word presse, quel code je dois entrer dans quel fichier?

La partie principale est que j'utilise google-map-api pour calculer la distance entre deux lieux

voici mon code jusqu'à présent:
Fichier 22.php:

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

Fichier 1111.php:

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

Vous souhaitez utiliser le hook init pour démarrer la session, par exemple:

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

Cela irait dans le fichier functions.php.

Je vous suggère de jeter un oeil ici pour plus d'informations:

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

1
TomC

TomC a raison, mais pour poursuivre sur ce sujet, voici ce que je fais. J'utilise principalement ceci avec un objet global que je sérialise dans la session pour sauvegarder et annuler la sérialisation de la session à utiliser. Ici, je viens d'utiliser un tableau de vos variables. De cette façon, vous n'avez pas à vous soucier de la sauvegarde en cours de session et l'utilisation de la session est facilement étendue à d'autres données.

Mon utilisation principale est pour les paniers d'achat et les commandes, donc une désinfection appropriée, la validation et les nonces sont importants , mais ils sont laissés ici pour maintenir les exemples propres. Voir https://developer.wordpress.org/plugins/security/nonces/ et https://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data

En supposant que tout cela aille dans votre thème, vous avez un code init similaire à TomC dans functions.php

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


}

Vous avez également raison de dire que cela pourrait aller dans vos fichiers de modèle tant que vous démarrez votre session avant que PHP n'envoie les en-têtes. Dans un thème bien écrit (et en supposant que vous n'exécutez aucun plugin mal écrit) avant que votre balise HTML ne fonctionne. Accrocher aux WP actions est un peu plus robuste à cet égard, mais le traitement de $ _GET dans un modèle vous permettrait de le conserver facilement sur une page au lieu de l'exécuter sur chacun d'entre eux.

Vous pouvez aller plus loin, bien que cela puisse demander plus d'efforts que nécessaire, en utilisant un code de session personnalisé: https://pippinsplugins.com/storing-session-data-in-wordpress-without-_session/

1
Andy Macaulay-Brook