サポート » テーマ » 親ページを持つ子ページのタイトル表示[header.phpのカスタマイズ]

  • 解決済 yumebunseki

    (@yumebunseki)


    ・親ページを持つ子ページのHTML: title の部分に流し込まれるテキストをコントロールしたくて色んなテーマのheader.phpファイルを開いて参照して寄せ集め的にこれで良いのじゃないか?と辿り着いた記述が以下なのですが、目的の表示になってくれません。
    どこが可笑しいのか、但し記述を教えて頂けると助かります。

    こうなって欲しいという希望書式は
    「子ページのタイトル:親ページのタイトル | サイト名」
    です。
     また、現段階では投稿は使っていませんが将来的に使う予定なので投稿中の単一記事を表示させた時にも
    「記事タイトル:カテゴリー名 | サイト名」
    となって欲しいです。

    ※WP Super Cache などキャッシュ・プラグインは停止させてあります。
    ※ブラウザのキャッシュも読み込み前毎に削除して確認しています。

    <title>
    <?php if ( is_home() ) { ?>
    	<?php bloginfo('name'); ?>|<?php bloginfo('description'); ?>
    <?php } elseif (is_single()) { ?>
    	<?php echo the_title(); ?>(<?php $cat = get_the_category(); $cat0 = $cat[0]; { echo $cat0->cat_name; } $cat1 = $cat[1]; { echo $cat1->cat_name; } $cat2 = $cat[2]; { echo $cat2->cat_name; } $cat3 = $cat[3]; { echo $cat3->cat_name; } ?>)|<?php bloginfo('name'); ?>
    <?php } elseif (is_page()) { ?>
    	<?php echo the_title(); ?><?php if ($post->post_parent) { echo "(".get_the_title($post->post_parent).")"; } ?> | <?php bloginfo('name'); ?>
    <?php } else { ?>
    	Archive or Search results page|<?php bloginfo('name'); ?>
    <?php } ?>
    </title>
