サポート » 使い方全般 » 条件分岐による要素のコントロールについて

  • 解決済 musaceae

    (@m2x0cn79ijkl)


    WordPressで用意されている条件分岐タグとグローバル変数を組み合わせて使いたいのですが、うまく動かせず手詰りになってしまいました。

    まず

    ◯ フロントページにだけ表示させる

      <?php if (is_front_page()): ?>
       [ 容量の大きなJPEGを多用したJs要素 ]
      <?php endif; ?>

    この状態からスタートして

    ◯ モバイル環境では表示させない

      <?php if (is_front_page()): ?>
        <?php if (!wp_is_mobile()): ?>[ 容量の大きなJPEGを多用したJs要素 ]<?php endif; ?>
      <?php endif; ?>

    今はこのようにしており、ここまでの条件分岐については意図通りに動作しています。

    この状態から更に推し進めて
    読み込まれるWebブラウザの種類によって
    [ 容量の大きなJPEGを多用したJs要素 ] ではなく
    [ 容量を削減したWebPに置き換えたJs要素 ] を読み込むようにしてみようと思い立ち

     $is_chrome() と $is_opera() のグローバル変数を使って

      <?php if(is_front_page()): ?>
        <?php if (wp_is_mobile()): ?>
          <?php if ($is_chrome||$is_opera): ?>[ 容量を削減したWebPに置き換えたJs要素 ]
          <?php else: ?>[ 容量の大きなJPEGを多用したJs要素 ]
        <?php endif; ?>
      <?php endif; ?>

    このようにしてみたのですが
    [ 容量を削減したWebPに置き換えたJs要素 ] と
    [ 容量の大きなJPEGを多用したJs要素 ] のどちらも読み込まれなくなってしまいました。

    試しに

      <?php if (is_front_page()): ?>
        <?php if (!wp_is_mobile()): ?>[ 容量を削減したWebPに置き換えたJs要素 ]<?php endif; ?>
      <?php endif; ?>

    としてChromeで読み込むと
    [ 容量を削減したWebPに置き換えたJs要素 ] は表示されるので
    このJs要素が動かないので表示されない、という訳ではないようです。

    解決案あるいは解決につながりそうなヒント等がお分かりになる方が居られましたら
    お知らせ頂ければと思います。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • <?php endif; ?>

    が1つ抜けているのはコピペ時のミス?

    トピック投稿者 musaceae

    (@m2x0cn79ijkl)

    taku-k さんからのアドバイスを受けて

    <?php if(is_front_page()): ?>
     <?php if (wp_is_mobile()): ?>
      <?php if ($is_chrome||$is_opera): ?>[ WebPに置き換えたJs要素 ]
      <?php else: ?>[ JPEGを多用したJs要素 ]<?php endif; ?>
     <?php endif; ?>
    <?php endif; ?>

    としてみたところ、Js要素が表示されるようになりました!

    ・・・ が
    Chrome と Opera であっても なぜか
    [ JPEGを多用したJs要素 ]
    のほうが読み込まれてしまい
    Webブラウザを判別した条件分岐がうまくいきません。

    本件に関係があるかはわからないのですが

    onzeブログさんの投稿
    各ブラウザごとに条件分岐できるグローバル変数
    http://on-ze.com/archives/3082

    では

    <?php if ( $is_IE ){ // 処理内容 } ?> と書くだけでは動きません。
    例えば[Internet Explorer]で分岐したいときは以下のように記述します。
    <?php global $is_IE; if ( $is_IE ) { Internet Explorer のときの処理内容 } ?>

    と紹介されおり、
    WordPressを扱った多くのWebサイトさんで紹介されている

    <?php if ($is_chrome): ?>
      Chrome で表示させたい内容
    <?php else: ?>
     それ以外で表示させたい内容
    <?php endif; ?>

    といったグローバル変数の使い方とは記述の仕方が多少異なっていることから
    グローバル変数の扱い方自体が間違っているのかとも思えてきました。

    <?php if(is_front_page()): ?>
     <?php if (wp_is_mobile()): ?>
      <?php global $is_chrome; global $is_opera; ?>
      <?php if ($is_chrome||$is_opera): ?>
    [ WebPに置き換えたJs要素 ]
      <?php else: ?>
    [ JPEGを多用したJs要素 ]
       <?php endif; ?>
     <?php endif; ?>
    <?php endif; ?>

    私も知りませんでしたけど グローバル変数を呼び出すみたいですね。

    トピック投稿者 musaceae

    (@m2x0cn79ijkl)

    taku-kさんのコードに従って

    <?php if(is_front_page()): ?>
    	<?php if (!wp_is_mobile()): ?>
    		<?php global $is_chrome; global $is_opera; ?>
    		<?php if ($is_chrome||$is_opera): ?>
    			[ WebPに置き換えたJs要素 ]
    		<?php else: ?>
    			[ JPEGで構成したJs要素 ]
    		<?php endif; ?>
    	<?php endif; ?>
    <?php endif; ?>

    としてみたところ
    Chrome & Opera とそれ以外のWebブラウザをしっかり判別して
    当初考えていた通りに動作してくれています!

    実のところphpについては基本的な構文さえよく分かっていない体たらくなんですが
    <?php global $is_chrome; global $is_opera; ?>
    という部分が必要だったんですね。

    相談に乗って頂けたばかりか
    ドンピシャの解決策まで導き出して頂き、ありがとうございました。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「条件分岐による要素のコントロールについて」には新たに返信することはできません。