<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
	<channel>
				<title><![CDATA[코스모스팜 회원관리 몇가지 오류와 해결코드, 추가기능 제안]]></title>
		<link>https://www.cosmosfarm.com/threads/rss/document/71014</link>
		<description><![CDATA[<p>1. 정확한 제품 또는 플러그인 이름</p>

<p>코스모스팜 회원관리 3.5</p>

<p> </p>

<p>2. 상세 내용</p>

<p>안녕하세요! 코스모스팜 회원관리 플러그인 3.3 버전 때 설치하여 이용하면서, 지금까지 직접 발견하고 코드를 수정해서 사용하고 있는 오류들과 기능들이 있어서 제보드립니다.</p>

<p>매번 업데이트될 때마다 직접 코드 수정하는 게 번거로워서, 정식 버전에 반영해주시길 부탁드립니다..</p>

<p> </p>

<p>- 설정에서 포인트 입력이 안 되어 있으면 발생하는 정수*문자열 오류 수정: Cosmosfarm_Members_Controller.class.php<br />
  $product-&gt;earn_points() 메소드가 작동하는 모든 곳에 현재는 if($product-&gt;is_use_earn_points()) 조건만 있는데, 여기에 is_numeric($product-&gt;earn_points()) 조건 추가(9곳)<br />
 </p>

<p>- 어드민 페이지에서 알림&amp;쪽지 보내기 버튼 반응 없음: Cosmosfarm_Members.class.php 238&amp;285번째 줄: intval() =&gt; sanitize_text_field()<br />
 </p>

<p>- 어드민 페이지에서 알림 보내기 시 URL 정보 추가하기: <br />
  - admin/ notification_setting.php:50 ~63,<br />
  - Cosmosfarm_Members.class.php:277 ~278에 다음 두 줄 추가:<br />
    $url = $notification-&gt;get_url();<br />
    $url_name = $notification-&gt;get_url_name();<br />
  - Cosmosfarm_Members_Notification.class.php:211 ~225<br />
  - Cosmosfarm_Members_Controller.class.php:<br />
    628번째 줄에 아래 두 줄 추가:<br />
      $notification_url = isset($_POST['notification_url']) ? sanitize_text_field($_POST['notification_url']) : '';<br />
      $notification_url_name = isset($_POST['notification_url_name']) ? sanitize_text_field($_POST['notification_url_name']) : '';<br />
    이후 668 줄에 아래 두 줄 추가:<br />
      update_post_meta($notification-&gt;ID, 'url', $notification_url);<br />
      update_post_meta($notification-&gt;ID, 'url_name', $notification_url_name);<br />
    이후 679 줄에 아래 meta_input 항목 추가:<br />
      'meta_input'   =&gt; array(<br />
        url' =&gt; $notification_url,<br />
        url_name' =&gt; $notification_url_name,<br />
      )<br />
 </p>

<p>- 현재 멤버스 링크 항목 중에 '보유 포인트' 표시하는 버튼을 누르면 단순히 '고맙습니다.'라고만 alert창이 표시되는데, 별도의 링크로 이동할 수 있는 옵션이 있었으면 좋겠습니다.(저는 직접 a태그 수정함)<br />
 </p>

<p>- 이건 오류라고 하긴 뭐하지만, 회원가입 시나 회원정보 수정 페이지에서 전화번호 입력 시 자동으로 하이픈(-)이 삽입되도록 하는 옵션이 있으면 좋겠습니다. 저는 /skin/사용하는 스킨/script.js 파일을 직접 수정했습니다.</p>

<pre>
<code class="language-javascript">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("--", "-") );
  });</code></pre>

<p><br />
- 알림 확인하기 클릭 시 읽음 표시(cosmosfarm-members/skin/사용중인스킨/notifications-list-item-default.php:21)</p>

<pre>
<code class="language-html">&lt;div class="add-item-middot item-button-url"&gt;&lt;a href="&lt;?php echo esc_url($item-&gt;url)?&gt;" onclick="cosmosfarm_members_notifications_read(this, '&lt;?php echo $item-&gt;ID?&gt;'); window.open(this.href);return false;"&gt;&lt;?php echo $item-&gt;url_name ? $item-&gt;url_name : $item-&gt;url?&gt;&lt;/a&gt;&lt;/div&gt;</code></pre>

<p><br />
- 알림 리스트 개수 설정(cosmosfarm-members/skin/사용중인스킨/notifications-list.php:7)<br />
  'posts_per_page' 항목이 숫자 그대로 하드코딩되어 있는데, 옵션으로 설정할 수 있으면 좋겠습니다.<br />
 </p>

