Welcartで自動的に生成される会員ページやカートページかどうかを調べて、処理を分けるための条件分岐をメモ。基本的にこれらのページは固定ページになりますが、もっと細かく判定したかったので。
効率を考えて再利用しやすい関数にしたので、それについても書いておきます。
2015年9月18日追記:
どうやらWelcart側の仕様が一部変更になったのか、以下にあるコードで使えないモノが出てきました。カートページの判定は商品をカートに追加してページ遷移した場合のみしか$usces->page
の中に「cart」という文字列が入らなくなったようです(もしかして前から?)
カートページの判定、会員ページ(ログインページも同様)の判定にはget_option()
関数に「usces_cart_number」と「usces_member_number」を引数として渡してやると以下のようにできます。
if ( is_page( get_option( 'usces_cart_number' ) ) ) {
// カートページです
}
if ( is_page( get_option( 'usces_member_number' ) ) ) {
// 会員ページです
}
目次
会員ページ or カートページの判定
以下のソースコードを使えば会員ページ、またはカートページの判定が出来ます。しかし、Welcartがアップデートされてもしかしたら修正が必要になる可能性があるので注意して下さい。(使えなくなることはそうそう無いとは思いますが…)
<!-- 会員ページの判定 -->
<?php if($usces->item->post_name == 'usces-member') : ?>
<p>会員ページだった場合</p>
<?php endif; ?>
<!-- カートページの判定 -->
<?php if($usces->item->post_name == 'usces-cart') : ?>
<p>カートページだった場合</p>
<?php endif; ?>
<!-- 会員ページ、カートページの条件分岐 -->
<?php if($usces->item->post_name == 'usces-member') : ?>
<p>会員ページだった場合</p>
<?php elseif($usces->item->post_name == 'usces-cart') : ?>
<p>カートページだった場合</p>
<?php else : ?>
<p>会員ページ、カートページ以外のページ</p>
<?php endif; ?>
Welcartの情報は変数$usces
に格納されているので、アロー演算子を使って現在のページの名前を拾っています。会員ページは「usces-member」、カートページは「usces-cart」の文字列が共通していたので、これを利用して判定しています。
サイドバーなど別のテンプレート上で使う場合はPHPのglobal
を使って変数のスコープ範囲をグローバルにしないと拾えません。もしスコープについてよくわからない場合は、後に書く判定用の関数の使用をオススメします。
(スコープについてはこちらのページ『PHP: 変数のスコープ – Manual』が勉強になります)
ログインページや配送ページなどの細かい判定
さらに細かく、ログインページや新規会員登録ページ、配送方法ページや注文完了ページなど細かく判定したい場合は以下のソースコードを使います。
同じく$usces
から情報引っ張ってきて判定しています。
会員ページの細かい判定
<?php if($usces->page == 'login') : //会員ページの場合 ?>
<p>ログインページです</p>
<?php elseif($usces->page == 'newmemberform') : ?>
<p>新規入会ページです</p>
<?php elseif($usces->page == 'newcompletion') : ?>
<p>新規ご入会完了ページです</p>
<?php elseif($usces->page == 'lostmemberpassword') : ?>
<p>パスワード発行ページです</p>
<?php elseif($usces->page == 'lostcompletion') : ?>
<p>パスワード発行メール送信完了ページです</p>
<?php elseif($usces->page == 'changepassword') : ?>
<p>パスワード変更ページです</p>
<?php elseif($usces->page == 'changepasscompletion') : ?>
<p>パスワード変更完了ページです</p>
<?php elseif($usces->page == 'member') : ?>
<p>会員情報ページです</p>
<?php elseif($usces->page == 'editmemberform') : ?>
<p>会員情報更新完了後ページです(会員ページと同じページに遷移します)</p>
<?php elseif($usces->page == 'ordercompletion') : ?>
<p>注文完了ページです</p>
<?php else : ?>
<p>会員ページ以外のページです</p>
<?php endif; ?>
カートページの細かい判定
<?php if($usces->page == 'cart') : //カートページの場合 ?>
<p>カートページです</p>
<?php elseif($usces->page == 'customer') : ?>
<p>お客様情報ページです</p>
<?php elseif($usces->page == 'delivery') : ?>
<p>配送方法ページです</p>
<?php elseif($usces->page == 'confirm') : ?>
<p>確認ページです</p>
<?php elseif($usces->page == 'ordercompletion') : ?>
<p>注文完了ページです</p>
<?php else : ?>
<p>カートページ以外のページです</p>
<?php endif; ?>
会員ページ、カートページの判定をする関数
これらソースコードを使って判定しても良いのですが、もし複数の場所で使ったり、将来的に再利用したい場合は関数を使ったほうが良いと思います。(Welcartにアップデートが来て、万が一修正する羽目になった場合に対応するのが楽になります。関数のソースコードを修正するだけで良いので)
//会員ページかどうかの判定
function is_member_page($page_name = 'usces-member') {
global $usces;
if($usces->item->post_name == $page_name) return true;
return false;
}
//カートページかどうかの判定
function is_cart_page($page_name = 'usces-cart') {
global $usces;
if($usces->item->post_name == $page_name) return true;
return false;
}
それぞれ使う場合は以下のように、「is_member_page()」「is_cart_page()」をif文で判定します。会員ページ、カートページならそれぞれ「true」が返ってきます。違うなら「false」が返ります。
<?php if(is_member_page()) : ?>
<p>会員ページの場合</p>
<?php elseif(is_cart_page()) : ?>
<p>カートページの場合</p>
<?php endif; ?>
会員、カートページの細かい判定用の関数
会員ページ、カートページを細かく判定する関数は、引数に文字列を渡して使います。
//会員ページ、カートページを細かく判定する関数
function is_welcart_page($page_name = 'cart') {
global $usces;
if($usces->page == $page_name) return true;
return false;
}
デフォルトではカートページの判定をしています。他のページで判定したい場合は以下の文字を渡して下さい。
- cart (カートページの場合)
- customer (お客様ページの場合)
- delivery (配送方法ページの場合)
- confirm (確認ページの場合)
- ordercompletion (注文完了ページの場合)
- login (ログインページの場合)
- newmemberform (新規会員登録ページの場合)
- newcompletion (新規会員登録完了ページの場合)
- lostmemberpassword (パスワード発行ページの場合)
- lostcompletion (パスワード発行メール送信完了ページの場合)
- changepassword (パスワード変更ページの場合)
- changepasscompletion (パスワード変更完了ページの場合)
- member (会員情報ページの場合)
- editmemberform (会員情報更新完了後ページの場合)
例えば配送方法ページかどうかを調べたい場合は以下のようにします。
<?php if(is_welcart_page('delivery')) : ?>
<p>配送方法ページの場合</p>
<?php endif; ?>
これら判定用の関数が見つからなかったので用意したのですが、もしかしてあったりするんでしょうか。