케이보드 글쓴이 포인트 지급 코드 오류 관련

/**
    학원이 일반 이력서 조회 시 강사회원에게 2000 포인트 지급
*/


add_action('kboard_skin_header', 'my_kboard_skin_header', 10, 1);
function my_kboard_skin_header($board_builder){
    $board = $board_builder->board;
    $uid = kboard_uid();
    
    if($board_builder->mod == 'document' && $board->id == '3'){ // 강사 이력서 게시판.
        if(function_exists('mycred_add')){
            if(!in_array($uid, $_SESSION['increased_document_uid'])){
                $content = new KBContent();
                $content->initWithUID($uid);
                
                if($content->member_uid != get_current_user_id()){
                    $log_args['user_id'] = $content->member_uid;
                    $log_args['ref'] = 'document_read_up_point';
                    $log_args['ref_id'] = $content->uid;
                    $log = new myCRED_Query_Log($log_args);
                    
                    if(!$log->have_entries()){
                        $add_point = 1000;
                        $balance = mycred_get_users_balance($content->member_uid);
                        $point = intval(get_user_meta($content->member_uid, 'kboard_document_mycred_point', true));
                        update_user_meta($content->member_uid, 'kboard_document_mycred_point', $point + $add_point);
                        
                        mycred_add('document_read_down_point', $content->member_uid, $add_point,'글읽기 증가 포인트', $content->uid);
                    }
                }
            }
        }
    }

현재 테마의 functions.php 파일에 다른 유저가 게시판 글 조회 시 글쓴이에게  포인트를 지급하는 코드를 사용하고 있습니다.
그런데 테스트 중 이 코드에 대해 심각한 이슈가 있어서 상담 요청드립니다. 

 

일단 글 조회 시 포인트 지급 기능 자체는 잘 작동합니다.

그런데 글읽기 포인트 차감 기능과 같이 동작할 때 오류가 나는 경우가 있습니다.

 

유저에게 글을 읽을 포인트가 있는 경우에는 읽는 유저의 포인트가 잘 차감되고, 글쓴이에게 1000포인트가 잘 지급됩니다. (문제없음)

그런데 읽는 유저에게 글을 읽을 포인트가 부족할 경우, 조회를 시도한 유저에게는 포인트 부족 오류가 뜨고, 글쓴이에게 3000포인트가 지급되는 오류가 생기네요.

Mycred 로그상으로 1000포인트가 세번 지급됩니다. (실제로 게시물을 조회하지 못했는데도 말이죠)

 

여러 테스트계정으로 테스트해봤는데 증상이 똑같습니다ㅠㅠㅠ

포인트 지급 부분이 웹사이트 핵심 기능이라 걱정이 많습니다.

해결 방법이 있을까요?

 

 

좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
  • 안녕하세요~^^

    kboard_skin_header 액션에다가 코드를 추가해주셨는데요.

    실행 순서 때문에 문제가 발생되는 것 같습니다.

    KBoardBuilder.class.php 파일에서 $content->increaseView(); 코드 아래쪽에 있는 액션이나 필터에 코드를 추가하셔야 할 것 같습니다.

     

    예를 들어 아래와 같이 kboard_content_paragraph_breaks 필터를 사용할 수 있습니다.

    add_filter('kboard_content_paragraph_breaks', 'my_kboard_content_paragraph_breaks_20210831', 10, 2);
    function my_kboard_content_paragraph_breaks_20210831($text, $board_builder){
    	
    	// 코드 삽입
    	
    	return $text;
    }

     

    또는 kboard_always_view_list 필터를 사용할 수도 있습니다.

    add_filter('kboard_always_view_list', 'my_kboard_always_view_list_20210831', 10, 2);
    function my_kboard_always_view_list_20210831($always_view_list, $board_builder){
    	
    	// 코드 삽입
    	
    	return $always_view_list;
    }

     

    필터의 원래의 목적과는 다르지만 이렇게 코드를 추가해서 활용할 수도 있겠습니다.

    시도해보시겠어요?

    고맙습니다.

  • add_action('kboard_skin_header', 'my_kboard_skin_header', 10, 1);
    function my_kboard_skin_header($board_builder){
        $board = $board_builder->board;
        $uid = kboard_uid();
        
        if($board_builder->mod == 'document' && $board->id == '3'){ // 강사 이력서 게시판.
            if(function_exists('mycred_add')){
                if(!in_array($uid, $_SESSION['increased_document_uid'])){
                    $content = new KBContent();
                    $content->initWithUID($uid);
                    
                    if($content->member_uid != get_current_user_id()){
                        $log_args['user_id'] = $content->member_uid;
                        $log_args['ref'] = 'document_read_up_point';
                        $log_args['ref_id'] = $content->uid;
                        $log = new myCRED_Query_Log($log_args);
                        
                        if(!$log->have_entries()){
    
                            $balance = mycred_get_users_balance(get_current_user_id());
                            if($board->meta->document_read_down_point > $balance){
                             
                            }
    
                        else{$add_point = 1000;
                          $balance = mycred_get_users_balance($content->member_uid);$point = intval(get_user_meta($content->member_uid, 'kboard_document_mycred_point', true));
                            update_user_meta($content->member_uid, 'kboard_document_mycred_point', $point + $add_point);
                            mycred_add('document_read_down_point', $content->member_uid, $add_point,'글읽기 증가 포인트', $content->uid);
                        }
                        }
                    }
                }
            }
        }
    }

    답변 고맙습니다. 저도 나름대로 방법을 찾아서, 해당 코드를 공유드립니다.

     

    질문을 올려놓고 저도 열심히 방법을 찾았는데요,

    비슷한 코드를 찾던 중, 케이보드 플러그인 내에 있는 글읽기 차감 섹션 코드를 활용해서 처리했습니다.

     

    글읽기 차감 섹션은 If 조건문으로, 포인트 보유 유무를 먼저 파악한 후에

    포인트를 보유했을 때만 글을 보여주고, 아닌 경우 에러를 보여주는 섹션이 있는데요,

    이 중 포인트 보유 유무를 체크하는 섹션을, 1000포인트 지급코드 이전에 조건부 실행으로 넣어서 해결했습니다.

     

    다음 업데이트에 글읽기시 작성자에게 포인트 지급 부분을 아예 기본 기능으로 넣어주셔도 좋을 것 같습니다.

    언제나 빠른 지원 고맙습니다.

좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기