Walljump 2D doesn't work why ?

using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    private Rigidbody2D body;
    [SerializeField] private float speed;
    [SerializeField] private float jumpPower;
    [SerializeField]private LayerMask groundLayer;
    private Animator anim;
    [SerializeField] private LayerMask wallLayer;

    private BoxCollider2D boxCollider;
    private float wallJumpCooldown;
    private float horizontalInput;
    


    private void Awake()
    {
        body = GetComponent<Rigidbody2D>();
        anim = GetComponent<Animator>();
        boxCollider = GetComponent<BoxCollider2D>();
        


    }

    private void Update()
    {
        horizontalInput = Input.GetAxis("Horizontal");
        

        //Flip character when facing left, right
        if (horizontalInput > 0.01f)
        {
            transform.localScale = new Vector3((float)1.4, (float)1.4, (float)1.4);
        }else if (horizontalInput < -0.01f)
        {

            transform.localScale = new Vector3((float)-1.4, (float)1.4, (float)1.4);
        }
        if (wallJumpCooldown > 0.2f)
        {
            
            body.velocity = new Vector2(horizontalInput * speed, body.velocity.y);

            if (onWall() && !isGrounded())
            {
                body.gravityScale = 0;

                body.velocity = Vector2.zero;
            }
            else
                body.gravityScale = 1.5f;

            if (Input.GetKey(KeyCode.Space))
                Jumps();
        }
        else
            wallJumpCooldown += Time.deltaTime;

        anim.SetBool("run", horizontalInput != 0);
        anim.SetBool("grounded", isGrounded());
       

    
    }

    private void Jumps()
    {
        if (isGrounded())
        {

            body.velocity = new Vector2(body.velocity.x, jumpPower);
            anim.SetTrigger("jump");
        }
        else if (onWall() && isGrounded())
        {
            if(horizontalInput == 0)
            {
                body.velocity = new Vector2(-Mathf.Sign(transform.localScale.x) * 10, 0);
                transform.localScale = new Vector3(-Mathf.Sign(transform.localScale.x), transform.localScale.y, transform.localScale.z);
            }
            else
                body.velocity = new Vector2(-Mathf.Sign(transform.localScale.x) * 3, 6);

            wallJumpCooldown = 0;
            
        }
    }

    private void OnCollisionEnter2D(Collision2D collision)
    {
        
    }
    

    private bool isGrounded()
    {
        RaycastHit2D raycastHit = Physics2D.BoxCast(boxCollider.bounds.center, boxCollider.bounds.size, 0, Vector2.down, 0.1f, groundLayer);
        return raycastHit.collider != null;
    }


    private bool onWall()
    {
        RaycastHit2D raycastHit = Physics2D.BoxCast(boxCollider.bounds.center, boxCollider.bounds.size, 0,new Vector2(transform.localScale.x, 0), 0.1f, wallLayer);
        return raycastHit.collider != null;
    }
}

Making these floats public and looking at them while the game is running may help figure out where the problem is happening.

private float wallJumpCooldown;
private float horizontalInput;

what will help you more:

public float wallJumpCooldown;
public float horizontalInput;

also, it may be better to do this

 private void Awake()
     {
         body = GetComponent<Rigidbody2D>();
         anim = GetComponent<Animator>();
         boxCollider = GetComponent<BoxCollider2D>();
     }

like this:

 private void Start()
     {
         body = GetComponent<Rigidbody2D>();
         anim = GetComponent<Animator>();
         boxCollider = GetComponent<BoxCollider2D>();
     }