안녕하세요.
현재 구현가능한 익명게시판 기능을 사용하여 기본값을 '익명'으로 해두었습니다. 가능하다면 글쓴이 및 댓글을 쓴 사람들에게 고유한 아이디를 부여해서 익명글을 쓴 사람이 글쓴이 인지 아닌지 구분할 수 있게 하고 싶은데요.
혹시 이런 기능을 만드려면 어떤 식으로 구현하면 될까요...? 표시되는 아이디를 난수값으로 대체하는 형식으로 하면 좋을것 같은데 난수는 작성 때 마다 바뀔테니 어떻게 해결해야할지 고민이 됩니다.
감사합니다.
안녕하세요.
PHP uniqid 함수는 기본적으로 13자리로 표시됩니다.
앞에서부터 8자리는 초단위, 뒤의 5자리는 마이크로초단위를 16진수로 바꾼 값으로 표시됩니다.
문자열을 잘라서 표시하시려면 substr 함수를 사용하시면 될 듯합니다.
초단위는 마이크로초단위보다 비교적 시간이 길기 때문에
짧은 시간 동안 댓글이 달리면 앞부분이 고정되는 것처럼 보일 수 있습니다.
뒷부분 6자리로 표시되게 하시려면
uniqid() 부분을 substr(uniqid(), -6)로 모두 교체해보시겠어요?
8자리로 표시하시려면 -6 부분을 -8로 적용해보세요.
고맙습니다.
질문이 있어요 작성자 아이디를 익명으로 암호화 하게 하는것까지는 했는데 작성자 이름이 너무 길어서요 한 6자리나 8자리로 표기되게 할수는 없나요?
완벽하게 동작합니다!! 진심으로 감사 드립니다! :)
안녕하세요.
1. 아래의 코드로 교체해서도 확인해보시겠어요?
add_action('kboard_comments_insert', 'my_kboard_comments_insert', 10, 3);
function my_kboard_comments_insert($insert_id, $content_uid, $board){
if($board->id == '1'){ // 실제 게시판 id로 적용해주세요.
$content = new KBContent();
$content->initWithUID($content_uid);
$comment = new KBComment();
$comment->initWithUID($insert_id);
if(is_user_logged_in()){
if($comment->user_uid == $content->member_uid){
$comment->user_display = $content->member_display . ' (작성자)';
}
else{
$comment->user_display = uniqid();
}
}
else if(get_current_user_id() != $content->member_uid && $content->option->ip == kboard_user_ip()){
$comment->user_display = $content->member_display . ' (작성자)';
}
else{
$comment->user_display = uniqid();
}
$comment->update();
}
}
2. 특정 게시판에서만 쪽지 보내기 연동 기능을 제거하시려면
올려주신 코드 대신 아래의 코드로 교체해보시겠어요?
add_filter('kboard_user_display', 'kboard_user_message_link', 10, 5);
function kboard_user_message_link($display, $user_id, $username, $plugin, $builder){
$board = $builder->board;
if(is_user_logged_in() && !$board->id == '1'){ // 실제 게시판 id로 적용해주세요.
if($user_id && $user_id != get_current_user_id()){
$display = sprintf('<a href="%s" title="쪽지 보내기">%s</a>', get_cosmosfarm_members_messages_url(array('to_user_id'=>$user_id, 'redirect_to'=>urlencode($_SERVER['REQUEST_URI']))), $display);
}
}
return $display;
}
위의 코드에서 !$board->id == '1' 부분의 숫자는
쪽지 보내기 기능을 제외할 실제 게시판 id로 적용해보시겠어요?
고맙습니다.
빠른 답변 감사 드립니다.
제가 무얼 잘못했는지, 여전히 안되는데, 혹시 한번 살펴봐 주실 수 있을까요? URL 주소는 아래와 같습니다.
http://clinicaltrialtools.com/%ec%9d%b5%eb%aa%85%ea%b2%8c%ec%8b%9c%ed%8c%90/
아울러, 쪽지보내기 기능은 테마 function.php 에 아래 코드를 추가하였습니다.
add_filter('kboard_user_display', 'kboard_user_message_link', 10, 5);
function kboard_user_message_link($display, $user_id, $username, $plugin, $builder){
if(is_user_logged_in()){
if($user_id && $user_id != get_current_user_id()){
$display = sprintf('<a href="%s" title="쪽지 보내기">%s</a>', get_cosmosfarm_members_messages_url(array('to_user_id'=>$user_id, 'redirect_to'=>urlencode($_SERVER['REQUEST_URI']))), $display);
}
}
return $display;
}
감사합니다.
안녕하세요.
이전 댓글에 안내해드린 코드 중
아래의 코드를 찾아서
add_action('kboard_comments_insert', 'my_kboard_comments_insert', 10, 3);
function my_kboard_comments_insert($insert_id, $content_uid, $board){
if($board->id == '1'){ // 실제 게시판 id로 적용해주세요.
$content = new KBContent();
$content->initWithUID($content_uid);
$comment = new KBComment();
$comment->initWithUID($insert_id);
if(is_user_logged_in()){
if($comment->user_uid == $content->member_uid){
$comment->user_display = $content->member_display . ' (작성자)';
}
}
else if($content->option->ip == kboard_user_ip()){
$comment->user_display = $content->member_display . ' (작성자)';
}
$comment->update();
}
}
아래의 코드로 교체해보시겠어요?
add_action('kboard_comments_insert', 'my_kboard_comments_insert', 10, 3);
function my_kboard_comments_insert($insert_id, $content_uid, $board){
if($board->id == '1'){ // 실제 게시판 id로 적용해주세요.
$content = new KBContent();
$content->initWithUID($content_uid);
$comment = new KBComment();
$comment->initWithUID($insert_id);
if(is_user_logged_in()){
if($comment->user_uid == $content->member_uid){
$comment->user_display = $content->member_display . ' (작성자)';
}
}
else if($content->option->ip == kboard_user_ip()){
$comment->user_display = $content->member_display . ' (작성자)';
}
else{
$comment->user_display = uniqid();
}
$comment->update();
}
}
테마 쪽 functions.php 파일에 코드를 추가해서
KBoard 플러그인에 코스모스팜 회원관리 플러그인 쪽지 보내기 기능을 연동하신 건지요?
어떤 코드를 추가했는지 알려주시면
특정 게시판에서 제외하는 방법을 안내해드리겠습니다.
고맙습니다.
감사합니다!
말씀해주신 내용 function 쪽에 추가하였는데, 아래 스크린샷 처럼 작성자의 게시글에서 작성자의 아이디만 익명화됩니다.
https://imgur.com/P5RqmO8
혹시 댓글을 다는 사람 또한 익명화 되게 할 수 있을까요?
아울러, 익명화를 하였는데, 쪽지를 보내는 기능이 활성화 되어 있어 쪽지 보내기를 클릭하면 작성자 ID 가 보이게 됩니다. 제가 다른 게시판들은 작성자가 보이도록 하고 있기에 혹시 이 게시판에서만 쪽지보내기 기능을 끌 수 있는 방법이 있을까요?
항상 친절한 답변 주시는 점 진심으로 감사 드립니다.
안녕하세요~^^
PHP uniqid 함수를 활용하시면 랜덤 문자열을 생성하실 수 있습니다.
로그인 사용자는 게시글이나 댓글에 저장된 사용자를 구분할 수 있는 사용자 ID(숫자)로 구분하고
비로그인 사용자는 IP로 댓글 작성자가 게시글 작성자와 일치하는지 체크하셔야 할 듯합니다.
KBoard 게시글 및 댓글 작성자를 랜덤 문자열로 표시하시려면
테마 쪽 functions.php 파일에 하단에
아래의 코드를 추가해보시겠어요?
add_action('kboard_document_insert', 'my_kboard_document_insert', 10, 4);
function my_kboard_document_insert($content_uid, $board_id, $content, $board){
if($board_id == '1'){ // 실제 게시판 id로 적용해주세요.
if(!is_user_logged_in()){
$content->option->ip = kboard_user_ip();
}
$content->member_display = uniqid();
$content->updateContent();
}
}
add_action('kboard_comments_insert', 'my_kboard_comments_insert', 10, 3);
function my_kboard_comments_insert($insert_id, $content_uid, $board){
if($board->id == '1'){ // 실제 게시판 id로 적용해주세요.
$content = new KBContent();
$content->initWithUID($content_uid);
$comment = new KBComment();
$comment->initWithUID($insert_id);
if(is_user_logged_in()){
if($comment->user_uid == $content->member_uid){
$comment->user_display = $content->member_display . ' (작성자)';
}
}
else if($content->option->ip == kboard_user_ip()){
$comment->user_display = $content->member_display . ' (작성자)';
}
$comment->update();
}
}
위의 코드에서 $board_id == '1' 부분과 $board->id == '1' 부분은 실제 게시판 id로 적용해주세요.
테마 쪽 functions.php 파일은
워드프레스 관리자 -> 외모 -> 테마 편집기 페이지에서 편집하실 수 있습니다.
만약, 워드프레스 관리자 페이지에서 테마 쪽 functions.php 파일을 수정할 수 없다면
모든 플러그인을 비활성화한 후에도 시도해보세요.
그래도 해결되지 않으신다면
서버 관리자(웹호스팅 업체)에도 문의를 해보셔야 할 듯합니다.
FTP로 접속이 가능하시다면
FTP로 접속해서 /wp-content/themes/사용중인테마/functions.php 파일에 코드를 추가해보세요.
고맙습니다.