なんだかよくわからないタイトルですが…
複数の会員がお知らせを投稿するサイトで、会員情報のページをカスタム投稿タイプで作成して、Advanced Custom Fields (ACF) プラグインを使ってこのカスタム投稿タイプの投稿(会員ページ)をユーザーに紐つけ、お知らせの一覧やシングルページにはカスタム投稿タイプで作成した会員ページのタイトル(会員名)とパーマリンク を、会員ページにはその会員を紐つけたユーザーが投稿したお知らせの一覧を取得して表示するということです。

ユーザープロフィールに ACF で各種フィールドを追加して、ユーザーアーカイブページで会員情報を表示するのが標準的で簡単な手法かと思いますが、今回ユーザー自身に標準のプロフィール項目以外を編集させたくないということで、カスタム投稿タイプで会員ページを作成することにしました。

また、多くのカスタムフィールドを追加するので、プロフィール画面より投稿画面の方が見やすいというのもありますし、標準のユーザーアーカイブを使わないので、URL からユーザー名がわかってしまうというセキュリティ上の問題も回避できます。

まず、会員情報を表示するページをカスタム投稿タイプで作ります。カスタム投稿名を「会員情報」、スラッグを「member」とし、タイトルに会員名を入力するようにし、ACF を使って会員情報を登録するための多くのカスタムフィールドを設定しています。

次に、このカスタム投稿タイプの投稿(会員ページ)とユーザープロフィールを紐つけるため、ユーザープロフィールに一つだけ、カスタム投稿タイプの投稿を指定するカスタムフィールドを追加します。逆(カスタム投稿タイプにユーザーを指定するフィールドを追加)でもいいのですが、今回は必ずしも全ての会員がユーザー権限を持つわけではないので、ユーザー側で指定するようにしました。

このカスタムフィールドのフィールド名を「user_member」とし、フィールドタイプを「投稿オブジェクト」、投稿タイプを「会員情報」で絞り込み、返り値のフォーマットは「投稿ID」とします。「投稿オブジェクト」を使うことにより、ユーザープロフィール画面では会員情報の一覧から会員名(タイトル)を選択するので、手入力による打ち間違いも防止できます。

これで準備完了。続いてテーマの編集です。

まず、お知らせの投稿一覧やシングルページに、ユーザーに紐つけたカスタム投稿タイプ(会員情報)の投稿IDから、タイトル(会員名)と会員ページへのパーマリンクを表示します。

通常、ACF のカスタムフィールドを取得する場合は、get_field('custom-field-name') で取得できますが、ユーザープロフィールやタクソノミーに追加したカスタムフィールドの場合はこれでは取得できません。
ユーザーの場合は get_field('custom-field-name', 'user_(ユーザーID)')
タクソノミーの場合は get_field('custom-field-name', '(タクソノミースラッグ)_(タームID)')
のように記述する必要があります。今回はユーザーのカスタムフィールドなので、投稿者のユーザーIDが必要です。

single.php

<?php
$author_id = get_the_author_meta('ID');
$member_id = get_field('user_member', 'user_'. $author_id);
echo '<p class="memberPage"><a href="'. get_the_permalink($member_id). '">'. get_the_title($member_id). 'の紹介ページへ</a></p>'. "\n";
?>

次に、カスタム投稿タイプ(会員情報)で作成した会員ページに、その投稿IDを紐つけたユーザーによる投稿の一覧を表示します。

カスタム投稿タイプにユーザーを指定するフィールドを追加した場合は簡単にユーザーを特定できますが、今回は逆なので随分悩みました。

get_users() でユーザーの一覧を取得し、その中から該当するユーザーを特定しています。

single-member.php

<?php
$post_id = get_the_ID();  // カスタム投稿の投稿ID…(1)
$author = 1;  // 投稿者ユーザーが存在しない場合、暫定的に管理者のIDを設定

$users = get_users('role=author');  // 投稿者ユーザーの一覧を取得
foreach ( $users as $user ){
  $member_id = get_field('user_member', 'user_'. $user->ID);  // カスタムフィールドで取得した投稿ID…(2)

  // (1)と(2)の投稿IDが一致したユーザーのIDを取得
  if ( $member_id === $post_id ){
    $author = $user->ID;
  }
}

// ユーザーの投稿一覧を表示
$args = array(
  'post_type' => 'post',
  'author' => $author,
  'post_status' => 'publish',
  'posts_per_page' => -1
);
$my_query = new WP_Query( $args );
if ( $my_query -> have_posts() ):
?>
<section class="fromMember">
<h2><?php the_title(); ?>からのお知らせ</h2>
<ul>
<?php
  while ( $my_query -> have_posts() ): $my_query -> the_post();
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php
  endwhile;
?>
</ul>
</section>
<?php
endif;
?>

全ての投稿者ユーザーの一覧を取得して、その中から条件に一致するユーザーを探し出しているので、ユーザー数が多い場合はパフォーマンスが落ちるかも。

その場合、運用が二度手間になりますが、カスタム投稿タイプにもユーザーを指定するフィールドを追加し、相互に紐つけるようにした方がいいかもしれません。

(2020年8月18日追記)
カスタム投稿タイプ(会員情報)の投稿IDと紐つけたユーザーが存在しない場合に、全てのユーザーの記事が表示されるのを回避するため、single-member.php のコードに、投稿者ユーザーが存在しない場合に暫定的に管理者のユーザーIDを設定する記述を追記しました。