게시글 저장할 때 질문있습니다.

 

 

안녕하세요. 

초보자 인사드립니다.

다름이 아니라 메인화면에서 kboard를 이용하여 새로운 게시물을 등록하려고 하는데 저장이 문제가 되네요.

화면 구성은 아래처럼 되어 있습니다.

 

editor 쪽의 소스를 list 에 붙여넣고 제가 사용할 정보만 화면에 표시했습니다.

그리고 저장 버튼을 누르면 input 의 텍스트 체크 까지는 되는데 자꾸만 권한이 없다고 뜹니다.

글쓰기 화면이나 덧글쓰기 화면으로 넘어가서 글을 등록하는 건 잘 됩니다.

이런 경우엔 어느 부분을 확인해 봐야 할까요??

 

 

좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
  • 스킨의 editor.php 파일에 있는 input hidden 값들도 가져오셨는지요? 확인 해보세요.

    /kboard/class/KBController.class.php 파일에서 어느 부분에서 중단되는지도 확인해서 역으로 어느 부분이 문제인지 찾아주세요.

    KBController.class.php 파일이 없다면, KBoardBuilder.class.php 파일에서 builderEditor() 메소드 부분을 확인해보셔야 합니다.

  • 답변 감사합니다. 

    editor 가 작동될 때의 코드와 비교해 보니까 

    <?php wp_nonce_field('kboard-editor-execute', 'kboard-editor-execute-nonce');?>

    이 부분이 제대로 작동하지 않습니다.

    기존의 글쓰기 버튼을 누를 경우(editor.php로 이동 할 경우)에는 두번째 hidden 필드의 값이 /?mode=editor 가 반환되는 데에 비해서

    list.php에 버튼을 넣었을 때엔 / 만 반환되었습니다. 

    찾아보니까  wp_referer_field() 함수의 

    $referer_field = '<input type="hidden" name="_wp_http_referer" value="'. esc_attr( wp_unslash( $_SERVER['REQUEST_URI'] ) ) . '" />';

    부분에서 값을 가져오지 못 하는 것 같습니다.

    esc_attr()를 따라가다 보니까 apply_filters()가 나오던데 여기서 부터는 어떻게 해야 할지 모르겠습니다.  일단 급한 마음에 필요한 부분을 하드 코딩으로 때려넣긴 했는데 찝찝하네요.

     

    그리고 이건 다른 내용인데요.

    글을 등록한 후에 화면의 이동 없이 지금 페이지에 남아있고 싶습니다. 그런데 자꾸만 document.php로 페이지가 넘어갑니다. 스레드에 다른 분들의 질문을 따라서 builderEditor()의 set('mod', 'document') 부분을 list로 바꿔봤는데 작동이 되지 않습니다.

    아무래도 저 함수가 editor 화면이 생성될 때 작동하는 부분이라서 그런 것 같습니다.

    list.php에서 게시글을 등록할 경우엔 어떻게 해야할까요?

    데이터가 insert 되면서 document.php 가 호출되는 부분이 어딘지 파일이나 함수가 알고 싶습니다.

    그리고 kboard_after_executing_url 필터를 이용하라는 답변도 해주셨는데 저 필터는 어떻게 사용하는지 잘 모르겠습니다. 만약 필터로 한번에 해결할 수 있다면, 그냥 버튼 윗 부분에 kboard_after_executing_url를 선언?해주면 되는 건가요? 어떻게 사용하면 되는 건가요? 

  • list.php
    <input type="hidden" id="kboard-editor-execute-nonce" name="kboard-editor-execute-nonce" value="1864c42ceb">
    <input type="hidden" name="_wp_http_referer" value="/">

    editor.php
    <input type="hidden" id="kboard-editor-execute-nonce" name="kboard-editor-execute-nonce" value="1864c42ceb">
    <input type="hidden" name="_wp_http_referer" value="/?mod=editor">

     

    이건 두 파일의 코드 비교 내용입니다.

  • 추가 질문 자답합니다.

    KBController.class.php 에 editorExecute() 속에 있는 document를 list로 바꾸었습니다.

  • wp_referer_field() 함수 결과가 (_wp_http_referer 값이)

    /?mode=editor 대신 / 로 나오는건 이유가 있을겁니다.

    이건 지금 페이지 주소를 출력합니다. 지금 페이지가 / 이게 아닌가요?

    /?mode=editor 이건 글쓰기 페이지 주소입니다. 글쓰기 페이지가 아니신것 같은데요 그럼 / 이게 나오는게 맞는것 같군요.

    그러니 wp_referer_field() 함수 자체는 문제가 없습니다.

    임의로 코딩하시면 문제 생깁니다. 이건 보안때문에 추가한 부분입니다. 어느 페이지에서 폼을 넘겨줬는지 체크하는 부분입니다.

     

    document.php 파일이 호출되는 경우는 무조건 주소의 mod 값이 document 일때입니다.

    insert 나 update 쪽에서 실행되지 않습니다. 실행 후 페이지 이동을 하는겁니다. 즉 페이지 이동으로 list 화면으로 해주면 되는데요.

    set('mod', 'document') 이 부분을 set('mod', 'list')로 해주면 주소가 바뀝니다. 그런데 안되신다구요?

    KBoardBuilder->builderEditor()
    KBController->editorExecute() 

    둘 중 어느곳에서 저장하기가 실행되는지 체크해보세요.

     

    kboard_after_executing_url 필터 사용법은

    먼저 http://codex.wordpress.org/Function_Reference/add_filter 이 쪽을 참고 해주세요.

    아래는 간단하게 예제를 만들어봤습니다. 테마의 functions.php 파일에 추가해주세요.

    add_filter('kboard_after_executing_url', 'my_kboard_after_executing_url',10,3);

    function my_kboard_after_executing_url($next_page_url, $content_uid, $board_id){
         echo $next_page_url;
         echo $content_uid;
         echo $board_id;
         return $next_page_url;
    }

  • 감사합니다! 정말 많은 도움이 되었습니다!

    그리고 두 파일에 각각 document와 list를 적용해서 글을 등록해봤습니다.

    KBoardBuilder.class builderEditor() / KBController.class editorExecute()  : 이동한 페이지

    1) list / document : document

    2) document / list : list

    3) document / document : document

    controller 파일의 설정에 따라서 저장했을 때 이동하는 페이지가 달라지네요.

     

    혹시나 참고가 되실까 해서 제가 따라가 본 경로를 첨부합니다.

    (1)editor.php
    <input type="hidden" name="action" value="kboard_editor_execute">
    (2)KBController.class.php
    init();
    (3)KBController.class.php
    editorExecute();

  • KBoardBuilder->builderEditor() 이건 구버전 방식이고

    KBController->editorExecute() 이건 최신버전 방식입니다.

    글쓰기 폼에 <input type="hidden" name="action" value="kboard_editor_execute"> 이게 있다면 최신버전 방식입니다.

    없다면 구버전 방식입니다.

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