• 解決済 heppoko

    (@heppoko)


    header.php内のtitle部分に下記のようなソースが書かれてありました。

    <title>
    <?php wp_title(''); ?><?php if (wp_title('', false)) : ?>|<?php endif; ?><?php bloginfo('name'); ?>
    </title>

    問題なく表示はされているので良いと言えばいいのですが、
    なぜこれで、トップページの時は、サイト名のみを表示して、
    下層ページだと「下層ページタイトル|サイト名」という表示になるのかが分かず…

    wp_titleのパラメータには下記があるとありました。

    第1パラメータ:区切り文字/デフォルト:>>(»)
    第2パラメータ:表示方法/デフォルト:true
    第3パラメータ:区切り文字表示位置/デフォルト:なし

    これを見たから混乱してしまっているのかもしれないのですが…
    現在勉強中の身ゆえ、考えれば考えるほど混乱にしてしまっております。
    初歩的なことだとは思うのですがご教授いただければ幸いです。
    よろしくお願いいたします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • nobita

    (@nobita)

    こんにちは、

    いわゆる、俺流 の書き方です。

    <title>
    <?
    php wp_title('');
    
    //第一引数が,''なので、»を消してタイトルだけecho
    ?>
    
    <?php if (wp_title('', false)) : ?>|<?php endif; 
    
    //echo させないで、タイトルがなんかあったら、| を追加
    ?>
    <?php
     bloginfo('name');
    //サイトタイトルをecho
    ?>
    </title>

    という風に、the_title()の引数を使わないで、自由に書いているだけです。

    引数を使った書き方をすると

    <title><?php wp_title( '|',true,'right');?><?php  bloginfo('name'); ?></title>

    トップ
    <title>サイトタイトル</title>
    下層
    <title>投稿タイトル | サイトタイトル</title>

    となって、同じ関数を2度呼び出すこともなく、同じ表現が出来ると思います。

    では、どっちがいいのか?という事になると、

    どちらの書き方も、良い書き方ではありません。

    では、今の時点でよい書き方とされるのは、どのようなものか?

    <title><?php wp_title( '|', true, 'right' ); ?></title>

    とだけ書いておいて、

    functions.phpで、

    add_filter( 'wp_title', 'my_filter_title', 10 );
    
    function my_filter_title( $title ) {
    
    	return $title. get_bloginfo( 'name' );
    }

    といった使い方です

    なんで、タイトルごときに、関数なんか書かなくちゃいけないのよー

    と思う人もいると思うのですが、

    例えば、あるページのタイトルは、普通の下層ページのタイトルじゃなくて、特別なタイトルを付けたいとか、プラグインから変更したいといったときに、フィルタを使って、タイトル全体をフィルタを使って柔軟に変更できるのがいいと私は解釈しています

    このような、記述の仕方がいいんじゃないかなー という事をまとめてあるのが、ワードプレスのテーマのレビューガイドラインだったりします。

    http://make.wordpress.org/themes/guidelines/guidelines-theme-check/

    Function Parameters, Filters, Action Hooks

    Themes are required to use function parameters, filters, and action hooks where appropriate in order to modify content, rather than hard-coding:
    wp_title():
    Themes are required to modify output via filter (wp_title/body_class/post_class)
    body_class()/post_class()

    めんどい、と言えばそれまでですが、「こんな風に書くには、それなりの理由があるのよー」と思えていたほうがいい事もありますよね

    トピック投稿者 heppoko

    (@heppoko)

    ご丁寧な回答、本当にありがとうございました。
    こちらが提示したソースに対する明確な説明にまずは大変感謝いたします。
    そういう意味合いで書かれていたのかということがとても分かりました。
    しかも引数を使った書き方、果ては最良と思われるソースまで提示していただけてとても勉強になりました。
    functions.phpに記述するソースの意味がイマイチきちんと把握できていないのですが、
    もし可能なら、こちらの意味も教えていただければ幸いです。

    重ね重ね、本当にありがとうございました。

    nobita

    (@nobita)

    functions.phpに記述したコードは、hook(フック)といいます。

    フックには、アクションフックと、フィルタフックの2種類があり、WordPress3.9だと、全部で、1648個のフックがあります。

    これなに?
    ワードプレスは、コアと、プラグイン テーマの3つが、それぞれ別々に動いているわけですが、全体として一つの機能としてうまく動作させるために フックは、コラボするための重要な役割を担っている仕組みです。

    実際、何の役に立つの?

    今の流れで説明すると、

    <title>投稿タイトル | サイトタイトル</title>

    と表示されますが、サイトタイトルや、投稿タイトルは、それ自体で意味が分かりますよね

    じゃ、カテゴリアーカイブだったらどうなるのか?

    <title>動物 | サイトタイトル</title>

    カテゴリアーカイブ動物なら、上のようになりますよね。

    こういった場合、動物? 大抵カテゴリは、単語が使われるので、意味不明、こういうタイトルじゃ「だめだ、だめだ、、、」と大騒ぎする人が、目の前に現れてしまったとします。

    フックの使い方を知っていると、例えばこんな感じでタイトルの文字を、簡単に変更できてしまいます。

    add_filter( 'wp_title', 'my_filter_title', 10 );
    
    function my_filter_title( $title ) {
    	if ( is_category() ) {
    		return $title . get_bloginfo( 'name' ) . esc_html__( ' Category Archives', 'text-domain' );
    	}
    
    	return $title . get_bloginfo( 'name' );
    }

    と書くと、

    <title>動物 | サイトタイトル Category Archives  </title>

    と、意味の通じるタイトルにすることが出来ます。

    もし、この書き方をしていなかったら、そういう場合の対応は、テンプレートにコンディショナルタグを書かなくちゃいけなくなったり、テンプレートがどんどん複雑になっていったりします。

    好みや、スキルも関係するのでそれぞれに合った書き方で、問題はないと思いますが、
    こういう風にやったほうがいいと考えている人もいるらしいぐらいは知っておくといいと思います。

    トピック投稿者 heppoko

    (@heppoko)

    今回もものすごく丁寧な回答をありがとうございました。

    フックのこと自体は別件で自習しなければなりませんが、
    なるほどなるほどと拝見させていただきました。

    無理やりできなくもないけれど、知っていればかなりスリムに仕上げられる。
    そんな感じでしょうか。確かに現実的に、その手のことが把握できていないので、
    テンプレを作っては無理やり…といった感じが否めませんので。

    道は遠いですが地道に継続しようと思います。
    重ね重ねありがとうございました。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「「wp_title()」の書き方で教えていただきたいことがあります」には新たに返信することはできません。