특정 게시판에서 지정 날짜 이전의 모든 게시글 삭제 버튼 추가

안녕하세요~.

저번에 문의드린 내용에 대해 추가 질문 드립니다~

 

특정 게시판에서 날짜를 지정하여 해당 날짜 이전의 모든 게시글을 삭제하게 해달라는 고객 요청에 의해

관리 메뉴 추가 등을 고려하였으나

추가 작업이 많이 발생할 것으로 생각되어

그냥 간단하게

해당 게시판의 목록 화면에 '대량 삭제' 버튼을 추가하여

특정 날짜 이전의 게시글을 삭제하려고 합니다. 

 

해당 게시판의 특정 날짜 이전의 모든 게시글을 DB에서 읽어와서

해당 ID별로 

KBContent.class.php 파일의 

function remove() 함수를 실행시키려고 하는데요,

이렇게 처리하면 맞는 건지 확인 좀 부탁드립니다~!

감사합니다~^^

좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
  • 네 remove() 메소드를 실행시키면 게시글을 삭제 할 수 있습니다.

     

    아래처럼 하시면 uid 번호가 1번인 게시글을 삭제할 수 있습니다.

    <?php
    $content = new KBContent();
    $content->initWithUID(1);
    $content->remove();
    ?>

     

    위 코드를 응용해서 아래처럼 하게되면 uid 번호가 1, 2, 3번인 게시글을 삭제할 수 있습니다.

    <?php
    $content = new KBContent();

    $content->initWithUID(1);
    $content->remove();

    $content->initWithUID(2);
    $content->remove();

    $content->initWithUID(3);
    $content->remove();
    ?>

  • 친절한 답변에 항상 감사하게 생각하고 있습니다~^^

    현재 위 기능을 구현하는 코드를 작성 중인데요...

    목록 화면에 대량 삭제 단추를 추가하였습니다.

    이 부분을 실행하기 위해 작은 form으로 만들어서 

    삭제를 실행하는 php 파일로 지정된 삭제 날짜를 전달하려고 하는데요,

    이상하게 해당 php 파일로 POST 변수가 전달이 안됩니다~!

    list.php 파일 자체에서 다른 처리 부분에 의해 이러한 전달이 이루어질 수 없는건지요?

    참고로 제가 작성한 소스는 다음과 같습니다.

    아래 코드는 list.php 파일의 일부입니다.

        <!--관리자인 경우 특정 날짜 이전의 게시글 삭제 메뉴 표시-->    
        <?php if( is_admin() || current_user_can('administrator')  ):?>  
        <form id="deleteform" name="deleteform" method="POST" acion="http://applevita.cafe24.com/wp-content/plugins/kboard/skin/cubictek_testkey/bulkdelete.php" >    
        <div class="left">
               <input type="hidden" name="formgiil" id="formgiil" value="" />
               <input type="text" name="giil" id="giil" value="" class="" style="width:15%" />
            <span class="kboard-default-button-small" onclick="javascript:bulkdelete();" >대량 삭제</span>
            해당 날짜 이전(선택 날짜 제외)의 모든 게시글 삭제
            <!--a href="<?=$skin_path ?>/bulkdelete.php" class="kboard-default-button-small"><?php echo __('대량 삭제', 'kboard')?></a-->
        </div>
        </form>
        
    <?php endif;?>    
                   
    <script>
    setDeletedate();    

    function bulkdelete() {
        
        var r = confirm('해당 날짜 이전(선택 날짜 제외)의 모든 게시글을 정말로 삭제하시겠습니까?');
        if (r == false)
             return;
        else 
        {
            var giil = document.getElementById("giil");
            var date = new Date(giil.value);
            var giil1 = formdate(date);
            
            var formgiil = document.deleteform.formgiil;
            formgiil.value = giil1;        
            //alert(giil1);
            
            document.deleteform.submit();

    }

    }

    확인 부탁드립니다.

    감사합니다~^^

  • 스킨 list.php 파일에서는 어떠한 제한도 없습니다.

    자유롭게 수정하실 수 있습니다^^

     

    formgiil.value 값은 제대로 설정이 된건지요?

    alert 또는 console.log() 기능으로 값을 확인해보세요.

    어떤값을 전송하는지요.

    그리고 폼 submit 도 정상적인거죠?

    크롬 브라우저의 개발자도구(F12키)에서 콘솔에 스크립트 오류는 없는지도 봐주세요.

     

    아무튼 스킨에서 POST 전송등은 아무런 제한이 없습니다.

    오류가 있는건 아닌지 혹은 실수가 있는건 아닌지 점검해보셔야 할 듯합니다.

  • 빠른 답변에 너무 감사드립니다~! ^^

    답변 듣고 오늘 아침에 다시 테스트해봤는데요,

    이상하게 form 변수가 전달이 안됩니다~

    그래서 그냥 URL 이동으로 방법을 바꿨어요~!

    아래와 같은 식으로요,,,

            var giil = document.getElementById("giil");
            var date = new Date(giil.value);
            var giil1 = formdate(date);
           
            var url = "<?=$skin_path ?>/bulkdelete.php?giil=" + giil1;

            window.location.assign(url);

    위와 같이 하니까 잘 됩니다~!

     

    그런데 실제로 삭제하는 부분의 코드를 검증을 받고 싶어서 다시 글 올립니다~

    아래와 같이 삭제 코드를 작성했는데 제대로 한건지 확인 부탁드립니다.

    불필요한 코드가 들어가 있거나 덜 삭제되는 항목이 없나해서요...

     

    DB와 파일을 제가 직접 건드리면서,

    그것도 대량으로 삭제하는 거라서 신경이 많이 쓰입니다.

    혹 잘못되어 사용자가 올린 게시글들이 그냥 날라가 버리고 복구는 불가능해지는 최악의 상황이 발생하면 안되니까요~^^;

     

    1. 일단 DB에서 해당 게시판의 지정 날짜 이전의 게시글의 uid를 읽어온다.

    2. 해당 uid에 해당하는 게시글에 대해 삭제를 실행한다.

     

    다음 코드에 혹 문제가 없는지 확인 좀 부탁드립니다~

        global $wpdb;
         
        //지정된 삭제 날짜
        $giil = $_GET['giil'];
        $boardid = 3; //테스트키 요청 게시판의 ID
        
        //SELECT * FROM applevita.wp_kboard_board_content WHERE board_id = 3 AND date <= 20160807000000 ; //DB에서 직접 실행해서 성공한 쿼리
        $sql = "SELECT uid, board_id FROM applevita.wp_kboard_board_content WHERE board_id = $boardid AND date < $giil ";
        $result = $wpdb->get_results($sql);

        $content = new KBContent();
        $count = 0;
                        
        if($result){
            foreach($result as $r){
                $count++;
                $content->initWithUID($r->uid);
                $content->remove();
                echo "delete {$count}";
            }
        }

    감사합니다~^^

  • 죄송하지만 실제 코드 리뷰까지 해드리긴 무리입니다. (코드를 돌려서 확인하기는..)

    단순히 올려주신 코드를 봤을때는 큰 문제는 없어보이지만, 테스트 서버에서 꼭 미리 테스트 해보세요^^;

    저희 답변이 100% 정확한게 아니기 때문에 꼭 테스트 해보셔야 합니다.

워드프레스 에러 기술지원 서비스 전문가에게 맡기세요