- hvac-nocache.php: Prevents caching on HVAC pages and for logged-in users - mu-certificate-handler.php: Handles certificate URLs at earliest stage to prevent 404 errors These MU plugins are critical for proper functionality of dashboard, login, and certificate features. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
75 lines
No EOL
2.5 KiB
PHP
75 lines
No EOL
2.5 KiB
PHP
<?php
|
|
/**
|
|
* MU Plugin: HVAC Certificate URL Handler
|
|
*
|
|
* This MUST-USE plugin handles certificate URLs at the earliest possible stage
|
|
* to prevent 404 errors.
|
|
*
|
|
* Place this file in wp-content/mu-plugins/
|
|
*/
|
|
|
|
// Only run on frontend
|
|
if (!defined('ABSPATH') || defined('WP_ADMIN')) {
|
|
return;
|
|
}
|
|
|
|
// Check for certificate URLs immediately
|
|
add_action('muplugins_loaded', function() {
|
|
$request_uri = $_SERVER['REQUEST_URI'] ?? '';
|
|
$parsed = parse_url($request_uri);
|
|
$path = rtrim($parsed['path'] ?? '', '/');
|
|
|
|
// Check if this is a certificate URL
|
|
if (preg_match('#^/hvac-certificate/([a-zA-Z0-9]{32})$#', $path, $matches)) {
|
|
$token = $matches[1];
|
|
|
|
// Load WordPress to access functions
|
|
if (!function_exists('get_transient')) {
|
|
return;
|
|
}
|
|
|
|
// Hook into the earliest possible action to handle the certificate
|
|
add_action('plugins_loaded', function() use ($token) {
|
|
// Check if token exists
|
|
$certificate_data = get_transient('hvac_certificate_token_' . $token);
|
|
|
|
if (!$certificate_data) {
|
|
// Invalid token - show 404
|
|
status_header(404);
|
|
wp_die('Certificate not found', 'Not Found', array('response' => 404));
|
|
}
|
|
|
|
// Delete token to prevent reuse
|
|
delete_transient('hvac_certificate_token_' . $token);
|
|
|
|
// Get file path
|
|
$upload_dir = wp_upload_dir();
|
|
$file_path = $upload_dir['basedir'] . '/' . $certificate_data['file_path'];
|
|
|
|
if (!file_exists($file_path)) {
|
|
status_header(404);
|
|
wp_die('Certificate file not found', 'Not Found', array('response' => 404));
|
|
}
|
|
|
|
// Serve the file
|
|
$file_name = basename($file_path);
|
|
$file_size = filesize($file_path);
|
|
|
|
// Set headers
|
|
nocache_headers();
|
|
header('Content-Type: application/pdf');
|
|
header('Content-Disposition: attachment; filename="certificate.pdf"');
|
|
header('Content-Transfer-Encoding: binary');
|
|
header('Content-Length: ' . $file_size);
|
|
|
|
// Clear any output buffers
|
|
while (ob_get_level()) {
|
|
ob_end_clean();
|
|
}
|
|
|
|
// Output file
|
|
readfile($file_path);
|
|
exit;
|
|
}, 1);
|
|
}
|
|
}, 1); |