1. 정확한 제품 또는 플러그인 이름
케이보드
2. 상세 내용
안녕하세요. A(게시글에 좋아요 누를 시 작동하는 코드)와 B(댓글에 좋아요 누를 시 작동하는 코드) 두 개의 코드를 작성했습니다.
그런데 A는 잘 작동이 되고 B는 작동이 되질 않는데 그 이유가 뭘까요? B코드를 맨 아래처럼 수정했더니 잘 됩니다. 수정하기 전에는 좋아요 누른 사람과 댓글 작성자가 동일해도 포인트 지급이 됐습니다.
A코드(게시글에 좋아요 누를 시 작동)
//게시글에 좋아요 포인트 지급
add_action('kboard_content_like', 'my_kboard_content_like', 10, 2);
function my_kboard_content_like($content, $board){
$like_user = get_current_user_id();
$content_user = $content->member_uid;
if($like_user) {
if($like_user !== $content_user){
mycred_add('my_kboard_content_like', $like_user, 20, '게시글 좋아요 누름 포인트', $content->uid);
}
}
if($like_user !== $content_user) {
mycred_add('my_kboard_content_like', $content_user, 100, '게시글 좋아요 받음 포인트', $content->uid);
}
}
수정 전 B코드(댓글에 좋아요 누를 시 작동)
//댓글에 좋아요 포인트 지급
add_action('kboard_comment_like', 'my_kboard_comment_like', 10, 2);
function my_kboard_comment_like($comment, $board){
$comment_like_user = get_current_user_id();
$comment_user = $comment->user_uid;
if($comment_like_user) {
if($comment_like_user !== $comment_user){
mycred_add('kboard_comment_like', $comment_like_user, 10, '댓글 좋아요 누름 포인트', $comment->uid);
}
}
if($comment_like_user !== $comment_user) {
mycred_add('kboard_comment_like', $comment_user, 50, '댓글 좋아요 받음 포인트', $comment->uid);
}
}
수정 후 B코드
//댓글에 좋아요 포인트 지급
add_action('kboard_comment_like', 'my_kboard_comment_like', 10, 2);
function my_kboard_comment_like($comment, $board){
$comment_like_user = get_current_user_id();
$comment_user = $comment->user_uid;
if($comment_like_user) {
if($comment_like_user == $comment_user){
return false;
} else {
mycred_add('kboard_comment_like', $comment_like_user, 10, '댓글 좋아요 누름 포인트', $comment->uid);
}
}
if($comment_like_user == $comment_user) {
return false;
} else {
mycred_add('kboard_comment_like', $comment_user, 50, '댓글 좋아요 받음 포인트', $comment->uid);
}
}
get_current_user_id()로 호출되는 값과 $comment->user_uid로 호출된 값의 타입이 각각 정수형 문자형 등으로 달라서 그럴 수 있다는 말씀이신가요?
그렇다고 보기엔 $content->member_uid로 호출된 값과 $comment->user_uid로 호출된 값의 타입을 데이터베이스에서 확인해보니 둘 다 정수형(bigint)이라서 아닌 것 같습니다.
$like_user !== $content_user 경우엔 또 잘 작동이 됐으니까요. 미스테리네요...
안녕하세요~^^
코드상으로만 봤을때는 추측해보건데
!== 를 사용하셔서 그런 듯 합니다.
관계연산자가 3개 있는 경우는
타입까지 확인하여 '엄격한 확인'을 진행합니다.
아마 변수에 대입한 값이 각각 정수형과 문자형이라면
처음 수정하신 코드는 의도대로 동작하지 않을 수 있습니다.
!== 대신 != 를 사용하여 작성해보시겠어요?
코드만 보고 추측한 것이라
정확하지는 않을 수 있습니다.
고맙습니다.