追記です。
また、各記事をタグで拾って一つのページに一覧表示させるページを作った場合に、
「タグ名(カテゴリー) | サイト名」
ともさせたいです。
この辺が参考になりますかね?
おそらく$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'); ?>
と一旦区切って書けば同じ結果にはなるということですね。