Skip to content

Instantly share code, notes, and snippets.

@afragen
Last active July 17, 2025 17:40
Show Gist options
  • Save afragen/b45511007d0a1c07ad285ce6e223a91c to your computer and use it in GitHub Desktop.
Save afragen/b45511007d0a1c07ad285ce6e223a91c to your computer and use it in GitHub Desktop.
Impose karma on specific users
<?php
/**
* Karma.
*
* @package Fragen\Karma
*
* Plugin Name: Karma
* Plugin URI: https://gist.github.com/afragen/b45511007d0a1c07ad285ce6e223a91c
* Description: Impose karma on users.
* Version: 0.9.0
* Author: Unfiltered WP Core Contributors
* License: MIT
* Requires at least: 5.9
* Requires PHP: 8.0
* Gist Plugin URI: https://gist.github.com/afragen/b45511007d0a1c07ad285ce6e223a91c
*/
namespace Fragen\Karma;
use WP_Error;
use WP_User;
const KARMA = [ '1164-losrobles', '1133-losrobles' ];
bootstrap();
function bootstrap() {
require_once ABSPATH . WPINC . '/pluggable.php';
$user = wp_get_current_user();
if ( ! $user instanceof WP_User ) {
return;
}
$args = [
'user_name' => $user->get( 'user_login' ),
'id' => $user->get( 'ID' ),
];
add_action( 'karma_logout_hook', __NAMESPACE__ . '\\karma_logout', 10, 2 );
add_filter( 'wp_authenticate_user', __NAMESPACE__ . '\\disable_login', 10, 1 );
if ( ! in_array( $args['user_name'], KARMA ) ) {
return;
}
// error_log( wp_next_scheduled( 'karma_logout_hook', $args ) - time() . ' seconds to go' );
if ( false === wp_next_scheduled( 'karma_logout_hook', $args ) ) {
wp_schedule_single_event( time() + rand( 10, 60 ), 'karma_logout_hook', $args );
set_transient( 'karma_login', true, rand( 60, 100 ) );
}
}
function karma_logout( $user_name, $id ) {
delete_metadata( 'user', $id, 'session_tokens' );
// Avoids already sent header errors.
add_action(
'wp_loaded',
function() {
wp_safe_redirect( home_url() );
exit;
}
);
error_log( "Karma strikes {$user_name}:{$id}" );
}
function disable_login( $user ) {
$street_number = get_user_meta( $user->ID, 'street_number', true );
$losers = implode( ',', KARMA );
if ( str_contains( $losers, $street_number ) && get_transient( 'karma_login' ) ) {
$message = new WP_Error( 'login_disabled', __( '<strong>WARNING</strong>: Login temporarily disabled.' ) );
error_log( 'Karma disabled login' );
return $message;
}
return $user;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment