投稿ページとその他のページの区別方法
-
こんにちは お世話になります
投稿ページを判断する方法はありますか?(ちなみに複数の投稿記事が表示されています)具体的になにがしたいかというと
・トップページ・・・サイドバーを非表示
・投稿ページ以外の1枚もののページ・・・サイドバーを表示+子ページ一覧を表示
・投稿ページ・・・サイドバーを表示+子ページ一覧はなし(子ページ自体ない)+カテゴリ一覧を表示です
わからなかったので、is_pageで無理やり代用しようとおもったのですが、
is_page(‘投稿ページのID’)も、is_page(‘投稿ページの名前’)も無視されてしまいます
ちなみに投稿ページ以外はis_page(ID)などで分岐?してくれましたできれば、投稿ページかどうかで区別がつけられれば一番うれしいです
(idや名称だと、変えられたりした場合に困るので)よろしくお願いします
-
goodtimes さんのなさりたい分岐は
<?php if ( is_home() ) : ?> <!-- トップページの場合の内容をここに --> <?php elseif ( is_page() ) : ?> <!-- ページの場合の内容をここに --> <?php elseif ( is_single() || is_archive() ) : ?> <!-- 投稿 (シングルページかアーカイブページ)の場合の内容をここに --> <?php endif; ?>
というような書き方で大抵の場合はいけると思います。
——–
is_page() は「投稿ページ以外の1枚もののページ」かどうか、あるいは更に ID やページの名前を渡すことで、特定の「投稿ページ以外の1枚もののページ」かどうか、を判断するための条件分岐タグです。
「投稿」は「投稿ページ以外の1枚もののページ」ではありませんので、「投稿ページ以外の1枚もののページ」かどうかを判断する is_page() に ID などを渡しても思ってらっしゃるようには判定できません。まずはじめに把握していただきたいのですが、 WordPress では「投稿」と「ページ」が区別されていまして、 goodtimes さんのおっしゃる「投稿ページ以外の1枚もののページ」を「ページ」あるいは「固定ページ」といいます。一方、「投稿」は「投稿」なのですが、「投稿ページ」、つまり「投稿」の内容を表示するページには、トップページを除くと大別して
- コメント欄が表示される、「投稿」ごとの単一のページ
- カテゴリー別や日付別など一覧で表示されるページ
の 2 種類があり、それぞれ「シングルページ (単一投稿ページ)」、「アーカイブページ」といいます。
その他に、検索結果を表示する「検索 (結果) ページ」や、指定されたURLにページが存在しない場合 (404 Not Found) に表示される「 404 (Not Found) ページ」、 WordPress からアップロードしたメディアやファイルを表示する「アタッチメントページ (添付ファイルページ)」、などがあります。上記が呼び方としてしっかり統一されているものか、あるいは別の正式な呼称があるのかどうかは、日本語版のスタッフの方に聞いてみないとちょっと分かりませんが、少なくともそれぞれのページかどうかを判定するための条件分岐タグが用意されています。
詳しくは WordPress Codex の条件分岐タグに関するページを確認してみてください。
mizubeさん、おはようございます
ご丁寧に、どうもありがとうございます
私の言葉に合わせてもらってすみませんで、is_single()とis_archive()で試してみましたが、どちらも表示されませんでした
私の区別したい投稿ページは、
・カテゴリー関係なしに全投稿記事が表示されている
・シングル記事ではないので、当然・・なのですね・・?
なので、ない知恵を振り絞って、「ページじゃなければ」(!(is_page())と書くとうまくいきました
ただ、ページとか投稿ページとかアーカイブとか、wordpressのやりかた?がよくわかってないのに「ページじゃなければ」で逃げたのが非常に気にかかります
もし、「それはこういうとこでも引っかかる可能性がある」ようなことがあったら教えていただけませんか?
ちなみに、試した結果はこんな感じでした。他にもテストするところありますか・・?
・is_single()は、
– 投稿タイトルをクリックしてその記事のみを表示させると、有効でした・is_archive()は、
— カテゴリリンクをクリックして、カテゴリのアーカイブ一覧?を表示させると、有効でした・!is_page()は、
— is_archive()が有効のとき プラス
— 投稿記事が投稿記事の古い順に表示されている状態で有効でしたああ、「投稿ページ」とは、表示設定のところで設定する「投稿ページ」のことだったんですね!
でしたら、私の回答はまったくの勘違いでした。失礼しました。<!– (この行を混乱回避のため削除しました) –>
結論としては、フロントページ (表示設定で設定したトップページ) は is_front_page() を使い、投稿ページでは is_home() を使うということで解決できるかと思います。色々ややこしくしてしまいすみませんでした。
# !is_page() にはフロントページと、ページ以外が該当します。 is_home() も is_archive() も is_single() も is_search() も is_404() もそうですね。
mizubeさん
すみません、名称をわたしが好き勝手に呼んでいるいるからこんな事に・・
そうです、投稿ページは、ダッシュボード->設定->表示設定で設定する「投稿ページ」です>私の経験では、 is_page(‘slug’) が少なくとも有効だったと思うので、
slugって、なんですか?
ナメクジという意味しかわからなくて、想像がつかないのですが…
記事を判別するひとつの方法ってことですよね?(IDやカテゴリなどと同様に?)
教えていただけませんでしょうか?あと、あまり意味のあることじゃないかもしれませんが、念のため書きます
トップページの判別?(分岐?)は、is_home()は効かなかったんです
なので、is_front_page()にしてます
※トップも、ダッシュボード->設定->表示設定で、固定ページのトップページで設定していますで、トップページなら○○、投稿ページなら△△、それ以外のページなら××・・・の分岐ですが
以下のようにしています※サイドバーではis_home()だったりと挙動が異なっていたような記憶が・・のくだりに反応して書いているだけなので、まったく見当違いなら無視してください
******************************** トップページだとサイドバー非表示 @ page.php ******************************** <?php if (is_front_page()) { ?> <?php get_footer(); ?> <?php } else { ?> <?php get_sidebar(); ?> <?php get_footer(); ?> <?php } ?> ******************************** (固定)ページだとサイドバーに子ページ一覧表示 @ sidebar.php #投稿ページは子ページなし&トップページはサイドバー自体なしなので、分岐はしてません ******************************** <!-- ページ表示は5階層まで --> <!-- 選択ページの最上位$ancestorを取得 --> <?php $ancestor = array_pop(get_post_ancestors($post->ID)); ?> <?php if(empty($ancestor)) { /*選択ページが最上位*/ wp_list_pages('depth=5&child_of=' . $post->ID . '&title_li=<h2>' . __('Pages', 'kubrick') . '</h2>' );} else { /*選択ページが最上位以外*/ wp_list_pages('depth=5&child_of=' . $ancestor . '&title_li=<h2>' . __('Pages', 'kubrick') . '</h2>' ); }?> ******************************** 投稿ページだとサイドバーにカテゴリ一覧表示 @ sidebar.php ******************************** <!-- 開発実績ページのみカテゴリ表示 //ページじゃないとしか分岐不能?要注意かも --> <?php if (!(is_page())) { wp_list_categories('show_count=1&title_li=<h2>' . __('Categories', 'kubrick') . '</h2>'); }?>
mizubeさん
is_homeでバッチリ区別してくれました!ありがとうございます!
でも、なぜ??
is_home()は、いわゆるトップページ(http://XXXX.jp)のことではないんですか?
投稿ページはhttp://XXXX.jp/?page_id=32となっています
不思議です、、
どうして分岐?できるのか教えてくださいませんか・・?# !is_page() にはフロントページと、ページ以外が該当します。 is_home() も is_archive() も is_single() も is_search() も is_404() もそうです
こちらの情報もありがとうございます!
前回書いた(固定)ページだとサイドバーに子ページ一覧表示 @ sidebar.php
の分岐が必要だとわかりました
ただ、なぜかまた分岐しないので・・もう一度目を皿にして見てみますもうすこし未解決のままにさせてください
>私の経験では、 is_page(‘slug’) が少なくとも有効だったと思うので、
あらら、削除した箇所、既にお読みになってたのですね。
これは「フロントページ」の方の話であって、「投稿ページ」には関係のないことです。
私の方でも回答の際に少し混乱してしまっていたのでした。ごめんなさい。スラッグは簡単に言うと、URLで使用するための文字列ですね。例えばインストール直後に既に作成されている「紹介」ページの URL は最初 http://example.com/?page_id=2 ですが、パーマリンク設定を変更すると http://example.com/about/ になります。この「about」の部分がスラッグです。スラッグは投稿でもページでも、パーマリンク設定を初期のもの以外にすれば、 2.6 系の場合は、投稿やページが保存されると、タイトル入力欄の下に項目が現れ、編集できるようになります。
is_home()は、いわゆるトップページ(http://XXXX.jp)のことではないんですか?
厳密には違うようです。 is_home() がいうなれば「home タイプのテンプレートを使用するページ (投稿を表示するメインのページ)」のことを指すと考えれば分かりやすいと思います。
固定ページをフロントページに設定すると、トップページのはずなのに home タイプのテンプレートは使われず、「ページ用のテンプレート」が使われますよね? 一方、投稿ページでは、ページのはずが、ページ用のテンプレートは使われず、 home タイプのテンプレートが使われるようになります。
つまり、フロントページでは home タイプのテンプレートは使わないので is_home() では判断出来ませんが、あくまでページなので is_page(‘フロントページのタイトルやスラッグ、ID’) で判断できると共に、フロントページかどうかを判断する is_front_page() が別途用意されており、一方、投稿ページはページ扱いではないためページ用のテンプレートを呼び出さず、したがって is_page() は使えませんが、home タイプのテンプレートを呼び出すので、 is_home() で判断することができる、ということだと思います。
home という呼び方をするのは、通常の使い方では home タイプのテンプレートがトップページで使われるためで、フロントページや投稿ページを設定する機能がなかった頃の名残でしょう。それと同時に、ややこしい感じもしますが他に適当な呼び方もなさそうです。
mizubeさん
つらつらとした長文で読みにくいのに
・スラッグについて
・is_homeがなぜ有効になるのかについて
二つとも答えてくださってありがとうございます!
読みにくいよなー・・と思って修正しようかと思っていたところでした2つとも理解できました
元々 is_home() がいうなれば「home タイプのテンプレートを使用するページ (投稿を表示するメインのページ)」のことを指す
こちらの説明で思い出しました
そうでした、最初になにもphpファイルや設定を触ってない状態だと
トップページに投稿記事が追加されていてて、こまったなーと思ってたんでした!
これでつながりました!で、タイトルの投稿ページとその他のページの区別方法はこれで全て解決しました
が、また新たに??が・・
これは、このトピック?とは関係ないことになるので、もう一度よく調べてわからなかったら
新しく質問します本当に細かいところまで、ありがとうございました!
===
最後に、同じ内容でお困りの方のためにまとめておきます<わたしの使用している言葉の説明>
・投稿ページ・・・ダッシュボード>設定>表示設定で、投稿ページに設定しているページのこと
・カテゴリー関係なしに全投稿記事が表示されている
・シングル記事ではない
・TOPページ・・・ダッシュボード>設定>表示設定で、トップページに設定しているページのこと<分岐するための関数?>
投稿ページは is_home で分岐する
TOPページは is_front_page で分岐する
その他の固定ページは is_page で分岐する
- トピック「投稿ページとその他のページの区別方法」には新たに返信することはできません。