サポート » 使い方全般 » IEで「is_homeで投稿ページを分岐」が無効?

  • 解決済 goodtimes

    (@goodtimes)


    こんにちは お世話になります

    先日、投稿ページ(ダッシュボードにて設定している投稿ページ)の分岐方法を質問させていただきまして、is_homeで分岐すればよいということがわかりました

    で、そのときはFireFoxで確認していたのですが
    IEだと分岐されていないようです・・

    HTMLがブラウザにより見え方が異なることは知っていましたが
    こんなところにも影響が・・?
    それとも単に私のかき方が悪いだけでしょうか・・?

    どなたか何かご存知でしたら教えていただけませんでしょうか?

    ちなみにコードは以下です。テストのため、is_homeと表示させています
    FireFoxでは投稿ページのみカテゴリ表示され、IEではカテゴリはどこにも表示されまないです

    <!-- 投稿ページはカテゴリ表示 //is_homeで分岐 -->
    <?php if (is_home()) {
      echo ("is home");
      wp_list_categories('show_count=1&title_li=<h2>' . __('Categories', 'kubrick') . '</h2>'); }?>

    FireFox:3.0.5
    IE:6、SP3
    OS:WINDOWSXP

15件の返信を表示中 - 1 - 15件目 (全15件中)
  • こんにちわ^^
    確認はしてませんが、下記のようにしてみてください。

    <?php if (is_home()){ ?>
    <?php wp_list_categories('show_count=1&title_li=<h2>' . __('Categories', 'kubrick') . '</h2>') ?>
    <?php
    }
    ?>

    自分はいつもこんな感じでIEでも表示してます。

    補足:個別指定は

    <?php if (is_home()){ ?>
    <?php wp_list_categories('show_count=1&title_li=<h2>' . __('Categories', 'kubrick') . '</h2>') ?>
    
    <?php }else if (is_category()){ ?>
    <?php wp_list_categories('show_count=1&title_li=<h3>' . __('Categories', 'kubrick') . '</h3>') ?>
    
    <?php
    }
    ?>

    って感じです。

    テーマでは基本的に、 WordPress 側でブラウザ毎に違うコードを出力するというようなことはありません。分岐のコードは PHP としては正しいのですが、 HTML として正しくないのが原因だと思います。
    HTML 構造が正しくない場合のレンダリングの補正は、ブラウザごとに実装が異なるのです。
    # 上記コードのインデントが全角スペースのようですが、実際は半角スペースですよね?

    まずはちゃんとリスト自体は出力されていることを確認するために、IE から投稿ページの HTML のソースを表示してみてください。出力させたい内容が投稿ページのソースにはちゃんと含まれているはずです。

    ちゃんと含まれていた場合、 wp_list_categories() は ul 要素の内容として (= ul タグの間に) 記述する必要がありますので、そういう構造になっているか確認してください。それから、直前に “is home” という何もマークアップされていない文字列があることも不正で、これが障っている可能性もありますので、これを削除するかコメント化した状態でテストしてみてください。

    <?php if (is_home()) : ?>
    <ul>
        <?php echo '<!-- is home -->'; ?>
        <?php wp_list_categories('show_count=1&title_li=<h2>' . __('Categories', 'kubrick') . '</h2>'); ?>
    </ul>
    <?php endif; ?>

    とか。

    追記:構造が正しく、しかもソースでは出力されている場合は、 IE6 の CSS のバグがおいたをしているか、 CSS の指定が正しくない可能性もありますね。確か Default テーマでカスタマイズをされていたと記憶しているので、それはありえなさそうですけど。

    トピック投稿者 goodtimes

    (@goodtimes)

    cyamaさん、mizubeさん こんにちは
    ご回答ありがとうございます
    @@@編集しなおしましたので、以下の投稿で確定します。17:22@@@

    結果、お二人のご教示くださったコードを貼り付けたら、カテゴリ一覧は表示されました

    されましたが、いろいろ表示の違いなどがあって、
    お二人の解説を読んでもなぜなのかわかりません…
    もう少し、お付き合いいただけませんでしょうか?
    #そうです、わたしはデフォルトテーマを使っています

    まず、私の文章でIEにて表示されなかった理由ですが、

    間違いの1つ目は、<?php XXXXXX ?>の書き方です・・ね?
    お二人のは、一つの命令ごとに<?php XXXX ?>とくくってるのに対し、
    わたしは、全部ひっくるめて ?> でくくってました。
    firefoxではOKだったけど、IEはダメだったってことと解釈しました。合ってますでしょうか?

    2つ目は、echoの後の書き方
    私は、<?php echo (“example msg”); ?>と書いていたけど
    <?php echo ‘<!– example msg–>’; ?>と書かないといけない?
    でも、後者にしたら中のメッセージが出なくなってしまいました・・
    詳しくはあとで説明します

    3つ目は、php の書き方のことなんでしょうが、これもわかりません
    <?php if …. のあとです
    たとえば、<?php if(is_home())
    is home なら・・・○○せよ、そうでなければ ××せよという文章ですが
    {○○せよ}else{××せよ}と、{}でくくると思っていました
    でも、mizubeさんのは{がない・・ その代わりに:がある?
    endifもある・・これも、他で見たらあったりなかったり・・
    これは流儀とかの問題ですか?
    それともどちらかが正しいとかがあるのですか?

    で、上記の二つ目の詳細+アルファですが
    まず私がなにしたかを書きます

    <お二人のコードを追加するために私がしたこと>
    1.自分の書いていたis_home分岐でカテゴリ表示/非表示切替文(最初の投稿に載せてた文)を全部削除

    <cyamaさんの文に対して私がしたこと>
    1、コードをそのままコピーペースト
    2、<?php echo ‘<!– cyamasan eko –>’; ?>と、wp_listの前に追加
    3、cyamasan told me と、<?php if (is_home()){ ?>の前に追加

    <mizubeさんの文に対して私がしたこと>
    1.コードをそのままコピーペースト
    2、<?php echo ‘<!– mizubesan eko –>’; ?>と、wp_listの前に追加
    3、mizubesan told me と、<?php if (is_home()) : ?>の前に追加

    ちなみにコードは・・・
    #mizubeさん、全角スペースじゃないです。タブでやってますがここだと表示が崩れるので、手で半角2個使ってスペースあけてます

    <!– 開発実績ページのみカテゴリ表示 //投稿ページは、is_homeで分岐 –>
    cyamasan told me
    <?php if (is_home()){ ?>
    <?php echo ‘<!– cyamasan eko –>’; ?>
    <?php wp_list_categories(‘show_count=1&title_li=<h2>’ . __(‘Categories’, ‘kubrick’) . ‘</h2>’) ?>
    <?php
    }
    ?>

    mizubesan told me
    <?php if (is_home()) : ?>

      <?php echo ‘<!– mizubesan eko–>’; ?>
      <?php wp_list_categories(‘show_count=1&title_li=<h2>’ . __(‘Categories’, ‘kubrick’) . ‘</h2>’); ?>

    <?php endif; ?>

    で、IE、FIREFOXでどう表示されたかというと

    <cyamaさん分>
    ===IE===
    ・cyamasan told me が表示されない →A
    ・cyamasan eko が表示されない →B
    ・カテゴリ一覧は正常表示

    ===FireFox===
    ・cyamasan told me 表示される
    ・cyamasan eko が表示されない →B
    ・カテゴリ一覧は正常表示

    <mizubeさん分>
    ===IE===
    ・mizubesan told me が表示される →A
    ・mizubesan eko が表示されない →B
    ・カテゴリ一覧は正常表示

    ===FireFox===
    ・mizubesan told me 表示される 
    ・mizubesan eko が表示されない →B
    ・カテゴリ一覧は正常表示(但し、>>(リストマーク?)が一つ余分に出た)
    →これは

      を消したら、OKでした。IEも影響うけずです

      ※cyamaさんmizubeさんのコードは、それぞれベツベツに記述+一緒に記述で見てますが
      ベツベツに記述も一緒に記述も表示は同じでした

      すみません、長くなってます
      で、疑問点です

      A・・・
      タグ?の外なのに、なぜ表示されないんでしょう・・?
      しかもcyamasan told me は表示せずで、mizubesan told meは表示されます。
      どう違いが・・??
      お二人のコードより上の文章を私が触っているからかな?と思って消してみましたが、変化なしです。
      どういう原因が考えられますでしょうか?

      B・・・
      ややこしいですが、これが最初に「あとで詳細書きます」といってた分です
      echo(“example msg”)ではなく echo ‘<!– example msg –>’の話です

      echo ‘<!– example msg –>’だと
      IE、FIREFOXともに表示されないので、おや?と思って
      <!– –>の矢印をはずしてみました。
      要するに echo’example msg’にしました
      すると、FIREFOXでは、cyamaさんのもmizubeさんのも表示されます
      すなわち、思っていた通りに表示されます
      でもIEでは、カテゴリ表示自体がされなくなってしまいます(要するにエラーで無視された?)
      なにが、原因、、というかなにが間違ってるんでしょうか・・??

      長くなってしまいましたが、教えていただけませんでしょうか?

      トピック投稿者 goodtimes

      (@goodtimes)

      すみません、ちょっとだけ修正しました

      修正箇所
      ・mizubeさんの名前がcyamaさんの名前になってたので修正(文章コピペのあとお名前かえるの忘れてましたすみません)
      ・endifもある・・・流儀の問題ですか?というところを追記しました
      ・>>リストマークが余分にでたけど ○○を消したらOKでしたのところがなぜか非表示?
      <UL>です

      【endifについて】
      基本的に条件による実行される処理を{ }で囲います。
      しかし、処理の開始部分を mizubeさんのように : に変更し、条件の終了部分を endif; にできます。
      早い話がどっちでもイイ!です(笑

      つまり、{ }で囲っている私はendifは使わないんです^^

      ただ、あちこちいじった場合に if ~ endif で囲ってあったほうが、プログラムを読みやすくしたり、ここからここまでが適応する囲みだとわかりやすくすることができます。

      間違いの1つ目は、<?php XXXXXX ?>の書き方です・・ね?
      お二人のは、一つの命令ごとに<?php XXXX ?>とくくってるのに対し、
      わたしは、全部ひっくるめて ?> でくくってました。
      firefoxではOKだったけど、IEはダメだったってことと解釈しました。合ってますでしょうか?

      ひとつにまとめることも出来なくはないです、これについては申し訳ありませんが、長くなるので飛ばさせていただきます。mizubeさんにお任せします]-)・・

      2つ目は、echoの後の書き方
      私は、<?php echo (“example msg”); ?>と書いていたけど
      <?php echo ‘<!– example msg–>’; ?>と書かないといけない?
      でも、後者にしたら中のメッセージが出なくなってしまいました・・
      詳しくはあとで説明します

      echoで吐き出したい文字列は‘ ’“ ”で囲います。
      また、<!– –>というのは通常、web制作上ソース内に記述するコメントを囲うものです。
      ですから、表面上からは通常は見ることが出来ません。
      ブラウザの表示 → ページのソースなどで見ると記述はされているはずです。

      要するに echo’example msg’にしました
      すると、FIREFOXでは、cyamaさんのもmizubeさんのも表示されます
      すなわち、思っていた通りに表示されます
      でもIEでは、カテゴリ表示自体がされなくなってしまいます(要するにエラーで無視された?)
      なにが、原因、、というかなにが間違ってるんでしょうか・・??

      これについては、記述がおかしいか、ほかに理由があると思われます。
      ただ、現在の状況説明だけでは適切な回答はできません。

      cyamasan told me は表示せずについてはこのコード関係は直接起因していないでしょう、、おそらく、ほかの部分におかしいところがあるか、ブラウザ依存によるCSSの違いからくるものだと思います。

      cyama さん、 goodtimes さん。
      またも私が話をややこしくしてしまったみたいでごめんなさい。

      ========

      ・カテゴリ一覧は正常表示(但し、>>(リストマーク?)が一つ余分に出た)

      とのことなので、 sidebar.php の ul 内で分岐されているようですね。この場合でしたら、私のコードの <ul></ul> は確かに不要です。
      ということで、 sidebar.php 内でこちらでもテストしましたが、私の環境では goodtimes さんのコードで大丈夫でした (echo は削除)。もしかすると他のカスタマイズ箇所が影響していませんか? あるいはそのコードを記述する場所が、処理上、不都合な場所だった可能性もあります。
      is home などの部分は、 HTML のコメント <!-- --> にして、ソース上で確認した方が無難です。

      HTML のコメント <!-- --> については、 goodtimes さんの最初に提示されたコード内でも使われていましたので、了解済みのことと思い、そのように書きました。あとは cyama さんが説明してくださったとおりです。

      echo 文は echo ‘foobar’; でも echo( ‘foobar’ ); でも大丈夫です。
      if 文も if {} でも if : … endif; でも大丈夫です。ある意味好みです。

      ここから先へ話を進めるには、コードの記述位置や他のカスタマイズ箇所を見せて頂く必要があるかもしれません。
      # CSS は特にカスタマイズされていないのですよね?

      cyamaさん、mizubeさんこんばんは
      質問者のgoodtimesです
      いつもと違うパソコンでこちらに入ろうとしたらPWを忘れてしまって…
      おはずかしながら新しく作りました

      まず、おふたりとも本当にありがとうございます
      それから、結果うまく行ってるというのにいろいろ質問してすみません
      しかも、初歩の初ですよね(たぶん?)
      付き合ってくださって本当に感謝します

      で、いつものパソコンじゃないので、ちょっとソース?を見たりすることができません
      (今のPCから自分のダッシュボードの見方がわからないのです・・)

      明日もう一度自分でよく確認して、投稿いたします
      お礼だけですが、失礼します
      wordpress質問と関係ない投稿してしまったことお許しください

      追記
      すみません、CSS触ってます。ヘッダー部(わたしが今やってるのはsidebar.php)のところに関係することを配布テーマ?から一部コピペしました。
      明日、デフォルトに戻して再度チェックしてみます

      トピック投稿者 goodtimes

      (@goodtimes)

      cyamaさん mizubeさん おはようございます

      なにが原因か切り分けられた・・ような気がします・・!

      #CSSもデフォルトに戻してやりました。(これは関係なかったみたいです)

      <!– 投稿ページはカテゴリ表示 //is_homeで分岐 –>

      このコメントをはずしたら

      ・echo(“is home”)があってもなくても カテゴリ正常表示
      ・cyamasan told me(タグの外なのになんで表示されない??と思ってたところ)も出る
      ・わたしの最初の投稿の文章(つまり一つの命令ごとに<?php…?>でくくってなくても) カテゴリ正常表示

      でした

      質問1
      で、このコメントのなにが悪いことしてる可能性があるんでしょうか・・

      私はPHPもHTMLも今回初めてで、自分が手を入れたところや見てて理解したソース?に自分でコメント(「ここはXXXをTTしてGGしているからQQQ」とか)を入れたいです
      また、デフォルトテーマで不要な部分はごっそりコメントアウトして「ここは何々の処理、不要のため削除」とかも入れたいのです

      わたしがコメントについて認識している(今回気づいた点含む)点を書きますのでご助言いただけませんか?
      他にも要注意点があったら教えていただければ幸いです

      ・<!– –>は、HTML文章内、<?php ?>の括弧内 どちらでもコメントアウトできる
      ・<!– –>は、複数行わたってコメントアウトできる
      ・/* */は、<?php ?>の括弧内 のみコメントアウトできる
      ・/* */は、複数行わたってコメントアウトできる
      ・//ではコメントアウトできないが、何か悪さをする??(今回で疑惑)

      mizubeさんが最初に教えてくださった echo'<!– msg –>’ についてですが
      すみません、頭が混乱していて、すっかり<!– –>がコメントアウトと頭から抜けていました
      (まだこのコメントアウト方法に慣れていないのです・・)
      なので、2回目の投稿で素っ頓狂なこと(「あれ?echoの文字が見えない?」)を書いてしまいました。当然ですよね・・、すみません


      質問2
      phpの命令の後の ; も、あってもなくてもいいものなんですか・・?

      今朝からソースを見ていたらcyamaさんのご提示文の最後に ; がありませんでした
      結局 ; は、あってもなくても変化なしでした
      でもいわゆるcommitみたいなもので超重要だとおもっていたので、びっくりです・・


      質問3
      phpはいろんな書き方でも許してくれる言語?なのですね?(endifや文字列のくくり方など)
      では、さすがにこれは書き方が間違ってますヨ!と知る方法はあるんでしょうか?

      私は他のスクリプト?でプログラムを作ったことがあって、コンパイラ?で自分が書いたソースをコンパイルすると、「何行目の○○がおかしいから、無理!」と跳ね返されます
      書き方も統一されてて、ちょっとでも違う書き方をすると、ブブーでした
      なので今回、書き方がおかしいのに、何も表示しないとかになるのは驚きを隠せないのです

      たまに、HTML上で、英語で何行目がおかしいとか出るときもあります
      たとえば<?php ?>の中に 全角の空白が入っていたときなどです
      他にもありましたが、今思い出せません

      メッセージがでるものはPHPの文章の問題
      メッセージがでずに表示ごとされなくなったりするのはHTMLの問題と思えばいいですか?

      ====
      最後に
      ====
      長くなってしまいましたが、「私の文章のなにが悪いのか?」がわかりつつあってすごくうれしいです
      あと、今回ずっときになっていたif文の書き方などに触れられて、本当にありがたかったです
      ありがとうございます

      あとすこしだけ、未解決のままにさせてください

      トピック投稿者 goodtimes

      (@goodtimes)

      コメントについて追記です

      質問4
      コメントの中を日本語で書くと、その日本語の一部が悪さをする・・なんてことはありますか?

      今回、//がわるいのか?と思って、//以降をはずして <!– カテゴリは分岐で表示 –>のようにしても、IEで正常表示されたりされなかったり・・(キャッシュの問題?とおもってクリアもしていますがいまだなにが原因かわからず)
      IEが日本語の文字コード?(よくわかりませんが、英数字に置き換え・・るんですよね?)をそのまま記号として読み取って、-とか*とかそういうコメントコードに関わるような記号が入っていたら、コメントに影響を与えてしまう??のかな?とも思い出しました

      よそのHPとかのHTMLソースを見ていると、コメントの中身が英語だったりして、なんでだろう?と漠然と思っていたのですが、そういうこともあって英語で書いているんでしょうか?
      (それとも単に日本語で書くと不細工だから?)

      ==== 質問 1, 4 について ====
      例えば、日本語を含むマルチバイト文字を使用する場合、 WordPress 日本語版は UTF-8 を使用していますので、テーマのファイルも文字コードを UTF-8 (BOM なし) にて保存しないと文字化けします。半角英数字や半角記号などの 1 バイト文字はうまく処理されるのですが、マルチバイト文字を含むファイルをうっかり別の文字コードで保存したりすると、文字化けが起こって、それがどこかで悪さをする可能性は十分にあります。 WordPress のテーマをカスタマイズする際は大前提として、 UTF-8 (BOM なし) で保存できるエディタを使う必要があります。

      文字コードに関しては、私は正しい知識を持っているとは言えないので (多分間違ってはいない認識、くらいなので) 掘り下げて説明することができません。

      ==== 質問 2 について ====
      1 行のみのコードの場合、あるいは if 文などのブロックの最終行、コードの最終行などでは ; を省略することが出来ます。これは ; が文の終わりを意味するものだからです。

      ただ、ミスを誘発しますから、文の終わりには必ず ; をつけた方がよい、とされているみたいです。 cyama さんのコードの場合も好みか、あるいは書き漏らしだと思います。

      ==== 質問 3 について ====

      メッセージがでるものはPHPの文章の問題
      メッセージがでずに表示ごとされなくなったりするのはHTMLの問題と思えばいいですか?

      厳密にはそうではないかもしれませんが、基本的にはそのような理解でも OK じゃないかと思います。 PHP の構文そのものが間違っていて、それが以降の処理に響くような場合、 PHP はエラーを出力してくれますが、文法はあっているけど処理がまずくて出力結果が思っていたのと違うとか、 HTML の文法が正しくなく、ちゃんと表示されないといったような場合、そしてブラウザごとの表示の不具合までは、さすがに面倒を見てはくれない、ということですね。

      もし自分の書いた処理の結果が思ったものではなく、何が原因かを探したいなら、独自に if 文などでエラー処理を作成すればいいですし、特定の変数がどんな値を保持しているかをチェックしたいなら print_r() や var_dump() に変数を渡せばよいです。
      if 文や ; についてもそうですが、 PHP については PHP マニュアルをお読みになるのが一番だと思います。ネットで閲覧できますし、 CHM 形式での入手も出来ます。

      またテーマ作成にあたっては、丁寧に作ろうとするならば、 PHP の文法が正しいかどうかだけではなく、 HTML の文法が正しいかどうか、 CSS の文法が正しいかどうかをそれぞれチェックする必要があります。それには W3C の HTML Validator や CSS Validator などが結構役立ちます。

      # だいぶ WordPress から離れてしまっているので、この辺で私からの回答は終わりとさせていただきます:-)

      トピック投稿者 goodtimes

      (@goodtimes)

      mizubeさんこんにちは
      ご回答ありがとうございます

      # だいぶ WordPress から離れてしまっているので、この辺で私からの回答は終わりとさせていただきます:-)

      最後まで丁寧に教えてくださってありがとうございました!
      ご回答もよく理解できました

      本当に感謝です!

      投稿タイトルについては100パー解決しました

      cyamaさん、mizubeさん、ありがとうございました!

      こんにちは^^

      解決してよかったです。ちなみに、、漏れです・・・Orz

      トピック投稿者 goodtimes

      (@goodtimes)

      cyamaさん

      漏れてたから、;がどういう立場にあるか?が気づけました!
      ありがとうございました!

      goodtimes さん

      すみません、終わりといいましたが、書き漏らしがありましたので追記させてください。

      ・<!– –>は、HTML文章内、<?php ?>の括弧内 どちらでもコメントアウトできる

      これは誤りです。 <?php <!-- --> ?> というコードは無効です。 <?php echo '<!-- コメント -->'; ?> は HTML のコメントを出力しているだけです。また、

      ・//ではコメントアウトできないが、何か悪さをする??(今回で疑惑)

      これも誤りです。 //<?php ?> タグ内では、他のプログラム言語と同じく、同じ行の // 以降をコメントアウトできますし、何も悪さはしません。他には、 # も使えますが、推奨されていません。
      また /* */ は、ご存じかもしれませんが /* /* */ */ のように他の /* */ コメントを中に含めることができません

      <?php echo 'echo'; // echo を echo ?>
      
      <?php /*
      // は複数行コメントの中にあっても大丈夫。
      */ ?>

      まとめ直すと、

      • <?php ?> タグの内部と外部はそれぞれ PHP と HTML として切り分けて考える。 HTML でのコメントと PHP でのコメントは全く別もの。 HTML コメントは HTML のソースに含まれるので HTML のため、 PHP のコメントは PHP コードのために使う。
      • HTML のコメントは <!-- --> で。
      • PHP タグ内の単一行のコメントは // で。
      • PHP タグ内の複数行のコメントは /* */ で。 /* */ の中に /* */ があっては駄目。

      という感じです。

      トピック投稿者 goodtimes

      (@goodtimes)

      mizubeさん

      わざわざありがとうございます
      この掲示板のあと、HTMLとPHPのコメントアウト方法を調べにいって、自分なりにまとめてました
      スッキリしてわかりやすいコメントアウト方法のご提示!ありがとうございます!

      またこちらでお世話になることと思います
      その際は(今回のようなことがあって非常に恐縮ですが・・)よろしくお願いします

      ほんとうにお二人ともありがとうございました ==(:x)

    15件の返信を表示中 - 1 - 15件目 (全15件中)
    • トピック「IEで「is_homeで投稿ページを分岐」が無効?」には新たに返信することはできません。