Last active
July 17, 2025 17:40
-
-
Save afragen/b45511007d0a1c07ad285ce6e223a91c to your computer and use it in GitHub Desktop.
Impose karma on specific users
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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