Sanitizar entrada de enteros para update_post_meta
Al actualizar un metadato de post donde la entrada siempre será un entero, ¿debo usar (int)
o existe alguna función de WordPress para eso (como sanitize_text_field
)?
Por ejemplo:
if(isset($_POST['category_id'])){
// Convertir a entero y actualizar el metadato
update_post_meta($post->ID, 'category_id', (int)($_POST['category_id']));
}

Para números enteros, KSES no tiene una función especial.
Utiliza (int)
o intval()
o absint()
Ver más: Validación de Datos - Enteros

// Sanitiza el ID de categoría convirtiéndolo a entero
&safe_id = intval( $_POST['category_id'] );
// Si el ID es 0 (no válido), lo establecemos como cadena vacía
if ( ! $safe_id ) {
$safe_id = '';
}
// Actualizamos los metadatos del post con el ID sanitizado
update_post_meta( $post->ID, 'category_id', $safe_id );
La función intval() convierte la entrada del usuario en un entero, y devuelve cero si el valor no era numérico. Luego verificamos si el valor resultó ser cero. Si es así, guardamos un valor vacío en la base de datos. De lo contrario, guardamos el category_id correctamente validado.

Utiliza una sentencia condicional para verificar primero si $_POST['category_id'])
es un entero. La función de PHP es is_int()
1
if(isset($_POST['category_id']) && is_int($_POST['category_id'])){
update_post_meta($post->ID, 'category_id', $_POST['category_id']);
}
También deberías eliminar los espacios en blanco de tus datos $_POST porque is_int()
devolverá falso si la cadena tiene espacios en blanco2.
