v2.2.0: includes/Tools/TransientTools.php

This commit is contained in:
2026-05-29 12:44:10 +00:00
parent 8c2ae77ace
commit 45889305ce
+61
View File
@@ -0,0 +1,61 @@
<?php
namespace AskTamMCP\Tools;
defined('ABSPATH') || exit;
class TransientTools {
public static function getTransient(array $args): array {
$key = sanitize_key($args['key']);
$value = get_transient($key);
return ['key'=>$key,'exists'=>$value!==false,'value'=>$value!==false?$value:null];
}
public static function setTransient(array $args): array {
$key = sanitize_key($args['key']);
$value = $args['value'];
$expiration = (int)($args['expiration'] ?? HOUR_IN_SECONDS);
set_transient($key, $value, $expiration);
return ['key'=>$key,'set'=>true,'expires_in'=>$expiration,'expires_at'=>date('Y-m-d H:i:s', time()+$expiration)];
}
public static function deleteTransient(array $args): array {
$key = sanitize_key($args['key']);
$result = delete_transient($key);
return ['key'=>$key,'deleted'=>$result];
}
public static function listTransients(array $args): array {
global $wpdb;
$search = $args['search'] ?? '';
$like = '%_transient_' . $wpdb->esc_like($search) . '%';
$rows = $wpdb->get_results($wpdb->prepare(
"SELECT option_name, LENGTH(option_value) as val_size
FROM {$wpdb->options}
WHERE option_name LIKE %s AND option_name NOT LIKE '%_transient_timeout_%'
ORDER BY option_name LIMIT 100", $like
), ARRAY_A);
$result = [];
foreach ($rows as $r) {
$key = str_replace('_transient_', '', $r['option_name']);
$exp = get_option('_transient_timeout_' . $key);
$result[] = [
'key' => $key,
'size' => (int)$r['val_size'],
'expires' => $exp ? date('Y-m-d H:i:s', (int)$exp) : 'no expiry',
'expired' => $exp && (int)$exp < time(),
];
}
return ['transients'=>$result,'count'=>count($result)];
}
public static function flushExpiredTransients(array $args): array {
global $wpdb;
$count = $wpdb->query($wpdb->prepare(
"DELETE a, b FROM {$wpdb->options} a
INNER JOIN {$wpdb->options} b ON b.option_name = REPLACE(a.option_name, '_transient_timeout_', '_transient_')
WHERE a.option_name LIKE '_transient_timeout_%%' AND a.option_value < %d", time()
));
return ['flushed'=>(int)$count,'message'=>"Deleted $count expired transient entries."];
}
}