投稿ユーザーごとの記事に背景画像を変えたい
-
Codex はご覧になりましたか?
記事ごとに違う class 属性を付与する場合でしたら、 the_author_ID() が使えます。
WordPress Codex 日本語版の「テンプレートタグ/the_author_ID」のページにサンプルが載っています。# ニックネームは日本語である可能性があるので XHTML の class 属性としては使えませんし、
# 各ユーザーが任意に変更できるので、テーマをカスタマイズする側としてはやりにくいと思います。mizubeさま
ご返信ありがとうございます!
はい、出力は出来るのですが、それをどうやって分岐させたらいいのかがわかりません。
例えば、カテゴリーで分岐させる場合は、
<?php if ( in_category(‘3’) ) { ?>
<div class=”post-cat-three”>
<?php } else { ?>
<div class=”post”>
<?php } ?>
このようにdiv classを分岐するようなのですが、
ユーザーIDの場合、<?php if ( the_author_ID(‘3’) ) { ?>のようにしても、
うまく分岐してくれませんでした。<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
このような記事のループ内で、以下のように記述してみましたが、<?php if ( the_author_ID('1')): ?> 1 <?php elseif ( the_author_ID('2')): ?> 2 <?php elseif ( the_author_ID('3')): ?> 3 <?php else: ?> その他 <?php endif; ?>
ユーザー毎の記事は判別してるようなのですが、
ユーザーIDが3の場合「333その他」と表示されてしまい。
うまく表示されませんでした。the_author_ID() はループ内における現在の投稿の投稿者の ID を echo するだけですので、当然そのような結果になりますね。
the_author_ID() を直接クラス名の一部として使えば、わざわざ分岐させる必要はありません。
以下のように直接 div の class 属性に埋め込めば、 author ごとに個別の class 属性のついた div 要素になります。<div class="post author-<?php the_author_ID(); ?>"></div>
このテンプレートの出力結果は、たとえばユーザー ID が 2 のユーザーの投稿の場合は
<div class="post author-2"></div>
となり、ユーザー ID が 5 のユーザーの投稿の場合は
<div class="post author-5"></div>
となります。このボックスの背景画像や、子孫要素のスタイルを変えるだけならこれで十分です。
/* style.css */ .post { background: #fff none center center repeat scroll; } .author-1 { background-image: url(bg/author-1.png); } .author-2 { background-image: url(bg/author-2.png); } .author-3 { background-image: url(bg/author-3.png); } .author-4 { background-image: url(bg/author-4.png); } .author-5 { background-image: url(bg/author-5.png); }
一方、class 属性だけではなく、 HTML の生成内容そのものを分けたい場合は分岐させる必要がありますが、その場合は値を echo しないで return する get_the_author_ID() が使えます。
<?php if ( get_the_author_ID() == 2 ) : ?> <div class="post tarou"> <h2>太郎: <?php the_title(); ?></h2> <div class="textBody"> <?php the_content( '続きを読む...' ); ?> </div> </div> <?php elseif ( get_the_author_ID() == 5 ) : ?> <div class="post hanako"> <h2>花子: <?php the_title(); ?></h2> <div class="textBody"> <?php the_content( '続く&heart;' ); ?> </div> <?php if ( $kibun = get_post_meta( $post->ID, '今の気分', true ) ) : ?> <dl class="meta"> <dt>今の気分</dt> <dd><?php echo $kibun; ?></dd> </dl> <?php endif; ?> </div> <?php else: ?> <div class="post"> <h2>その他: <?php the_title(); ?></h2> <div class="excerpt"> <?php the_excerpt(); ?> </div> </div> <?php endif; ?>
ktarrow さんの試されたコードでは
if ( the_author_ID('1') )
などとされていますが、 the_author_ID() や get_the_author_ID() に値を渡しても意味はないので注意してください。
get_the_author_ID() は true や false ではなく、ループ内における現在の投稿の投稿者の ID を返しますので、分岐の際は、if ( get_the_author_ID() == 1 )
というように get_the_author_ID() が返す値と数値を比較する必要があります。うっかり二重投稿してしまったので代わりに補足します。
実は WordPress のテンプレートタグで the_ からはじまるものの多くは (一部例外があります) 、 get_the_ からはじまる対応した関数の返り値を echo するだけだったりします。
wp-includes/****-template.php という名前のファイルを開いて見てみると、他にどんなテンプレートタグがあり、どんな値を返すのか調べることが出来ます。 Author タグの場合は wp-includes/author-template.php ですね。ご参考までに。
- トピック「投稿ユーザーごとの記事に背景画像を変えたい」には新たに返信することはできません。