Shortcode
[live_counter]
// Initialize counter on first run
function init_live_counter() {
if (get_option('live_counter_value') === false) {
add_option('live_counter_value', 135033333);
add_option('live_counter_last_update', time());
}
}
add_action('init', 'init_live_counter');
function get_live_counter_value() {
$value = (int) get_option('live_counter_value');
$last_update = (int) get_option('live_counter_last_update');
$now = time();
$elapsed = floor(($now - $last_update) / 5);
if ($elapsed > 0) {
$value += $elapsed;
update_option('live_counter_value', $value);
update_option('live_counter_last_update', $now);
}
wp_send_json_success($value);
}
add_action('wp_ajax_get_live_counter', 'get_live_counter_value');
add_action('wp_ajax_nopriv_get_live_counter', 'get_live_counter_value');
function live_counter_shortcode() {
ob_start();
?>
<div id="live-counter">Loading...</div>
<script>
document.addEventListener("DOMContentLoaded", function () {
const counterEl = document.getElementById("live-counter");
function updateCounter() {
fetch("<?php echo admin_url('admin-ajax.php?action=get_live_counter'); ?>")
.then(res => res.json())
.then(data => {
if (data.success) {
counterEl.textContent = Number(data.data).toLocaleString();
}
});
}
// Initial load
updateCounter();
// Update every 5 seconds
setInterval(updateCounter, 5000);
});
</script>
<?php
return ob_get_clean();
}
add_shortcode('live_counter', 'live_counter_shortcode');