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

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

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

#### 完成予想図
<img width="820" alt="Screenshot 2019-05-13 12.19.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308560/d760451e-39e2-bf9d-1bb4-5728fbc7a166.png">


## 手順1 Co-Authors Plus を導入
WordPressプラグインの[Co-Authors Plus](https://ja.wordpress.org/plugins/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](http://lionmedia.fit-jp.com/)を例に、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; ?>
```



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