サポート » テーマ » 投稿ユーザーごとの記事に背景画像を変えたい

  • 解決済 ktarrow

    (@ktarrow)


    初めまして、質問させていただきます。

    投稿ユーザーが複数人いまして、そのユーザーIDや、ニックネームなどを取得して、違った背景画像をユーザー別に記事ごとに表示したいと考えてます。

    phpは、よくわかりませんが、何とか自作でテーマを作れたレベルの技術です。
    div classなどの開始タグを数個、ユーザーIDなどで分岐することは可能でしょうか。

    よろしくお願いいたします。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • Codex はご覧になりましたか?

    記事ごとに違う class 属性を付与する場合でしたら、 the_author_ID() が使えます。
    WordPress Codex 日本語版の「テンプレートタグ/the_author_ID」のページにサンプルが載っています。

    # ニックネームは日本語である可能性があるので XHTML の class 属性としては使えませんし、
    # 各ユーザーが任意に変更できるので、テーマをカスタマイズする側としてはやりにくいと思います。

    トピック投稿者 ktarrow

    (@ktarrow)

    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’) ) { ?>のようにしても、
    うまく分岐してくれませんでした。

    トピック投稿者 ktarrow

    (@ktarrow)

    <?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 ですね。ご参考までに。

    トピック投稿者 ktarrow

    (@ktarrow)

    mizubeさま

    ありがとうございます!!

    まさに、望んでいた通りの結果に感涙です。

    つたない説明から求める技術を提供していただき、ありがとうございました!

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「投稿ユーザーごとの記事に背景画像を変えたい」には新たに返信することはできません。