Fix Admin Panel: Resolver error de nonce y validación de URLs
Dos fixes críticos para el admin panel del tema: 1. **Fix error de nonce en AJAX** - Cambiar de wp_verify_nonce() a check_ajax_referer() - check_ajax_referer() es el método recomendado por WordPress para AJAX - Aplicado en ajax_get_settings() y ajax_save_settings() - El nonce ahora se valida correctamente 2. **Fix validación de URLs relativas** - Aceptar URLs relativas que empiezan con / (ej: /catalogo) - filter_var() con FILTER_VALIDATE_URL rechazaba URLs relativas - Agregada validación adicional con regex para paths relativos - Mantiene validación para URLs completas Archivos modificados: - admin-panel/includes/class-settings-manager.php - admin-panel/includes/class-validator.php Issue: #144 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -144,10 +144,8 @@ class APUS_Settings_Manager {
|
||||
* AJAX: Obtener configuraciones
|
||||
*/
|
||||
public function ajax_get_settings() {
|
||||
// Verificar nonce
|
||||
if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'apus_admin_nonce')) {
|
||||
wp_send_json_error('Nonce inválido');
|
||||
}
|
||||
// Verificar nonce usando check_ajax_referer (método recomendado para AJAX)
|
||||
check_ajax_referer('apus_admin_nonce', 'nonce');
|
||||
|
||||
if (!current_user_can('manage_options')) {
|
||||
wp_send_json_error('Permisos insuficientes');
|
||||
@@ -161,10 +159,8 @@ class APUS_Settings_Manager {
|
||||
* AJAX: Guardar configuraciones
|
||||
*/
|
||||
public function ajax_save_settings() {
|
||||
// Verificar nonce
|
||||
if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'apus_admin_nonce')) {
|
||||
wp_send_json_error('Nonce inválido');
|
||||
}
|
||||
// Verificar nonce usando check_ajax_referer (método recomendado para AJAX)
|
||||
check_ajax_referer('apus_admin_nonce', 'nonce');
|
||||
|
||||
if (!current_user_can('manage_options')) {
|
||||
wp_send_json_error('Permisos insuficientes');
|
||||
|
||||
@@ -66,9 +66,15 @@ class APUS_Validator {
|
||||
$errors[] = 'El texto del enlace no puede exceder 50 caracteres';
|
||||
}
|
||||
|
||||
// Validar link_url
|
||||
if (!empty($top_bar['link_url']) && !filter_var($top_bar['link_url'], FILTER_VALIDATE_URL)) {
|
||||
$errors[] = 'La URL del enlace no es válida';
|
||||
// Validar link_url (acepta URLs completas y relativas que empiecen con /)
|
||||
if (!empty($top_bar['link_url'])) {
|
||||
$url = $top_bar['link_url'];
|
||||
$is_valid_url = filter_var($url, FILTER_VALIDATE_URL) !== false;
|
||||
$is_relative_url = preg_match('/^\//', $url);
|
||||
|
||||
if (!$is_valid_url && !$is_relative_url) {
|
||||
$errors[] = 'La URL del enlace no es válida';
|
||||
}
|
||||
}
|
||||
|
||||
// Validar link_target
|
||||
|
||||
Reference in New Issue
Block a user