• 全てのカテゴリ共に反応せずに困っているのですが、
    if文の条件分岐がまるで反応しません。
    WordPressではない、.phpで作成した静的サイトでは同じif文ソースでまともに稼働するのに、
    なぜかWordPressでは稼働してくれません。何が原因で、どのように加工すれば機能するようになるでしょうか?

    おこないたいのは現在開いているページにおいて、そのページが所属するカテゴリがある
    ヘッダー横並びのグローバルナビゲーションの画像をハイライトさせた色の画像に切り替える
    ということです。

    main.phpなどのWPテンプレートファイルにおいて、グローバルナビゲーション部分を
    外部ファイル化しています。
    <?php include (TEMPLATEPATH . “/hdr.php”); ?>

    そして、hdr.phpの中のグローバルナビの箇所を以下のif文で作成しています。

    <ul>
    	<?php if(strpos('/index.php', $_SERVER['PHP_SELF']) === false){ ?>
    	<li><a href="<?php bloginfo('url'); ?>/"><img src="<?php bloginfo('url'); ?>/wp-content/themes/mytpml/img/cmn/globalnav01.gif" alt="ホーム" name="globalnav01" width="110" height="48" border="0" id="globalnav01" onMouseOver="MM_swapImage('globalnav01','','<?php bloginfo('url'); ?>/wp-content/themes/mytpml/img/cmn/globalnav01on.gif',1)" onMouseOut="MM_swapImgRestore()" /></a></li>
    
    	<?php }else{ ?>
    	<li><a href="<?php bloginfo('url'); ?>/"><img src="<?php bloginfo('url'); ?>/wp-content/themes/mytpml/img/cmn/globalnav01on.gif" alt="ホーム" name="globalnav01" width="110" height="48" border="0" id="globalnav01" onMouseOver="MM_swapImage('globalnav01','','<?php bloginfo('url'); ?>/wp-content/themes/mytpml/img/cmn/globalnav01on.gif',1)" onMouseOut="MM_swapImgRestore()" /></a></li>
    	<?php } ?>
    
    	<?php if(strpos($_SERVER['PHP_SELF'], '/product/') === false){ ?>
    	<li><a href="<?php bloginfo('url'); ?>/product/"><img src="<?php bloginfo('url'); ?>/wp-content/themes/mytpml/img/cmn/globalnav02.gif" alt="製品案内" name="globalnav02" width="150" height="48" border="0" id="globalnav02" onMouseOver="MM_swapImage('globalnav02','','<?php bloginfo('url'); ?>/wp-content/themes/mytpml/img/cmn/globalnav02on.gif',1)" onMouseOut="MM_swapImgRestore()" /></a></li>
    
    	<?php }else{ ?>
    	<li><a href="<?php bloginfo('url'); ?>/product/"><img src="<?php bloginfo('url'); ?>/wp-content/themes/mytpml/img/cmn/globalnav02on.gif" alt="製品案内" name="globalnav02" width="150" height="48" border="0" id="globalnav02" onMouseOver="MM_swapImage('globalnav02','','<?php bloginfo('url'); ?>/wp-content/themes/mytpml/img/cmn/globalnav02on.gif',1)" onMouseOut="MM_swapImgRestore()" /></a></li>
    	<?php } ?>
    以下、続く
    </ul>

    単に、「product」というディレクトリのURIでない場合、非ハイライト用画像を表示させよ、
    でなければハイライト用画像を表示させよ、
    というだけのソースなのですが・・・

    間違いの修正、解決のご指南を頂けましたら幸いです。
    何卒宜しくお願い致します。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • モデレーター gatespace

    (@gatespace)

    よく分からないのですが、画像が表示されない、という事で良いんですか?

    hdr.php がWordPressの外にあるのなら、bloginfo('url'); などのWordPressのテンプレートタグは使えないんじゃ?

    トピック投稿者 gapel

    (@gapel)

    いえ、画像が表示されないというわけではないのです。
    済みません、現状どうなっているという現象を書いてませんでした。

    どのページを開いてもホームのナビゲーション用画像がハイライトされてまう、という現象になります。つまり、どのページを開いても「あなたは今、ホームにいます」といことになっちゃってます。

    例えば、サイト構成が以下のようになっていたといたします。

    ————————————————————
    ●ホーム

    ●製品案内
      ・製品A
      ・製品B
      ・製品C

    ●会社案内
      ・会社概要
      ・沿革
      ・アクセス

    ●リクルート
      ・採用情報
      ・新卒採用
      ・中途採用
    ————————————————————

    製品Bのページを開いたら、ヘッダー横並びに配置している画像でのナビゲーションのうち、
    「製品案内」だけ、その他の「ホーム」、「会社案内」、「リクルート」の画像の色と違う色の画像
    (ハイライト画像)を表示させたいのです。
    現在開いているこのページは何のカテゴリにあるのかを認知させるために。
    なので、「中途採用」のページを開いたら「リクルート」の画像がハイライト画像になりますし、
    「沿革」を開いたら「会社案内」のハイライト画像が表示されます。

    しかしこうならず、どのページを開いても、なぜか「ホーム」の画像がハイライト画像となってしまい、
    どのページを開いても「ホーム」にいる気分になっちゃってます汗;;
    gatespace様、済みません、これで意味は通じるでしょうか。

    hdr.php がWordPressの外にあるのなら、bloginfo(‘url’); などのWordPressのテンプレートタグは使えないんじゃ?

    テンプレタグは普通に使えております。ちゃんとリンクも昨日しますし問題ないと思われます。
    main.phpはホームで、あとのテンプレートファイルは、カテゴリの数だけ作っています。
    これらのテンプレートファイルの中のヘッダーエリアのHTMLソースを外部ファイル化して、
    hdr.phpというファイルにして単一管理しております。

    モデレーター jim912

    (@jim912)

    WordPress の表示部分は、すべて index.php が最初に起動して処理されるので、$_SERVER[‘PHP_SELF’] は、全て index.php となるはずです。
    $_SERVER[‘REQUEST_URI’] で判別するようにしてください。

    トピック投稿者 gapel

    (@gapel)

    jim912様!! ご案内のソースに変更し、ひとつだけ修正を加えたところ、
    出来ました!!! ホンマにアリガトウゴザイマス!!! ヤッタ!!

    if(strpos($_SERVER['REQUEST_URI'], '/product/')

    このようにしてみると、このままではハイライトにならなかったので、
    試しに、/product/の最後の方のスラッシュを消したらうまくいきました!!!
    ホンマにどうもありがとうございました。

    $_SERVER[‘REQUEST_URI’]
    というのを検索してみると、現在のURLを取得する、と書いてありました。
    http://d.hatena.ne.jp/masomi79/20110304/1299204064

    これだと、WordPressはindex.phpを最初に読むということに関わらず、
    開いたページのURIを取得してくれるのですね。素晴らしい。

    逆に、PHP_SELFですと、XSS的問題があるのですか。
    http://pentan.info/php/php_self_security.html

    静的PHPサイトでPHP_SELFを使用しているのですが、
    こちらも本ソースに変更した方がいいですね!

    トピック投稿者 gapel

    (@gapel)

    済みません、質問内容に漏れていたのですが、
    現在、以下になっているのですが、

    if(strpos($_SERVER['REQUEST_URI'], '/product'') === false){

    これを、複数のディレクトリ名に対応させるにはどう記述すればいいでしょうか。
    つまり、
    /product というURIのときに、
    という単一ではなく、
    /product または /item01 や /knowhow というURIのときに、
    という複数個の書き方にしたいのですが、PHP or などで検索して試すのですがうまくいきません。
    どのように記述すれば達成するでしょうか。
    複数個の数だけif文を別々に作る手法ではよくないと思うので。

    if(strpos($_SERVER['REQUEST_URI'], '/product' || '/item01') === false){

    とか、

    if(strpos($_SERVER['REQUEST_URI'], '/product' or '/item01') === false){

    とかで試したのですが、item01のページでハイライトしないどころか、
    productすらハイライトしないようになってしまいました。。

    if(strpos($_SERVER['REQUEST_URI'], '/product','/character') === false){

    ダメもとでこれもおこないましたが、productだけハイライトされただけでした。。

    ————————————————————
    ●二点目
    また、このようなことはできるでしょうか。
    「product」用のハイライト画像を表示させたいページを自分で自由に登録するような
    機能がWordPressの管理画面にないでしょうか。
    つまり、自分でグループ名を作って、そのグループ名に所属するページはどれとどれ、
    というふうに自分で登録するのです。
    一番良いのは、ページが増えるたびにいちいちhdr.phpのソースに、追加したページ用の
    if文を追加するのはCMSのすることじゃないなぁと思いまして。

    何卒宜しくお願い申し上げます。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「if文の条件分岐が機能しない( strpos、$_SERVER、PHP_SELF )」には新たに返信することはできません。