web-dev-qa-db-ja.com

wordpressでセッションを作成して表示する方法

私はWordプレスに不慣れですが、必要なすべてのPHPスキルを知っています。あるページでセッションを作成し、別のページでそれらのセッションにアクセスするためにフォームを使用しています。私はWordのプレスなしですでにこれをしました。私が必要としているのは、Wordプレスでこれを行う方法を誰かが教えてくれることです。 Wordでどのファイルを変更する必要がありますか、どのファイルにどのコードを入力する必要がありますか?

主要部分は私が2つの場所間の距離を計算するためにgoogle-map-apiを使用しています

これが私のコードです。
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>

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

Initフックを使ってセッションを開始します。

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

これはfunctions.phpファイルに入ります。

詳細については、こちらをご覧ください。

https://codex.wordpress.org/Plugin_API/フック

1
TomC

TomCは正しいのですが、その上に構築するのが私のやり方です。主に、保存するためにセッションにシリアル化し、使用するセッションからシリアル化解除するグローバルオブジェクトと共にこれを使用します。ここで私はあなたの変数の配列を使いました。このようにすれば、セッションを保存することを気にする必要がなくなり、セッションの使用が他のデータ用に簡単に拡張されます。

私の主な用途は買い物かごや注文のためなので、適切な消毒、検証、nonceは重要ですですが、例をきれいにするためにここでは省きます。 https://developer.wordpress.org/plugins/security/nonces/ および https://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data を参照してください。

これがすべてあなたのテーマに当てはまると仮定すると、あなたはfunctions.phpにTomCのものに似たinitコードがあります。

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


}

また、PHPがヘッダーを送信する前にセッションを開始する限り、これがテンプレートファイルに入る可能性があります。あなたのHTMLタグが機能するようになる前のどこかでよく書かれたテーマで(そしてあなたが少しもよく書かれていないプラグインを実行していないと仮定して)。この点でWPアクションにフックするほうがもう少し堅牢ですが、$ _GET処理をテンプレートに入れると、それらすべてに対して実行するのではなく、簡単に1ページに保つことができます。

あなたはあなたのケースで必要とするよりもっと努力であるかもしれませんが、あなたはさらに一歩進むことができます、そしてカスタムセッションコードを使います: https://pippinsplugins.com/storing-session-data-in-wordpress-without-_session/

1