bbpress 에서 자신이 쓴 게시글 (topic), 답변 (reply) 만 삭제하도록 권한은 어떻게 주나요?

TechNote Forum Forums Forum bbpress 에서 자신이 쓴 게시글 (topic), 답변 (reply) 만 삭제하도록 권한은 어떻게 주나요?

This topic contains 1 reply, has 2 voices, and was last updated by  technote 11 months, 4 weeks ago.

Viewing 2 posts - 1 through 2 (of 2 total)
  • Author
    Posts
  • #742

    cefm****
    Participant

    forum.technote.kr 을 보면 자신이 작성한 글에 대해서 삭제가 가능하던데, wordpress 에 아무리 살펴보아도 해당 권한 부여는 없습니다. 또한 마땅한 plugin 도 찾기가 어렵습니다.

     

    어떻게 작업하신 것인지 궁금합니다.

    #743

    technote
    Keymaster

    각종 member 의 role과 capabilities 를 설정하는 plugin을 설치해보아도 자신이 작성한 게시글, 답변에 대해서만 삭제하는 것은 어려웠습니다. 아무리 ‘delete_topics’, ‘delete_replies’ 를 선택해도 자신이 작성한 글에 대해서만 삭제하는 것은 동작하지 않았습니다.

    ‘delete_others_topics’, ‘delete_others_replies’ 까지 주면 자신이 작성한 글에 대해서 삭제가 가능하긴 하였지만 다른 사람글 까지 삭제가 되버리는 문제가 있어, 적용이 불가능하였습니다.

    [자신이 작성한 contents 삭제 guide Link]

    위 link에서 원하는 답을 제공하고 있습니다.

    bbPress uses a different model of work with topics and replies privileges comparing to the WordPress posts. While bbPress adds ‘delete_topics’, ‘delete_replies’ it really uses just ‘delete_others_topics’ (includes/topics/capabilities.php, line #180) and ‘delete_others_replies’ (includes/replies/capabilities.php, line #162). So default bbPress permissions model does not allow to a user to delete his own content.

    bbpress topic/reply는 wordpress post와는 다른 모델을 가지고 있고, 결국 bbpress permission model에는 자기 자신이 작성한 content에 대해서만 삭제하는 것은 불가능하다는 것입니다.

     

    따라서 해당 글에서는 추가 코드를 제시하고 있습니다.


    add_filter('bbp_map_reply_meta_caps', 'bbp_delete_own_replies', 10, 4);
    
    function bbp_delete_own_replies($caps, $cap, $user_id, $args) {
      if ($cap!=='delete_reply' || in_array('do_not_allow', $caps)) {
        return $caps;
      }
    
      $_post = get_post( $args[0] );
      if (empty($_post)) {
        return $caps;
      }
    
      if ($_post->post_author==$user_id) {
        $caps = array('delete_replies');
      }
    
      return $caps;
    }
    
    add_filter('bbp_map_topic_meta_caps', 'bbp_delete_own_topics', 10, 4);
    
    function bbp_delete_own_topics($caps, $cap, $user_id, $args) {
    
      if ($cap=='delete_topic' || in_array('do_not_allow', $caps)) {
        return $caps;
      }
    
      $_post = get_post( $args[0] );
      if (empty($_post)) {
        return $caps;
      }
    
      if ($_post->post_author==$user_id) {
        $caps = array('delete_topics');
      }
    
      return $caps;
    }

     


    위 코드를 자신이 적용한 theme 폴더 밑에 functions.php에 추가하기만 하면 자신이 작성한 topic/reply에 대해서 삭제가 가능해 집니다.

    • This reply was modified 11 months, 4 weeks ago by  technote.
    • This reply was modified 11 months, 4 weeks ago by  technote.
    • This reply was modified 11 months, 3 weeks ago by  technote.
Viewing 2 posts - 1 through 2 (of 2 total)

You must be logged in to reply to this topic.