WordPress代码实现将用户关进小黑屋禁止登陆

上面是搬码 abnma.com 经由过程收集网络收拾整顿的代码片断。搬码小编此刻分享给各人,也给各人做个参考。

明天有位年夜佬问有 wordpress 用户要求刊出账号怎么办?然后群友各类建议,根据尺度操作来讲,用户要求刊出账号,则办事提供方不克不及保留用户任何信息,并全数删除。固然这句话没多约莫束力,各人不是傻瓜,我存下你的数据你又不晓得,对不合错误。别扯遥了,这位年夜佬筹算在用户登录时提醒用户该账号已被禁用,云云简朴的问题,百度必定有谜底,果不其然,百度一番后找到可用代码,不外确不克不及和前端婚配,于是简朴改动下 DUX 主题的登录接口,完成后果如下。

全数功效分为两部门,第一部门为 WordPress 克制用户登录,上面望望完成代码,为了各人应用利便,这里间接放插件代码,固然,假如你想放在主题 functions.php 文件中也是没有任何问题的。

克制用户登录

<?php

/*

Plugin Name: diend user

Plugin URI: https://www.daimadog.com

Description: 克制某用户登录

Author: 代码狗

Version: 1.0

Author URI: https://www.daimadog.com

*/

//插件头部竣事

//在资料页面添加选项

function dmd_denied_admin_init(){

// 编纂用户资料

add_action( 'edit_user_profile','dmd_denied_edit_user_profile' );

add_action( 'edit_user_profile_update','dmd_denied_edit_user_profile_update' );

}

add_action('admin_init','dmd_denied_admin_init' );

//在小我私家资料页面添加一个复选框

function dmd_denied_edit_user_profile() {

if ( !current_user_can( 'edit_users' ) ) {

return;

}

global $user_id;

// 用户不克不及克制本身

$current_user = wp_get_current_user();

$current_user_id = $current_user->ID;

if ( $current_user_id == $user_id ) {

return;

}

?>

<h3>权限设置</h3>

<table class="form-table">

<tr>

<th scope="row">克制用户登录</th>

<td><label for="dmd_denied_ban"><input name="dmd_denied_ban" type="checkbox" id="dmd_denied_ban"

<?php if (dmd_denied_is_user_banned( $user_id )){echo 'checked="checked"';} ?> /> 克制该用户登岸!</label></td>

</tr>

</table>

<?php}

//添加一个函数来将这个选项的值生存到数据库中

function dmd_denied_edit_user_profile_update() {

if ( !current_user_can( 'edit_users' ) ) {

return;

}

global $user_id;

// 用户不克不及克制本身

$current_user = wp_get_current_user();

$current_user_id = $current_user->ID;

if ( $current_user_id == $user_id ) {

return;

}

// 锁定

if( isset( $_POST['dmd_denied_ban'] ) && $_POST['dmd_denied_ban'] = 'on' ) {

dmd_denied_ban_user( $user_id );

} else { // 解锁

dmd_denied_unban_user( $user_id );

}

}

//克制用户

function dmd_denied_ban_user( $user_id ) {

$old_status = dmd_denied_is_user_banned( $user_id );

// 更新状况

if ( !$old_status ) {

update_user_option( $user_id,'dmd_denied_info',true,false );

}

}

//解禁用户

function dmd_denied_unban_user( $user_id ) {

$old_status = dmd_denied_is_user_banned( $user_id );

// 更新状况

if ( $old_status ) {

update_user_option( $user_id,false,false );

}

}

//判定用户是否被克制

function dmd_denied_is_user_banned( $user_id ) {

return get_user_option( 'dmd_denied_info',$user_id,false );

}

//制止已克制的用户登录

function dmd_denied_authenticate_user( $user ) {

if ( is_wp_error( $user ) ) {

return $user;

}

// 假如用户被克制,则返归谬误提醒

$banned = get_user_option( 'dmd_denied_info',$user->ID,false );

if ( $banned ) {

return new WP_Error( 'dmd_denied_info',__('该用户被克制登录!若有疑难请接洽站长!','denied') );

}

return $user;

}

//将该函数挂载到 wp_authenticate_user 钩子

add_filter( 'wp_authenticate_user','dmd_denied_authenticate_user',1 );

简朴注释下 wp_authenticate_user 钩子,它会在用户登录时筛选是否答应用户举行身份验证,克制也就无奈登录了。下面的代码是完备的插件代码,应用它你需求在你的插件目次中新建一个文件夹,然后将下面的代码生存为 dmd_denied.php 文件放在新建的文件夹里即可,固然还需求往 WordPress 后台插件页面启用插件。

假如你不想应用插件,那么只要要将下面插件头部竣事前面的一切代码全数复制到你的主题 functions.php 文件末了即可。下面代码失效后,随意关上一个用户的资料就可以望到一个克制用户登录的抉择框,勾选即克制登录。

改动 DUX 主题登岸接口

dux 主题的登录接口文件在主标题问题录下的 action 文件夹中的 log.php 文件中,将第 56 行到第 61 行内容(可能行号禁绝确,细心比照)

$user_verify = wp_signon( $login_data,false );

if ( is_wp_error($user_verify) ){

print_r(json_encode(array('error'=>1,'msg'=>'用户名/邮箱或暗码谬误')));

exit();

}

改为

$user_verify = wp_signon( $login_data,false );

if ( is_wp_error($user_verify) ){

$errormsg=$user_verify->get_error_messages( 'dmd_denied_info' )[0];

if($errormsg){

print_r(json_encode(array('error'=>1,'msg'=>$errormsg)));

exit();

}

print_r(json_encode(array('error'=>1,'msg'=>'用户名/邮箱或暗码谬误')));

exit();

}

到此 DUX 主题克制指定用户登录的功效就做好了,其它主题也是一样的逻辑,假如你的主题是应用的 WordPress 自带的登录页,就不必做第二步改动主题登录接口了,WordPress 会主动剖析 wp_error 谬误信息提醒用户!

以上是搬码(abnma.com)为你网络收拾整顿的全数代码内容,但愿文章可以或许帮你解决所碰到的步伐开提问题。假如感觉搬码网站内容还不错,接待将搬码网站保举给步伐员挚友。

0
分享到:
搬码资源网广告位

评论0

请先

没有账号? 忘记密码?