Основная функция все еще работает, даже если я переопределил ее в своем коде плагина - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь переопределить базовую функцию BuddyPress, чтобы покинуть группу. Я хочу добавить новую функцию в функцию, которая просто проверяет, может ли пользователь покинуть группу или нет, как указано администратором, если да, то функция удалит и заставить пользователя уйти, если нет, я хочу показать предупреждение и заставить его застрять на экране

вот код для плагина

add_action('bp_groups_admin_meta_boxes','wdm_groups_custom_group_fields_editable');
function wdm_groups_custom_group_fields_editable(){ 

add_meta_box( 'wdm_mandatory', 'Mandatory groups Settings', 'wdm_bp_groups_mandatory', get_current_screen()->id, 'normal', 'core' );
}

function wdm_bp_groups_mandatory($item){
    $group_id = $item->id;

      $mandatoryornot = groups_get_groupmeta($group_id, 'wdm_mandatory', true);
      $msg=groups_get_groupmeta($group_id, 'wdm_msg', true);

    ?>

    <br>
<div>
  <input type="checkbox" id="scales" name="wdm_mandatory"
         <?php if(  $mandatoryornot==1){ echo 'checked';} ?>>
  <label for="scales"><b>if this checked the group members cannot leave and group</b></label>
</div>

<br><br>
 <div class="form-group col-sm-12">
      <b>Custom Message if clicked the Leave Group</b><br>
      <input type="text" class="form-control" id="email" placeholder="Enter your custom msg on leave group" name="wdm_msg" size="50" <?php if(!empty($msg)){ echo 'value="'.$msg.'"'; }?>>
    </div>

<script type="text/javascript">jQuery('input[name="wdm_mandatory"]').change(function(){
    this.value = (Number(this.checked));
});</script>

<?php }




add_action('bp_groups_admin_load','wdm_bp_groups_admin_load');
function wdm_bp_groups_admin_load($temp){

    if(isset($_POST['wdm_mandatory']) && $_POST['wdm_msg']){
        ///print_r($_POST);

         groups_update_groupmeta($_REQUEST['gid'], 'wdm_mandatory', $_POST['wdm_mandatory']);
         groups_update_groupmeta($_REQUEST['gid'], 'wdm_msg', $_POST['wdm_msg']);
    }
}






add_action( 'groups_leave_group', 'newaction', 9, 2 );





function newaction ( $group_id, $user_id = 0 ) {


    // get this so we can use the class later.
        if ( empty( $user_id ) ) 
        $user_id = bp_loggedin_user_id(); 
 // Don't let single admins leave the group. 
    if ( count( groups_get_group_admins( $group_id ) ) < 2 ) { 
        if ( groups_is_user_admin( $user_id, $group_id ) ) { 
            bp_core_add_message( __( 'As the only admin, you cannot leave the group.', 'buddypress' ), 'error' ); 
            return false; 
        } 
    } 


//getting the grouup meta check 

$mandatory=groups_get_groupmeta($group_id, 'wdm_mandatory', true);
$msg=groups_get_groupmeta($group_id, 'wdm_msg', true);

if($mandatory==1){ 
 bp_core_add_message( __( $msg, 'buddypress' ), 'error' ); 
    return false;
}

}

Я попытался add_action и add_filter код приходит в мой функция работает, но даже если я установил return false, это удаляет моего пользователя из группы, пожалуйста, помогите мне в этом

, также я пытался таким образом, но член удален из группы

add_filter( 'groups_leave_group', function( $group_id, $user_id = 0 ) {
    // get this so we can use the class later.
        if ( empty( $user_id ) ) 
        $user_id = bp_loggedin_user_id(); 
 // Don't let single admins leave the group. 
    if ( count( groups_get_group_admins( $group_id ) ) < 2 ) { 
        if ( groups_is_user_admin( $user_id, $group_id ) ) { 
            bp_core_add_message( __( 'As the only admin, you cannot leave the group.', 'buddypress' ), 'error' ); 
            return false; 
        } 
    } 


//getting the grouup meta check 

$mandatory=groups_get_groupmeta($group_id, 'wdm_mandatory', true);
$msg=groups_get_groupmeta($group_id, 'wdm_msg', true);
if($mandatory==1){
    bp_core_add_message( __( $msg, 'buddypress' ), 'error' ); 
            return false; 
}else{

    if ( ! BP_Groups_Member::delete( $user_id, $group_id ) ) { 
        return false; 
    } 

    bp_core_add_message( __( 'You successfully left the group.', 'buddypress' ) ); 


 /** 
//      * Fires after a user leaves a group. 
//      * 
//      * @since 1.0.0 
//      * 
//      * @param int $group_id ID of the group. 
//      * @param int $user_id  ID of the user leaving the group. 
//      */ 
    do_action( 'groups_leave_group', $group_id, $user_id ); 

    return true; 
}




}, 100, 2 ); 
...