デザインを分けるためだけなら、get_the_author_ID()
、get_the_category()
で投稿者・カテゴリIDを取得するほうが簡単じゃないかと。
ちなみに、現在1ページ目での判定はどうやっているんでしょうか?
>デザインを分けるためだけなら、get_the_author_ID()、get_the_category()で
>投稿者・カテゴリIDを取得するほうが簡単じゃないかと。
なるほど、これはurlで各IDを渡さなくても記事データから自動で判別してくれるということでしょうか?
現在1ページ目(single.php)に入る際の判定としてin_categoryとswitchを併用しています。
<?php if (in_category('1')||in_category('2')||in_category('3')||in_category('4')): ?>
のようにin_categoryを使ってカテゴリごとにデザインを分け、その中で
<?php switch ($author) {
case "2": echo ~'; break;
} ?>
のようにswitchを使って投稿者ごとに表示するタイトルやデザインを細かく分けられるようにしています。
ちなみにphp文のなかにphp文は入らないんだろうなと思って他のコード見ながら
<?php wp_link_pages('before=&after=&author=' . the_author_id()
. ' &cat= ' . the_category_id() . '
&next_or_number=next'); ?>
↑こんな感じに書いたら
43<p><a href="http://~/contents/?p=70&page=2">次ページへ</a>
こんなふうにIDはそれぞれ取得できたっぽいんですが、ID数字自体が
リンクの外にテキストの羅列ででてしまってよくわからないことに。。。
なるほど、これはurlで各IDを渡さなくても記事データから自動で判別してくれるということでしょうか?
そういうことです。
<?php
$author_id = get_the_author_ID();
$categories = get_the_category();
$cat_id = $categories[0]->term_id;
?>
single.phpの先頭で↑を記述し、必要なところで$author_id
、$cat_id
を参照すれば、デザインの切り替えができるのではないでしょうか。
<?php wp_link_pages('before=&after=&author=' . the_author_id()
. ' &cat= ' . the_category_id() . '
&next_or_number=next'); ?>
IDがページリンクの前に出るのは、the_author_ID()
、the_category_ID()
がその場でechoするためです。いずれにしても、$afterパラメータの内容はの後に追加されるので、URLに追加するためには使えません。
ご返信ありがとうございます。wp_link_pageで吐き出されるURLに値を追加するのにthe_author_ID(),the_category_ID()は使えないんですね。。
この方法でやるのは無理がありそうなので教えていただいた
<?php
$author_id = get_the_author_ID();
$categories = get_the_category();
$cat_id = $categories[0]->term_id;
?>
を使ってやる方法に挑戦してみようと思います。
ご教授いただいた方法色々試してみました。
phpのどこかに下記コードが記述してあれば、ループ内に$author_IDを使うことで
判別に利用できたのですが、ループ外だとうまく呼び出せていないようです。
これはget_the_author_ID()自体がループ内でしか使えないことと関連しているのでしょうか。?
<?php
$author_id = get_the_author_ID();
$categories = get_the_category();
$cat_id = $categories[0]->term_id;
?>
header.phpなどにも投稿者別に吐き出すデザインを分けて書いてますので
ループ外で使いたいのですがループ外で使えるようにする
カスタムの方法はわからなかったです。。。
ご参考までに改変前のソース張らせていただきます。
<?php get_header(); ?>
<?php switch ($author) {
case "2": echo '投稿者2のヘッドイメージ' ; break;
case "3": echo '投稿者3のヘッドイメージ' ; break;
case "4": echo '投稿者4のヘッドイメージ' ; break;
default: echo 'そのほかの場合のヘッドイメージ'; break;
} ?>
<?php /* カテゴリが1,2の場合の記事表示 */if (in_category('1')||in_category('2')): ?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post() ; ?>
<?php the_content(); ?>
<?php endwhile; else: ?>
no content
<?php endif; ?>
<?php /* カテゴリが1,2以外の記事場合 */else: ?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post() ; ?>
<h2 class="<?php switch ($author) {
case "2": echo '投稿者2の場合でカテゴリ1,2以外の場合のループ内ヘッドカラー' ; break;
case "3": echo '投稿者3の場合でカテゴリ1,2以外の場合のループ内ヘッドカラー' ; break;
case "4": echo '投稿者4の場合でカテゴリ1,2以外の場合のループ内ヘッドカラー' ; break;
default: echo 'その他のヘッドカラー' ; break;
} ?>"><?php the_title(); ?></h2>
<?php the_content(); ?>
<?php endwhile; else: ?>
no content
<?php endif; ?>
<?php endif; ?>
link_pageで吐き出すURLに各IDを渡すのは難しそうなので、
URLから判別をかけなくても記事デザインを判別できるようにしたいかんじなんですが、、
うーん難しい。。。
失礼しました。get_the_author_ID()が使えるのはループ内だけですね。
シングルページのループ外なら、$post->post_author を参照すればOKだと思います。
試してませんが、以下のような感じでどうでしょうか。
$author_id = $post->post_author;
$categories = get_the_category();
$cat_id = $categories[0]->term_id;
header.php 内でも使えるはずです。
global $author_id, $cat_id;
echo "author: $author_id, category: $cat_id";
>>yoshiさん
ありがとうございます
global $author_id, $cat_id;
echo "author: $author_id, category: $cat_id";
こちらどのように使うのかいまいち解らなかったのですが、headerに教えていただいたものを記述したところカテゴリ別に表示分けができるようになりました。
ループの外で判別するにはどうすればいいんだろうという疑問がやっと解決です。。
正直半分ぐらい理解できないままできたかんじなので改めて
phpの参考書とにらめっこしてみようと思います。
どうもありがとうございました!