15件の返信を表示中 - 1 - 15件目 (全16件中)
  • 追記です。

    また、各記事をタグで拾って一つのページに一覧表示させるページを作った場合に、
    「タグ名(カテゴリー) | サイト名」
    ともさせたいです。

    この辺が参考になりますかね?
    おそらく$parent = get_post($parent_id);が足りないのじゃないかと?

    >>shokun0803 さん
     コメントありがとうございます。

     現在 function.php に以下の記述を入れてサブページがどうか判定するようにしていて

    function is_subpage() {
        global $post;
            if ( is_page() && $post->post_parent ) {
                   $parentID = $post->post_parent;
                   return $parentID;
            } else {
                   return false;
            };
    };

    header.php には(前後略)

    } elseif (is_subpage()) {
    	global $post;
    	_e("the_title().'|'.get_the_title(is_subpage()).'|'.bloginfo('name')",'notepad-theme');
    } elseif

    と記述してみたのですが上手くいきません。
    どこがおかしいか、不足等を指摘して下さると助かります。

    ちょっと気になったのですが、$postってヘッダを処理している時には中身がないんじゃないかな、と。$postはループ内でセットされるのが一般的だと思いますが。

    >>V.J.Catkick さん
     $post が空だから処理自体はされてても表示に出てこないのだ、ということですよね? 理屈としてはわかります。
     が、そうなると以下の質問になるのですが、、、、

     ご存じの方には素頓狂な質問だとは思いますが、ループってどこからどこまでなのでしょうか? ループという概念自体はわかるのですが実際の処理に於いてどこからはループに該当するのか(逆にどこはループじゃないのか)がCodexとかを読んでいっても(ループでどういう処理ができる的な話は書いてあっても)充分に明示的な説明がなく、イマイチ分かっていませんので、これの説明を下さるとありがたいです。

    良く見るのは

    while ( have_posts() ) :
      the_post();
      // do stuff
    endwhile;

    な感じですけど、the_post() すればそれがループです。
    $post に魂を注入してくれるヤツですね。
    単体の固定ページなら header.php で the_post() しちゃえば OK です◎

    Codex わからんぞ!って場合は、オープンなソースを見てみると何をしてるかよくわかります。(the_post() なら wp-includes/query.php)で、こう書いてあればよくわかったのにーもー、ってことを皆の手で Codex に反映させるとすごくステキです。

    皆さん。 まず謝罪です。 All in One SEO Pack の Titleタグの自動置き換えがオンになっているのに気付かず「反映されない!反映されない!」と見当違いなところをグルグル回っていました。^^;

    <?php
    if (is_home() && !is_paged()) {
    	echo bloginfo('name') .'|' .bloginfo('description');
    } elseif (is_front_page()) {
    	echo bloginfo('name') .'|' .bloginfo('description');
    } elseif (is_single()) {
    	echo single_cat_title() .'|'.wp_title('');
    } elseif (is_subpage()) {
    	echo (the_title('','|',true).get_the_title($post->post_parent)) .'|' .bloginfo('name');
    } elseif (is_page()) {
    	echo the_title('','|',true).bloginfo('name');
    } elseif (is_tag()) {
    	echo the_title('','|',true).get_the_tags().'|'.bloginfo('name');
    } elseif (is_404()) {
    	_e('404 Not Found','notepad-theme');
    } elseif (is_category()) {
    	echo single_cat_title().'|'.wp_title('');
    } elseif (is_tag()) {
    	echo the_tags('', ',', '').'|'.wp_title(''); wp_title('');
    } elseif (is_search()) {
    	_e('Search Results for:','notepad-theme'); echo ' ' . $s;
    } elseif ( is_day() || is_month() || is_year() ) {
    	_e('Archives:','notepad-theme'); wp_title('');
    } else {
    	echo wp_title('');
    }
    ?>

    この記述で当初の目的の「サブページの親のタイトル取得」は出来たのですが、新たな問題発生で、、、サブページのタイトル表示が「記事タイトル|サイト名親ページタイトル|」という表示になってしまいます。
    問題点は「サイト名(bloginfo(‘name’))が前に来てしまう」です。

    どうすれば後ろ(最後尾)に持ってこれるのでしょう?

    echo してるのでしたら
    echo (get_the_title().'|'.get_the_title($post->post_parent)) .'|' .get_bloginfo('name');
    じゃないとダメじゃないです?

    >>kvex さん
     ご指摘の通り get_bloginfo(‘name’) に置き換えたら上手くいきました。ありがとうございました。

     問題解決だけの話ならこれで「めでたし、めでたし」で良いのですけど、今回の件も、

    ・bloginfo(‘name’) は、こういう戻り値で、これの扱いはこうなっている(こういう扱い方をできる。こういう扱い方は出来ない)よ。
    ・get_bloginfo(‘name’) は、こういう戻り値で、これの扱いはこうなっている(こういう扱い方をできる。こういう扱い方は出来ない)よ。
    ・だから二者の違いはこうこうで、こういう使い分けを想定されていると言える。

     というような本当の意味でのレファレンスがCodexには不足しているなぁと思う次第でして、、、。「いや、それはPHPのことを或程度知っていたら常識だよ」という声も上げるかも知れませんが。

    英語版の方のcodexにはちゃんと説明が出てますねぇ…。日本語の方はちょっと言葉が足りないような気がします。

    有志だけでメンテナンスしてますからね・・・
    是非yumebunsekiさんもCodexに参加してみましょう;)

    誰でも修正できますので、是非参加して、気になったところがあれば修正していけば後の人が幸せになります。

    その後、自分なりに調べて「get_ の付いているものはPHP関数」で「付いていないものはWordPress テンプレート関数」だという違いなのだとわかりました。(で合ってますよね? >All) この違いから来る挙動の違いだと。

    >>V.J.Catkick さん
     ですよね。>言葉が足りていない。

    >>shokun0803 さん、kvex さん
     僕の英語力でどれほどお役に立てるようになるかは甚だ疑問ですが、、、そうなれるよう、助けてもらうばかりの側に居ていないようになりたいとは思っていますです。はい。
     この後もお知恵を頂くこと暫しだとは思いますが、よろしくお願い致します。m(__)m

    「get_ の付いているものはPHP関数」で「付いていないものはWordPress テンプレート関数」だという違いなのだとわかりました。(で合ってますよね? >All)

    いや、違うんじゃないかなぁ(汗)

    単純にget_のついているものは「そのままechoしないで返り値がある関数」だと思うのですよね。まあすべてそうではないので一概には言えませんが、少なくともget_bloginfo関数はPHPの値を返しますが表示はしません。

    <?php get_bloginfo('name'); ?>

    これだと何も表示しませんが、

    <?php echo get_bloginfo('name'); ?>

    ならブログ名を表示します。
    なぜこんな関数が用意されているかといえば、上記でいえば一度ブログ名を取得して加工して表示したいなんて場合は、いきなり表示されちゃうと加工のしようもないですよね。

    例えば・・・

    $my_blog_name = bloginfo('name');

    bloginfoだと表示しちゃうので$my_blog_nameに何も入りません。これじゃだめですね。

    僕の英語力でどれほどお役に立てるようになるかは甚だ疑問ですが、、、そうなれるよう、助けてもらうばかりの側に居ていないようになりたいとは思っていますです。はい。

    私も英語はできませんよ;)
    こうやってフォーラムで返答することもコミュニティーへの貢献になりますし、Codexも英語の翻訳だけをやっているわけではないですからね!当方は自分で使用しているサーバーの情報を提供することで少しばかり貢献しています。やれることからやればいいんです;)

    >> shokun0803 さん
     ああ、なるほど! つまり、こういう無理な書き方をする必要は別にないですが敢えて

    <?php echo (the_title('','|',true).get_the_title($post->post_parent)) .'|' ?><?php bloginfo('name'); ?>

    と一旦区切って書けば同じ結果にはなるということですね。

15件の返信を表示中 - 1 - 15件目 (全16件中)
  • トピック「親ページを持つ子ページのタイトル表示[header.phpのカスタマイズ]」には新たに返信することはできません。