概要
直近の案件で、サイト内の申し込み一覧ページにおいて、「ログインユーザが申し込み済のフォームが紐づいているブロックは色を変更するなどして一目でわかるようにしてほしい」と要望があり、対応しました。
申し込み一覧ページの仕様
・各お申し込みフォームはMW WP Formを使用
・「申し込み」カスタム投稿を作成、各投稿の編集画面から、作成した各お申し込みフォームのショートコード
・申し込み一覧ページに「申し込み」各投稿を一覧表示
申し込み済のフォームを判定する実装
・お問い合わせ内容をデータベースに保存する設定にする。
・問い合わせると、ユーザIDは問い合わせデータベースに必ず入る。
・問い合わせデータはpost_type=’mwf_xxx’で登録されるので、「申し込み」各投稿のショートコードmwform_formkey key=”xxx”からxxxを抽出し、ユーザIDをもとにpost_type=’mwf_xxx’のデータが1件以上あれば問い合わせ済と見なす。
以下を申し込み一覧ページに実装しました。
<?php
$currentUser = wp_get_current_user(); // ログイン中のユーザーのオブジェクト取得
$currentUser_ID = $currentUser->ID; // ログイン中のユーザーのID
?>
<!-- 1回以上お問い合わせ済のフォームのブロックはグレーのボーダーで囲む -->
<!-- the_content()で表示するコンテンツをテキストで取得 -->
<?php $content = get_the_content(); ?>
<!-- 投稿にmwwpformのショートコードがあったら -->
<?php if(strpos($content,'mwform_formkey') !== false){
$formkey = preg_replace('/[^0-9]/', '', $content);
$mwf = 'mwf_' . $formkey;
?>
<?php
$get_posts = get_posts( 'post_type=' . $mwf . '&posts_per_page=100&author=' . $currentUser_ID );
if( $get_posts ) {
?>
<a href="<?php echo get_permalink(); ?>" class="documentLink" style="border-color: #333333;">
<?php
} else {
?>
<a href="<?php echo get_permalink(); ?>" class="adocumentLink">
<?php
}
?>
<?php } else { ?>
<a href="<?php echo get_permalink(); ?>" class="documentLink">
<?php } ?>
実装の注意点
・お問い合わせ内容をデータベースに保存する設定のチェックが入っていないと、当然実装しても無駄になってしまいますので、忘れずに。
お問い合わせデータを抽出して判定するような実装の参考になれば幸いです。