Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save naranissin/11078ae48537f2348445 to your computer and use it in GitHub Desktop.
Save naranissin/11078ae48537f2348445 to your computer and use it in GitHub Desktop.
/////////以下、function.phpへの追記箇所///////////
//出欠確認
add_filter('the_content', 'join_check');
function join_check($content){
//選択肢をここで設定
$key_select = array("参加","保留","不参加");
$ret="";
//ログインしてないユーザーには表示しない
if(is_user_logged_in()){
global $user_identity,$post;
//カスタムフィールドからデータを読み込む
$join_data = unserialize(get_post_meta($post->ID,'join_meta',true));
$comment_data = unserialize(get_post_meta($post->ID,'comment_meta',true));
//送信ボタンを押したときの処理(各カスタムフィールドを更新する)
if($_POST['select_join_'.$post->ID]){
//出欠登録
$join_data[$user_identity] = $_POST['select_join_'.$post->ID];
$join_s = serialize($join_data);
update_post_meta($post->ID, 'join_meta', $join_s);
//コメント登録
$comment_data[$user_identity] = $_POST['comment'];
$comment_s = serialize($comment_data);
update_post_meta($post->ID, 'comment_meta', $comment_s);
}
//出欠の回答ごとにグループ分けをして
//出力内容を連想配列に格納。
foreach((array)$join_data as $key => $value){
foreach($key_select as $key_group){
if($value == $key_group){
$flag = 0;
foreach($comment_data as $key2 => $value2){
if($key2 == $key){ //joinとcommentのユーザ名が一致したとき
if($value2){ //コメントがあればTRUE
//出力内容(名前とコメント)を格納
$group[$key_group][] = $key.'<font color="#999999">('.$value2.')</font>';
}else{
//出力内容(名前)を格納
$group[$key_group][] = $key;
}
$flag=1;
}
}
if($flag == 0){$group[$key_group][] = $key;};
}
}
}
///////OUT PUT////////
//カテゴリが"出欠確認"の場合のみ表示する
if(in_category('ここにカテゴリを記入')){
//出欠確認フォーム
$ret .= '<ul>';
$ret .= '<br><form method="POST">';
$ret .= '<input type="hidden" value="join_check" >';
$ret .= '<select name="select_join_'.$post->ID.'">';
foreach($key_select as $key_option){
$ret .= '<option value="' . $key_option . '"';
if($join_data[$user_identity] == $key_option){
$ret .= 'selected';
}
$ret .='>' . $key_option . '</option>';
}
$ret .= '</select>';
$ret .= ' <small>コメント</small>:<input type="text" name="comment" value="'.$comment_data[$user_identity].'" size="30"/>';
$ret .= '<input type="submit" value="投稿">';
$ret .= '</form>';
//出欠回答状況
$ret .='<table><tr><td>';
//回答ごとにループ
$grp_no = 0;
foreach($key_select as $key_title){
$grp_no++;
//回答ごとの人数をカウント
$ninzu_count = 0;
foreach((array)$group[$key_title] as $group_user){
$ninzu_count++;
}
$ret .= '<div class="join_group join_no_' . $grp_no . ' "style="margin:0px 0px 0px 0px;">';
$ret .= '<b>'. $key_title . '('.$ninzu_count.')</b><br/>';
$ret .= '<font size="2">';
//ユーザごとにループ
$ret .='<ul>';
$flag = 0;
$str_count = 0;
foreach((array)$group[$key_title] as $group_user){
if($flag ==1){
$ret .= ', ';
$str_count += 3;
}
//一行あたりの文字数が多すぎるときの改行処理。
//文字長45文字以上でコメントありと判定して
//HTMLタグ分の41文字を文字数から差し引く
//文字長が$max_strを超えたら改行処理
$str_len = strlen($group_user);
$str_count += $str_len;
if($str_len > 45){
$str_count -= 41;
$str_len -= 41;
}
$max_str = 93;
if($str_count > $max_str){
$ret .='<br/>';
$str_count = $str_len;
}
//名前、コメントを出力
$ret .= $group_user;
//一行あたりの文字数が異常に多いときにもう一度改行
if($str_len > $max_str){
$ret .='<br/>';
$str_count = 0;
}
$flag = 1;
}
$ret .='</ul>';
$ret .='</font><br/>';
}
$ret .= '</td></tr></table></ul>';
}
}
return $content . $ret;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment