글 작성자 교체

이미 작성한 글의 작성자를 관리자가 다른 회원이 작성한 것으로 변경할 수 있게 하려고 합니다.

기본 기능으로는 없는 것 같은데, 관리자가 글 작성페이지에서 작성자를 변경할 수 있도록 구성하는 것이 편할 것으로 생각되어 이 방향으로 생각중입니다.

케이보드에 관련 함수가 있는지, 이때 어떻게 접근해야하는지 간단한 예시를 알 수 있을까요?
그리고 이때 고쳐줄 부분은 해당 게시물의 wp_kboard_board_content의 member_uid와 member_display만 UPDATE로 수정되면,
이후 해당 회원이 글 수정, 삭제 등이 가능하고 자신의 글처럼 다룰 수 있게 되는지요?

워드프레스 에러 기술지원 서비스 전문가에게 맡기세요
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
  • 안녕하세요~^^

    DB에서 직접 수정하시거나

    wpdb로 수정하시고자 하신다면

    이해하신 바가 맞습니다.

     

    기준은 member_uid가 기준이고

    게시판에서 표시될 때 사용되는 닉네임이 member_display 입니다.

    고맙습니다.

  • 답변 감사드립니다.

    이런 경우에  kboard_insert_data, kboard_update_data 를 사용하는게 맞을까요?

    입력 필드에 게시물을 넘겨줄 사용자명을 입력할 입력필드를 만들고 function.php에 아래와 같이 작성했는데요,

    검색된 사용자명이 없을 때, 경고창을 띄우면서 글 저장을 취소하고 다시 수정할 수 있게 하려는데 alert창이 뜨질 않습니다.
    이부분은 케이보드의 다른 곳에서 작성을 해야할까요? 

     

    입력필드 메타키 : change_writer

    function.php

    add_filter('kboard_insert_data', 'writer_change', 10, 2);
    add_filter('kboard_update_data', 'writer_change', 10, 2);
    
    function writer_change($data, $board_id){
        global $wpdb;
    
        if($board_id == '8'){
            if(isset($_POST['kboard_option_change_writer']) && $_POST['kboard_option_change_writer']) {
    
                    // 변경할 사용자명 변수에 담기
                    $change_user = $_POST['kboard_option_change_writer'];
    
                    // 해당 사용자명으로 회원 테이블 검색 후 $data에 넘기기
                    $user = get_user_by( 'login', $change_user );
    
                    if ( empty($user) ) {
                        echo "<script>alert('변경하려는 사용자명을 찾을 수 없습니다.')</script>";
                    } else if ( ! empty($user) ) {
                        // 해당 사용자명의 'member_uid'와 'member_display'를 찾아서 적용
                        $data['member_uid'] = $user->ID;
                        $data['member_display'] = $user->display_name;
                    }
    
    
            }
        }
        return $data;
    }

     

  • 내부 로직은 맞는듯 합니다.

     

    다만 위 액션들은 작성된 이후에 실행하는 액션들이므로

    kboard_pre_document_insert, kboard_pre_document_update 액션이 조금 더 적절한 듯 합니다.

     

    아래 예제 코드를 참고하여 적용해보시겠어요?

    add_filter('kboard_pre_document_update', 'kboard_pre_document_update_0905', 10, 4);
    function kboard_pre_document_update_0905($content_uid, $board_id, $content, $board){
    	// ...
    	$content->row->member_uid = 2;
    	$content->row->member_display = 'editor';
    	// ...
    };

    고맙습니다.

  • 잘 적용 된 것 같습니다. 감사합니다 ! 

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