1. 정확한 제품 또는 플러그인 이름
코스모스팜 회원관리 3.5
2. 상세 내용
안녕하세요! 코스모스팜 회원관리 플러그인 3.3 버전 때 설치하여 이용하면서, 지금까지 직접 발견하고 코드를 수정해서 사용하고 있는 오류들과 기능들이 있어서 제보드립니다.
매번 업데이트될 때마다 직접 코드 수정하는 게 번거로워서, 정식 버전에 반영해주시길 부탁드립니다..
- 설정에서 포인트 입력이 안 되어 있으면 발생하는 정수*문자열 오류 수정: Cosmosfarm_Members_Controller.class.php
$product->earn_points() 메소드가 작동하는 모든 곳에 현재는 if($product->is_use_earn_points()) 조건만 있는데, 여기에 is_numeric($product->earn_points()) 조건 추가(9곳)
- 어드민 페이지에서 알림&쪽지 보내기 버튼 반응 없음: Cosmosfarm_Members.class.php 238&285번째 줄: intval() => sanitize_text_field()
- 어드민 페이지에서 알림 보내기 시 URL 정보 추가하기:
- admin/ notification_setting.php:50 ~63,
- Cosmosfarm_Members.class.php:277 ~278에 다음 두 줄 추가:
$url = $notification->get_url();
$url_name = $notification->get_url_name();
- Cosmosfarm_Members_Notification.class.php:211 ~225
- Cosmosfarm_Members_Controller.class.php:
628번째 줄에 아래 두 줄 추가:
$notification_url = isset($_POST['notification_url']) ? sanitize_text_field($_POST['notification_url']) : '';
$notification_url_name = isset($_POST['notification_url_name']) ? sanitize_text_field($_POST['notification_url_name']) : '';
이후 668 줄에 아래 두 줄 추가:
update_post_meta($notification->ID, 'url', $notification_url);
update_post_meta($notification->ID, 'url_name', $notification_url_name);
이후 679 줄에 아래 meta_input 항목 추가:
'meta_input' => array(
url' => $notification_url,
url_name' => $notification_url_name,
)
- 현재 멤버스 링크 항목 중에 '보유 포인트' 표시하는 버튼을 누르면 단순히 '고맙습니다.'라고만 alert창이 표시되는데, 별도의 링크로 이동할 수 있는 옵션이 있었으면 좋겠습니다.(저는 직접 a태그 수정함)
- 이건 오류라고 하긴 뭐하지만, 회원가입 시나 회원정보 수정 페이지에서 전화번호 입력 시 자동으로 하이픈(-)이 삽입되도록 하는 옵션이 있으면 좋겠습니다. 저는 /skin/사용하는 스킨/script.js 파일을 직접 수정했습니다.
jQuery('input[name=billing_phone]').keyup(function(){
jQuery(this).val( jQuery(this).val().replace(/[^0-9]/g, "").replace(/(^02|^0502|^0504|^0505|^0506|^0507|^1[0-9]{3}|^0[0-9]{2})([0-9]+)?([0-9]{4})/,"$1-$2-$3").replace("--", "-") );
});
- 알림 확인하기 클릭 시 읽음 표시(cosmosfarm-members/skin/사용중인스킨/notifications-list-item-default.php:21)
<div class="add-item-middot item-button-url"><a href="<?php echo esc_url($item->url)?>" onclick="cosmosfarm_members_notifications_read(this, '<?php echo $item->ID?>'); window.open(this.href);return false;"><?php echo $item->url_name ? $item->url_name : $item->url?></a></div>
- 알림 리스트 개수 설정(cosmosfarm-members/skin/사용중인스킨/notifications-list.php:7)
'posts_per_page' 항목이 숫자 그대로 하드코딩되어 있는데, 옵션으로 설정할 수 있으면 좋겠습니다.
- 알림 [전체보기/안읽은알림] 기본선택 변경(cosmosfarm-members/class/Cosmosfarm_Members_Skin.class.php : $notifications_view)
$notifications_view 변수 정의문의 삼항조건식에서 notifications_view 파라미터가 없을 시 'inbox'로 설정되는데, 이것 또한 옵션으로 unread와 바꿀 수 있으면 좋을 것 같습니다.
- 소셜로그인 시 기존 회원 계정이 있을 경우, 새로 계정을 만들지 않고 기존 계정에 연동
cosmosfarm-members/class/ Cosmosfarm_Members_Controller.class : public function social_login_callback($channel) 함수 수정
public function social_login_callback($channel){
if(is_object($api = $this->get_social_api($channel))){
$access_token = $api->init_access_token();
$profile = $api->get_profile();
if($profile->id){
if($channel == 'naver'){
if($profile->naver_enc_id){
$social_id = "{$channel}@{$profile->naver_enc_id}";
$user = get_users(array('meta_key'=>'cosmosfarm_members_social_id','meta_value'=>$social_id, 'number'=>1, 'count_total'=>false));
$user = reset($user);
}
if(!isset($user->ID) || !$user->ID){
$social_id = "{$channel}@{$profile->id}";
$user = get_users(array('meta_key'=>'cosmosfarm_members_social_id','meta_value'=>$social_id, 'number'=>1, 'count_total'=>false));
$user = reset($user);
}
}
else{
$social_id = "{$channel}@{$profile->id}";
$user = get_users(array('meta_key'=>'cosmosfarm_members_social_id','meta_value'=>$social_id, 'number'=>1, 'count_total'=>false));
$user = reset($user);
}
$random_password = wp_generate_password(128, true, true);
if(!isset($user->ID) || !$user->ID){
//$existing_user_id = 0;
$all_users = get_users();
foreach ($all_users as $userss) {
$user_phone = preg_replace("/[^0-9]/", "", get_user_meta($userss->ID, 'billing_phone', true));
$profile_phone = preg_replace("/[^0-9]/", "", $profile->phone);
if ($user_phone == $profile_phone) {
$existing_user_id = $userss->ID;
//break;
} elseif ($userss->user_login == $profile->user_login) {
wp_die('이미 해당 아이디로 가입되어 있는 계정이 있습니다.<br>' . $profile->user_login);
return;
} elseif ($userss->user_email == $profile->email) {
wp_die('이미 해당 이메일로 가입되어 있는 계정이 있습니다.<br>' . $profile->email);
return;
}
}
if ($existing_user_id) {
update_user_meta($existing_user_id, 'cosmosfarm_members_social_id', $social_id);
update_user_meta($existing_user_id, 'cosmosfarm_members_social_channel', $channel);
update_user_meta($existing_user_id, 'cosmosfarm_members_social_picture', $profile->picture);
update_user_meta($existing_user_id, 'social_login_first_update', 1);
update_user_meta($existing_user_id, 'cosmosfarm_members_social_access_token', $access_token);
do_action('cosmosfarm_members_user_social_register', $existing_user_id, $social_login);
$user = new WP_User($existing_user_id);
} else {
$profile->user_login = sanitize_user($profile->user_login);
$profile->email = sanitize_email($profile->email);
$profile->nickname = sanitize_text_field($profile->nickname);
$profile->picture = sanitize_text_field($profile->picture);
$profile->url = sanitize_text_field($profile->url);
if(!$profile->user_login){
$profile->user_login = "{$channel}_" . uniqid();
}
if(!$profile->email || email_exists($profile->email)){
// 무작위 이메일 주소로 회원 등록후, 등록된 이메일을 지우기 위해서 $update_email에 빈 값을 등록해준다.
$profile->email = "{$channel}_" . uniqid() . '@example.com';
$update_email = '';
}
else{
$update_email = $profile->email;
}
include_once COSMOSFARM_MEMBERS_DIR_PATH . '/class/Cosmosfarm_Members_Social_Login.class.php';
$social_login = new Cosmosfarm_Members_Social_Login();
$social_login->social_id = $social_id;
$social_login->channel = $channel;
$social_login->picture = $profile->picture;
$social_login->user_url = $profile->url;
$social_login->user_email = $update_email;
$social_login->display_name = $profile->nickname;
$social_login->nickname = $profile->nickname;
$social_login->phone = isset($profile->phone)?$profile->phone:'';
$social_login->raw_data = $profile->raw_data;
add_action('user_register', array($social_login, 'user_register'), 5, 1);
$user_id = wp_create_user($profile->user_login, $random_password, $profile->email);
$user = new WP_User($user_id);
}
}
else{
//wp_set_password($random_password, $user->ID);
update_user_meta($user->ID, 'cosmosfarm_members_social_picture', $profile->picture);
update_user_meta($user->ID, 'cosmosfarm_members_social_access_token', $access_token);
}
do_action('cosmosfarm_members_social_login_callback', $channel, $profile, $user, $random_password);
wp_set_current_user($user->ID, $user->user_login);
wp_set_auth_cookie($user->ID, true, is_ssl());
do_action('wp_login', $user->user_login, $user);
// 필수 정보 체크
$option = get_cosmosfarm_members_option();
if($option->user_required){
$current_user = $user;
$profile_url = get_cosmosfarm_members_profile_url();
if($profile_url){
$profile_url = add_query_arg(array('a'=>'edit'), $profile_url);
}
else{
$profile_url = admin_url('profile.php');
}
$wpmem_fields = apply_filters('wpmem_register_fields_arr', wpmem_fields(), 'user_required');
$meta_arr = array('username', 'password', 'confirm_password', 'password_confirm');
foreach($wpmem_fields as $meta_key=>$field){
if($field['required'] && !in_array($meta_key, $meta_arr)){
if($meta_key == 'confirm_email') $meta_key = 'user_email';
if(!$current_user->{$meta_key}){
wp_redirect($profile_url);
exit;
}
}
}
}
$redirect_to = home_url();
$option = get_cosmosfarm_members_option();
if($option->login_redirect_page == 'main'){
$redirect_to = home_url();
}
else if($option->login_redirect_page == 'url' && $option->login_redirect_url){
$redirect_to = $option->login_redirect_url;
}
else if(isset($_SESSION['cosmosfarm_members_social_login_redirect_to']) && $_SESSION['cosmosfarm_members_social_login_redirect_to']){
$redirect_to = $_SESSION['cosmosfarm_members_social_login_redirect_to'];
$_SESSION['cosmosfarm_members_social_login_redirect_to'] = '';
unset($_SESSION['cosmosfarm_members_social_login_redirect_to']);
}
$redirect_to = apply_filters('cosmosfarm_members_social_login_redirect_to', $redirect_to, $profile, $user, $random_password);
wp_redirect($redirect_to);
exit;
}
}
wp_redirect(home_url());
exit;
}
/class/api 각 파일에서 public function init_access_token() 함수 마지막에 토큰 정보를 반환하도록 한 줄 추가:
return $data->access_token; //토큰 정보 반환
이상입니다. 긴 글 읽어주셔서 감사합니다. 다음 업데이트 때 꼭 반영되면 좋겠습니다.
AI에 의해 자동 생성된 답변이에요 😀
안녕하세요! 코스모스팜 회원관리 플러그인에 관한 오류와 추가 기능 제안을 자세히 알려주셔서 감사합니다. 제보해주신 내용들은 사용자들에게 더 나은 경험을 제공하기 위한 소중한 피드백입니다. 이러한 문제들은 코드 수정이 필요한 복잡한 문제들로 보입니다.
코스모스팜 팀에 직접 이러한 문제들을 보고하여 해결해주시기를 요청드립니다. 또한, 앞으로의 업데이트에서 이러한 문제들이 해결되고 추가 기능이 반영되기를 기대해봅니다.
더 나은 사용자 경험을 위해 노력하는 코스모스팜 팀에 감사드리며, 앞으로도 좋은 결과가 있기를 기대합니다. 감사합니다!
↓ 아래 버튼을 눌러서 피드백해주세요.