<p>- 알림 [전체보기/안읽은알림] 기본선택 변경(cosmosfarm-members/class/Cosmosfarm_Members_Skin.class.php : $notifications_view)<br />
  $notifications_view 변수 정의문의 삼항조건식에서 notifications_view 파라미터가 없을 시 'inbox'로 설정되는데, 이것 또한 옵션으로 unread와 바꿀 수 있으면 좋을 것 같습니다.<br />
 </p>

<p>- 소셜로그인 시 기존 회원 계정이 있을 경우, 새로 계정을 만들지 않고 기존 계정에 연동<br />
  cosmosfarm-members/class/ <a href="https://sidebar.scrapbook.naver.com/memo/Cosmosfarm_Members_Controller.class" target="_blank">Cosmosfarm_Members_Controller.class </a>: public function social_login_callback($channel) 함수 수정</p>

<pre>
<code class="language-php">public function social_login_callback($channel){
		if(is_object($api = $this-&gt;get_social_api($channel))){
			$access_token = $api-&gt;init_access_token();
			$profile = $api-&gt;get_profile();
			
			if($profile-&gt;id){
				if($channel == 'naver'){
					if($profile-&gt;naver_enc_id){
						$social_id = "{$channel}@{$profile-&gt;naver_enc_id}";
						$user = get_users(array('meta_key'=&gt;'cosmosfarm_members_social_id','meta_value'=&gt;$social_id, 'number'=&gt;1, 'count_total'=&gt;false));
						$user = reset($user);
					}
					
					if(!isset($user-&gt;ID) || !$user-&gt;ID){
						$social_id = "{$channel}@{$profile-&gt;id}";
						$user = get_users(array('meta_key'=&gt;'cosmosfarm_members_social_id','meta_value'=&gt;$social_id, 'number'=&gt;1, 'count_total'=&gt;false));
						$user = reset($user);
					}
				}
				else{
					$social_id = "{$channel}@{$profile-&gt;id}";
					$user = get_users(array('meta_key'=&gt;'cosmosfarm_members_social_id','meta_value'=&gt;$social_id, 'number'=&gt;1, 'count_total'=&gt;false));
					$user = reset($user);
				}
				
				$random_password = wp_generate_password(128, true, true);
				
				if(!isset($user-&gt;ID) || !$user-&gt;ID){
					//$existing_user_id = 0;
					$all_users = get_users();
					foreach ($all_users as $userss) {
						$user_phone = preg_replace("/[^0-9]/", "", get_user_meta($userss-&gt;ID, 'billing_phone', true));
						$profile_phone = preg_replace("/[^0-9]/", "", $profile-&gt;phone);
						
						if ($user_phone == $profile_phone) {
							$existing_user_id = $userss-&gt;ID;
							//break;
						} elseif ($userss-&gt;user_login == $profile-&gt;user_login) {
							wp_die('이미 해당 아이디로 가입되어 있는 계정이 있습니다.&lt;br&gt;' . $profile-&gt;user_login);
							return;
						} elseif ($userss-&gt;user_email == $profile-&gt;email) {
							wp_die('이미 해당 이메일로 가입되어 있는 계정이 있습니다.&lt;br&gt;' . $profile-&gt;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-&gt;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-&gt;user_login = sanitize_user($profile-&gt;user_login);
						$profile-&gt;email = sanitize_email($profile-&gt;email);
						$profile-&gt;nickname = sanitize_text_field($profile-&gt;nickname);
						$profile-&gt;picture = sanitize_text_field($profile-&gt;picture);
						$profile-&gt;url = sanitize_text_field($profile-&gt;url);
						
						if(!$profile-&gt;user_login){
							$profile-&gt;user_login = "{$channel}_" . uniqid();
						}
						
						if(!$profile-&gt;email || email_exists($profile-&gt;email)){
							// 무작위 이메일 주소로 회원 등록후, 등록된 이메일을 지우기 위해서 $update_email에 빈 값을 등록해준다.
							$profile-&gt;email = "{$channel}_" . uniqid() . '@example.com';
							$update_email = '';
						}
						else{
							$update_email = $profile-&gt;email;
						}
						
						include_once COSMOSFARM_MEMBERS_DIR_PATH . '/class/Cosmosfarm_Members_Social_Login.class.php';
						$social_login = new Cosmosfarm_Members_Social_Login();
						$social_login-&gt;social_id    = $social_id;
						$social_login-&gt;channel      = $channel;
						$social_login-&gt;picture      = $profile-&gt;picture;
						$social_login-&gt;user_url     = $profile-&gt;url;
						$social_login-&gt;user_email   = $update_email;
						$social_login-&gt;display_name = $profile-&gt;nickname;
						$social_login-&gt;nickname     = $profile-&gt;nickname;
						$social_login-&gt;phone        = isset($profile-&gt;phone)?$profile-&gt;phone:'';
						$social_login-&gt;raw_data     = $profile-&gt;raw_data;
						
						add_action('user_register', array($social_login, 'user_register'), 5, 1);

						$user_id = wp_create_user($profile-&gt;user_login, $random_password, $profile-&gt;email);
						$user = new WP_User($user_id);
					}
				}
				else{
					//wp_set_password($random_password, $user-&gt;ID);
					update_user_meta($user-&gt;ID, 'cosmosfarm_members_social_picture', $profile-&gt;picture);
					update_user_meta($user-&gt;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-&gt;ID, $user-&gt;user_login);
				wp_set_auth_cookie($user-&gt;ID, true, is_ssl());
				do_action('wp_login', $user-&gt;user_login, $user);
				
				// 필수 정보 체크
				$option = get_cosmosfarm_members_option();
				if($option-&gt;user_required){
					$current_user = $user;
					$profile_url = get_cosmosfarm_members_profile_url();
					
					if($profile_url){
						$profile_url = add_query_arg(array('a'=&gt;'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=&gt;$field){
						if($field['required'] &amp;&amp; !in_array($meta_key, $meta_arr)){
							if($meta_key == 'confirm_email') $meta_key = 'user_email';
							if(!$current_user-&gt;{$meta_key}){
								wp_redirect($profile_url);
								exit;
							}
						}
					}
				}
				
				$redirect_to = home_url();
				$option = get_cosmosfarm_members_option();
				
				if($option-&gt;login_redirect_page == 'main'){
					$redirect_to = home_url();
				}
				else if($option-&gt;login_redirect_page == 'url' &amp;&amp; $option-&gt;login_redirect_url){
					$redirect_to = $option-&gt;login_redirect_url;
				}
				else if(isset($_SESSION['cosmosfarm_members_social_login_redirect_to']) &amp;&amp; $_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;
	}</code></pre>

<p>/class/api 각 파일에서 public function init_access_token() 함수 마지막에 토큰 정보를 반환하도록 한 줄 추가:<br />
  return $data-&gt;access_token; //토큰 정보 반환</p>

<p>이상입니다. 긴 글 읽어주셔서 감사합니다. 다음 업데이트 때 꼭 반영되면 좋겠습니다.</p>

<p> </p>]]></description>
		<copyright>Copyright 2026, 코스모스팜</copyright>
				<item>
			<title><![CDATA[안녕하세요~^^

코스모스팜 회원관리 플러그인에 버그와 새로운 기능을 제안해주신 점 너무 감사드립니...]]></title>
			<link>https://www.cosmosfarm.com/threads/document/71023</link>
			<description><![CDATA[<p>안녕하세요~^^</p>

<p>코스모스팜 회원관리 플러그인에 버그와 새로운 기능을 제안해주신 점 너무 감사드립니다. </p>

<p>남겨주신 코드를 확인한 후 버그는 빠른 시일 내에 수정해 보도록 하겠습니다. </p>

<p>그리고 제안 주신 추가 기능은 저희가 내부 회의를 거쳐 필요한 기능이라고 판단이 되면 </p>

<p>다음 업데이트에 적용해 보도록 하겠습니다. </p>

<p>고맙습니다.</p>]]></description>
			<author>스레드봇</author>
			<pubDate>Mon, 18 Nov 2024 00:55:54 +0000</pubDate>
			<category>워드프레스</category>
		</item>
				<item>
			<title><![CDATA[안녕하세요! 코스모스팜 회원관리 플러그인에 관한 오류와 추가 기능 제안을 자세히 알려주셔서 감사합...]]></title>
			<link>https://www.cosmosfarm.com/threads/document/71015</link>
			<description><![CDATA[<p>안녕하세요! 코스모스팜 회원관리 플러그인에 관한 오류와 추가 기능 제안을 자세히 알려주셔서 감사합니다. 제보해주신 내용들은 사용자들에게 더 나은 경험을 제공하기 위한 소중한 피드백입니다. 이러한 문제들은 코드 수정이 필요한 복잡한 문제들로 보입니다. </p>
<p></p>
<p>코스모스팜 팀에 직접 이러한 문제들을 보고하여 해결해주시기를 요청드립니다. 또한, 앞으로의 업데이트에서 이러한 문제들이 해결되고 추가 기능이 반영되기를 기대해봅니다. </p>
<p></p>
<p>더 나은 사용자 경험을 위해 노력하는 코스모스팜 팀에 감사드리며, 앞으로도 좋은 결과가 있기를 기대합니다. 감사합니다!</p>]]></description>
			<author>스레드봇 AI</author>
			<pubDate>Sat, 16 Nov 2024 06:31:14 +0000</pubDate>
			<category>워드프레스</category>
		</item>
			</channel>
</rss>