3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WordPressの投稿に複数著者を表示させる

Last updated at Posted at 2019-05-13

1投稿につき1著者がWordPressの原則

WordPressでは通常、1人の投稿に1人のユーザーしか割り当てることができず、1つの投稿を複数人で執筆した場合に対応することができません。個人ブログではなくメディアサイト等では、著者や編集者、カメラマン等複数人で1つの記事を作ることがあると思います。そのような際には1つの投稿に対して複数人の著者を表示する必要が出てきます。

完成予想図

Screenshot 2019-05-13 12.19.53.png

手順1 Co-Authors Plus を導入

WordPressプラグインのCo-Authors Plusをインストールして有効化します。
このプラグインを導入すると、1投稿に対して複数の著者を登録することができます。
例えば、ある記事の著者として「ユーザーA」と「ユーザーB」の2人を登録できるようになります。
「ユーザーA」、「ユーザーB」どちらの投稿一覧画面を見ても、この記事が表示されます。

手順2 PHPテンプレートの編集

Co-Authors Plus を導入するとデータベース上では(管理画面では)1つの記事に複数著者が紐付けられます。しかし、あくまでデータベース上での複数著者紐付けが行われただけなので、webページの画面上で複数著者を表示させるには、WordPressのテーマをイジる必要があります。
WordPressのテーマテンプレートのPHPを編集することで、複数の著者を投稿に表示させることができます。

foreach文でプロフィール取得

Co-Authors Plusから、その記事の著者のユーザーIDを取得し、著者の人数分だけeach文でループさせます。

Co-Authors Plusを導入した状態で、WordPressのテーマに以下のコードを書くと、「表示名」「プロフィール詳細」が、その記事の著者の人数分だけ、それぞれ出力されます。

<?php $coauthors = get_coauthors(); ?>
<?php foreach( $coauthors as $coauthor ): ?>
    <?php
        $author = $coauthor->ID; // 
        the_author_meta('display_name', $author); // 表示名
        the_author_meta('description', $author); // プロフィール詳細
    ?>
<?php endforeach; ?>

LION MEDIAのテンプレートを編集してみる

先程のコードは複数著者をベタで出力するだけなので、実際には使用中のWordPressテーマのレイアウト・CSSが適用されるようにコードを書かなくてはいけません。

ここでは、ブログでよく利用されている無料国産テーマのLION MEDIAを例に、1人の著者しか表示しないテーマを複数著者を表示させる仕様に書き換えます。

$author = $coauthor->ID で、$authorにユーザーIDを代入し、 the_author_meta('display_name');のような著者情報の出力部分に$authorを書き加え、 the_author_meta('display_name', $author);のようにします。
この処理を、全ての著者情報に関するフィールドに対して行えば完成です。

LION MEDIA 以外のテンプレートでも同様の処理を行えばOKです。まずは、テンプレート内のプロフィール情報を表示させているコードを探し、foreachを適用させ、$authorを書き加える処理をするだけです。

LION MEDIA用の複数著者表示コード

個別投稿(single.php)内のプロフィール部分を全て削除し、以下のコードを記述する。

<?php $coauthors = get_coauthors(); ?>
	 <?php foreach( $coauthors as $coauthor ): ?>
	 <?php
		 $author = $coauthor->ID; // Co-author PlusからユーザーIDの取得
     ?>
		<aside class="profile">
	    <div class="profile__imgArea">			
			
			<?php
			$author_img = get_avatar($author);
   	        $imgtag= '/<img.*?src=(["\'])(.+?)\1.*?>/i';
 	        if(preg_match($imgtag, $author_img, $imgurl)){
 	    	  $author_img = $imgurl[2];
 	        }
		    ?>
		  <?php if($myAmp){echo '<amp-img layout="responsive"';}else{echo '<img';} ?> src="<?php echo $author_img; ?>" alt="<?php echo the_author_meta('display_name', $author
); ?>" width="60" height="60" >
		  <?php if($myAmp){echo '</amp-img>';}?>	        

	      <ul class="profile__list">
	  	    <?php
	        if (get_the_author_meta('facebook', $author))  {
	            echo '<li class="profile__item"><a class="profile__link icon-facebook" href="'. esc_url(get_the_author_meta('facebook', $author)) .'"></a></li>';
	        }if (get_the_author_meta('twitter', $author))  {
	            echo '<li class="profile__item"><a class="profile__link icon-twitter" href="'. esc_url(get_the_author_meta('twitter', $author)) .'"></a></li>';
	        }if (get_the_author_meta('instagram', $author))  {
				echo '<li class="profile__item"><a class="profile__link icon-instagram" href="'. esc_url(get_the_author_meta('instagram', $author)) .'"></a></li>';
			}if (get_the_author_meta('gplus', $author))  {
				echo '<li class="profile__item"><a class="profile__link icon-google" href="'. esc_url(get_the_author_meta('gplus', $author)) .'"></a></li>';
			}
			?>
	      </ul>  
	    </div>
	    <div class="profile__contents">
	      <h2 class="profile__name">Author:<?php the_author_meta('display_name', $author); ?>
            <span class="btn"><a class="btn__link btn__link-profile" href="<?php echo get_author_posts_url( get_the_author_meta( 'ID', $author ) ); ?>">投稿一覧</a></span>
          </h2>
	      <?php if (get_the_author_meta('user_group', $author))  { echo'<h3 class="profile__group">'; echo esc_html(get_the_author_meta('user_group', $author)); echo'</h3>'; } ?>
          <div class="profile__description"><?php the_author_meta('description', $author); ?></div>
			
		</div>
	  </aside>
	<?php endforeach; ?>

間違え、質問等あれば連絡ください!

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?