【wordpress】画面遷移時に変数の値を受け渡す方法-add_query_arg();とPHPのグローバル変数$_GETを使って変数を受け渡そう。

今回登場する関数の説明

  • add_query_arg(); 受け渡したい変数と、受け渡し先のURLを指定する
  • $_GET[ ] [ ]の中に受け取る変数を記入し、URL末尾のGETパラメータを受け取る
  • esc_html(); esc_attr();等 エスケープ処理をする。表示する場所によってesc_◯◯の〇〇の値を変更

 

コード

ページ遷移前.php

<?php
$post_id = '取得したID';
$post_title = '取得したタイトル';
?>

<a herf="<?php echo add_query_arg( array( 'id' => $post_id, 'title' => $post_title) , esc_url( home_url() ).'/content' ); ?>">
変数受け渡し先(ページ遷移後).php

$id = $_GET['id'] ?? 'IDを取得できませんでした';
$title = $_GET['title'] ?? 'titleを取得できませんでした';

<h1><?php echo esc_html($id); ?></h1>
<input value="<?php echo esc_attr($title); ?>">

 

 

コード解説

add_query_argについて

echo add_query_arg( array( 'id' => $post_id, 'title' => $post_title) , esc_url( home_url() ).'/content' );
  • 第1引数:この場合、idに$post_idの値を代入。titleに$post_titleの値を代入。そしてadd_query_arg関数の力で、GETパラメータにしています。
  • 第2引数:変数受け渡し先のURLが「〇〇.〇〇/content/」という前提です。/content/はスラッグです。
getパラメータ idとtitle

 

今回のコードの場合、URLは画像上部の様になります。GETパラメータは/content/?以降の部分です。

 

 

 

$_GET[”]について

$id = $_GET['id'] ?? 'IDを取得できませんでした';

この部分は見て分かるかもしれませんが、$_GET[‘id’]で’id’が取得できなかった場合、 ?? の後ろにある 「’IDを取得できませんでした’ 」 が、変数$idに代入されます。

 

$_GET[‘id’] ではURLの末尾に記載されてあるGETパラメータの「id=取得したID」を取得しています。

 

 

esc_◯◯();について

<h1><?php echo esc_html($id); ?></h1>
<input value="<?php echo esc_attr($title); ?>">

最終的に「echo esc_◯◯();」という形で表示させています。

〇〇の部分の使い分けはあまり詳しくないのですが下記のようなイメージで良いと思います。

  • テキストとして画面に表示させる場合はesc_html
  • inputタグのvalue属性みたいに属性で表示させる場合はesc_attr
  • URLとして表示させる場合はesc_url

 

 

最後に軽く補足

この状態では2点問題点があると思います。今は「id=取得したID」としていますが、「①id=”取得”したID」「②id=取&得したID」とすると問題が発生します。

問題点①では「”取得”したID」となっていますがecho等で出力してみると「¥”取得¥”したID」という感じになります。それを解消する関数はwp_unslash()です。

問題点②の「id=取&得したID」を出力してみると「id=取」となってしまいます。それを解消する関数はurlencode_deep()です。

 

続き↓

【wordpress】GETパラメータを取得して表示した際の①文字化け②変数の値が全て取得出来ない問題を解決しよう。
こちらは前の記事の続きです。前の記事はこちら$_GETで取得して表示した変数の値が、うまく読み取れなかったり文字化けしてしまったりする問題を解消します。問題点①及び問題点②は前回の記事から引用しています。  ...

 

最終学歴高卒。実務未経験から自社開発&受託開発をしている企業に入社した、入社1年目のエンジニア。20代前半。
WordPress・PHP / Laravel・JavaScript

ひろきをフォローする

コメント

タイトルとURLをコピーしました