author 表示では author.php を用意しておけば、これが呼び出されます。ただし、author 別にテンプレートを用意しても無効なので、author.php の先頭で、get_the_author_ID() 等の結果で振り分けるとよいでしょう。get_the_author…. の他の関数については wp-includes/author-template.php を見てみてください。
author と category の複合ですが、template-loader.php の仕様で、先にカテゴリーテンプレートが呼び出されてしまいます。category-a.php の先頭で author 振り分けが必要と思います。
あと、余談ですが、ドメイン名の例示には example.com や example.jp 等を使ってください。xxx.com は実在のドメインですので、あなたが xxx.com を所有しているのでない限り、サンプルに使うべきではありません。
lilyfanさん
お返事ありがとうございます。
ご指摘のドメイン表記の件もご注意ありがとうございます、
こちら気をつけるようにします。
author.phpでauthor表示専用のテンプレートが作れるとは知りませんでした。
あまりスマートでないと思いますが、投稿者別にデザインを変えたい部分は
author.php内でそれぞれ
<?php elseif ( is_author('1')): ?>
1
<?php elseif ( is_author('2')): ?>
2
<?php elseif ( is_author('3')): ?>
3
<?php else: ?>
その他
<?php endif; ?>
のような表記で切り分ける形で対応しようと思います。
あと振り分けが多くなるとややこしくなりそうなので
author.phpは全部の投稿者同じテンプレートにして
header.phpだけ表示を振り分けようと考えています。
ただこの方法だとheader.php内で表示振り分けを行った場合に
(パンくずリストを上記の上記の方法でheader.php内表示しています。)
example.com/contents/author/author1/
の場合は振り分けがきくのですが、
example.com/contents/author3/category-a/
の場合だと振り分けがうまくできないようで。。
template-loader.phpの仕様と関係あるところなのでしょうか??
example.com/contents/author3/category-a/
ですが、手元の環境では、そもそもコンテンツがうまく表示できませんでした。
example.com/contents/?author=3&cat=1
からのリダイレクトをすると、example.com/contents/author/author3/ になってしまい、カテゴリーの絞り込みが URL に反映されません…… (WordPress 2.3.3 だから?)。
template-loader.php の仕様というのは、is_category() のチェックが is_author() のチェックより先なので、カテゴリーテンプレートが先に読まれるということです。is_category() や is_author() を TRUE にする処理は wp-includes/query.php で行なっていて、排他的ではなく両立するはずです。ただ、リダイレクトされたあとの URL が、is_category() が TRUE にならない型式になってしまっている可能性はあります。
このへんは WP_Rewrite の処理にもかかわってくるので、非常に難しいです。
いっそのこと、デフォルトのパーマリンク (?author=3&cat=1 の型式をそのまま使う) で試してみるとどうでしょう? これだと URL 書き換えが発生しないので、確実に絞り込みができます。ただし、URL がかっこわるくなるという欠点が出ます 😉
そうなんですね、
内部処理のところは私には手も足も出ないかと、、。
こちらの環境の場合、前述のとおり
example.com//contents/author1/category-a/
は掲載コンテンツ自体は表示されていますが、 is_author()が効かず
デフォルトの表示形式で吐き出されている状況です。
パーマリンク設定を変えずに
example.com/contents/?author=3&cat=1
とURLを直接たたくと
最初に
example.com/contents/category/category-a/?author=3
へリダイレクトされ、このURLから
example.com/contents/author/author3/
へリダイレクトされているようです。
ちなみに使用しているバージョンはWordpress 2.3.3です。
ご提案いただいた方法で、パーマリンク構造を
example.com/contents/%author%/%category%/%postname%/
からデフォルトに戻して試してみたところ、
おっしゃる通りリダイレクトはまったくしなくなったのですが、
・header.php内に記述しているテンプレート側の振り分け判別is_author()の値(半角英字のユーザー名で指定しています)をまったく変えない場合
<?php elseif ( is_author('3')): ?>
・header.php内に記述しているテンプレート側の振り分け判別値指定をid(数字のユーザID)で指定した場合
<?php elseif ( is_author('author1')): ?>
それぞれパーマリンク変更前と変わらず is_author()が効きませんでした。。
デフォルトのパーマリンク設定であれば普通は振り分けが効くものなのでしょうか??
うーんむずかしい。。
SEO的なところも含めパーマリンク構造、できればカスタムで指定したいと考えています。
もう少し検証してみましたので記載させていただきます。
example.com/contents/author1/category-a/
振り分け効かず。
example.com/contents/author/author1/
振り分けが効く。
このURLにカテゴリ判別?cat=をつけて
example.com/contents/author/author1/?cat=1
にアクセスすると
example.com/contents/category/category-a/
にリダイレクトがかかる。なぜかauthor情報がURLから抜けてしまう。
このURLに投稿者判別?author=をつけて
example.com/contents/category/category-a/?author=3
にアクセスすると
example.com/contents/author/author1/
にリダイレクトされ、category情報がURLから抜けてしまう。
author判別での表示振り分けは効いているがcategory別に投稿記事を表示できない。
「特定の投稿者」が投稿した「特定のカテゴリ」のみを一覧で表示することは
example.com/contents/author1/category-a/
のURLでできているが、その際
is_author()、is_category()判別による表示デザインの振り分け
を両立させることができずデフォルトのデザインの状態で表示されてしまう。
is_author判別が効くURL
example.com/contents/author/author1/
example.com/contents/?author=1
効かないURL
example.com/contents/?author=1&cat=2
example.com/contents/author1/category-a/
どうもカテゴリと投稿者両方の判別を受けた場合、カテゴリ判別しか効いていないようです。
こちら両方受けて表示判別するのは仕様上できないということでしょうかね。。。?
ありゃりゃ。デフォルトのパーマリンクでも is_category() と is_author() の両立が無理でしたか……。
get_the_author_ID() で、現在の author ID が取れますので、こちらで振り分けするとどうでしょう? カテゴリーは in_category($category) を使ってみるとどうでしょう。
in_categoryを使用して
<?php if ( is_author('author1')): ?>
<?php if ( in_category('category-a')): ?>
author1designheader
<?php endif; ?>
<?php endif; ?>
のような重複判別は一度ためしたのですが
こちらも両立できないようでした。
教えていただいたget_the_author_ID()、恥をさらすようで気が引けますが、、、。
例えば
<?php if ( is_author(get_the_author_ID())): ?>
author1designheader
<?php elseif ( is_author(get_the_author_ID())): ?>
author2designheader
<?php else : ?>
author3designheader
<?php endif; ?>
とか
<?php if ( get_the_author_ID()): ?>
author1designheader
<?php elseif ( get_the_author_ID()): ?>
author2designheader
<?php else : ?>
author3designheader
<?php endif; ?>
とか
<?php if ( get_the_author_ID('author1')): ?>
author1designheader
<?php elseif ( get_the_author_ID('author2')): ?>
author2designheader
<?php else : ?>
author3designheader
<?php endif; ?>
などググりながら色々試してみたんですが、どうもうまく動かなく、、
get_the_author_IDは判別で使うまえに
$author=get_the_author_ID()みたいに定義つけが必要なのでしょうか?
AtsushiGTRさん
ありがとうございます。削除されたようですが
瞬間的にリンク先からダウンロードして試させてもらいました。
user themesはアクセスしてきたユーザーに対しての判別のようですね。
惜しかったです。。。
get_the_author_ID() は、絞り込まれた執筆者のID番号を返す関数です。なので、振り分けは以下のような感じにします。
<?php switch (get_the_author_ID()) {
case 1:
(author 1 向けのテンプレート)
break;
case 2:
(author 2 向けのテンプレート)
break;
default:
(その他の author 向けテンプレート)
break;
} ?>
関数名から「ID 番号が得られる」ことは自明だと思って説明しませんでしたが、is_author() のように TRUE/FALSE を返すものだと勘違いされていたようですね……。
ID 番号じゃなくて nicename を使うならば get_the_author_nicename() など別のテンプレートタグがありますので、author-template.php を覗いてみてください (けっきょくはソースが最良のリファレンス 😉
ありがとうございます!
教えていただいた方法から少しいじって無事表示の
振り分けができるようになりました。
正直なぜこの構文で振り分けができているのかいまいちわからないんですが、
なぜか<?php switch (get_the_author_ID()) {
だとうまく振り分けができなく(僕の使い方が良くなかったのかもしれません。。)
他に投稿者を呼び出せそうなものを一通り試したところ
<?php switch ($author) {
この形でauthor判別を受けるようになりました。
カテゴリの絞り込みも両立しているようです。
ちなみにget_the_author_ID()って投稿者ID(数字のID)を返すんですよね。。?
翻訳しながらauthor-template色々眺めたんですが、もしかしたらループ内でしか
使えないのかなと思い$authorで試した感じです。
(ちなみに条件分岐はheader.php内のみでおこなっています)
get_the_author_ID()イコール$authorだと認識しているんですが
これは勘違いなのかな。結局使い方がわかっていない自分。。
lilyfanさん助かりました〜。:-)
ちょっと返事が遅くなりました。 get_the_author_ID()
はお察しの通りループの中で使うものでした (それぞれの記事の投稿者を示す)。$author
はクエリー条件としての投稿者だと思われます。
なので、author でクエリーを投げた場合は、実質的には get_the_author_ID() == $author となるはずです。複数の author に一致するようなクエリーの場合は違ってきます。
とりあえず動いているようで何よりです。