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
|
* AJAX: Obtener configuraciones
|
||||||
*/
|
*/
|
||||||
public function ajax_get_settings() {
|
public function ajax_get_settings() {
|
||||||
// Verificar nonce
|
// Verificar nonce usando check_ajax_referer (método recomendado para AJAX)
|
||||||
if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'apus_admin_nonce')) {
|
check_ajax_referer('apus_admin_nonce', 'nonce');
|
||||||
wp_send_json_error('Nonce inválido');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!current_user_can('manage_options')) {
|
if (!current_user_can('manage_options')) {
|
||||||
wp_send_json_error('Permisos insuficientes');
|
wp_send_json_error('Permisos insuficientes');
|
||||||
@@ -161,10 +159,8 @@ class APUS_Settings_Manager {
|
|||||||
* AJAX: Guardar configuraciones
|
* AJAX: Guardar configuraciones
|
||||||
*/
|
*/
|
||||||
public function ajax_save_settings() {
|
public function ajax_save_settings() {
|
||||||
// Verificar nonce
|
// Verificar nonce usando check_ajax_referer (método recomendado para AJAX)
|
||||||
if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'apus_admin_nonce')) {
|
check_ajax_referer('apus_admin_nonce', 'nonce');
|
||||||
wp_send_json_error('Nonce inválido');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!current_user_can('manage_options')) {
|
if (!current_user_can('manage_options')) {
|
||||||
wp_send_json_error('Permisos insuficientes');
|
wp_send_json_error('Permisos insuficientes');
|
||||||
|
|||||||
@@ -66,9 +66,15 @@ class APUS_Validator {
|
|||||||
$errors[] = 'El texto del enlace no puede exceder 50 caracteres';
|
$errors[] = 'El texto del enlace no puede exceder 50 caracteres';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validar link_url
|
// Validar link_url (acepta URLs completas y relativas que empiecen con /)
|
||||||
if (!empty($top_bar['link_url']) && !filter_var($top_bar['link_url'], FILTER_VALIDATE_URL)) {
|
if (!empty($top_bar['link_url'])) {
|
||||||
$errors[] = 'La URL del enlace no es válida';
|
$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
|
// Validar link_target
|
||||||
|
|||||||
Reference in New Issue
Block a user