Back to Blog

How to Change the Mouse Cursor in WordPress (With and Without a Plugin)

Change the WordPress mouse cursor with CSS or a free plugin — image size limits, hotspots, links and buttons, touch devices and animated cursors.

To change the mouse cursor in WordPress, install a free plugin such as Ultimate Cursor, choose a cursor type, preview it and save — no code needed. Without a plugin, add a CSS rule like body { cursor: url(cursor.png) 4 4, auto; } in Additional CSS. CSS works for a small static image; animated cursors and hover effects need a plugin.

This guide covers both methods, the limits browsers put on custom cursors, and how to avoid the mistakes that make a cursor annoying instead of memorable.

Method 1: change the cursor with a plugin (no code)

Ultimate Cursor is a free plugin that replaces the pointer with text, an image, one of 113 icons, a shape or one of eight animated effects.

  1. In your dashboard, go to Plugins → Add New, search for Ultimate Cursor, then Install Now and Activate.
  2. Open the new Ultimate Cursor menu.
  3. Choose a cursor type: Text, Image, Icon, Shapes or Animated.
  4. Adjust colours, size and border. The live preview shows the result as you go.
  5. Click Save. The cursor is live on every page.

The plugin hides the custom cursor on touch devices, respects the reduced-motion setting and loads only the files your chosen effect needs. It works on pages built with the block editor, Elementor, Divi, WPBakery and other builders, because it's added to the page itself rather than to a template.

Want to see the options first? The live demo lets you try every cursor type in your browser.

Method 2: change the cursor with CSS

If you only need a small static image, CSS is enough.

  1. Create a 32 × 32 px PNG or SVG with a transparent background and upload it to the Media Library. Copy its URL.
  2. Open Appearance → Customize → Additional CSS (classic themes) or Appearance → Editor → Styles → Additional CSS (block themes).
  3. Add:
body {
  cursor: url('https://example.com/wp-content/uploads/cursor.png') 4 4, auto;
}

a,
button,
[role="button"],
input[type="submit"] {
  cursor: url('https://example.com/wp-content/uploads/cursor-hover.png') 4 4, pointer;
}
  1. Publish, then check the site in a desktop browser.

What the parts mean:

  • url(...) — the cursor image.
  • 4 4 — the hotspot: the pixel, measured from the top-left corner, that actually clicks. For an arrow, it's the tip.
  • auto / pointer — the fallback if the image can't load. A fallback keyword is required, or the whole rule is ignored.

The limits of the CSS method

CSS cursorCursor plugin
Static imageYesYes
Size32 px recommended, 128 px maximumAny size the effect needs
Animation, trails, particlesNoYes
Text or icon cursorOnly as an image you makeBuilt in
Reacts to links and buttonsOne alternate imageGrow, colour, glow, labels (plugin-dependent)
Hidden on touch devicesNothing to hideHandled automatically
Live previewNoYes

Which method should you use?

  • A small branded arrow or hand? CSS is fine. Keep a hover version for links.
  • An animated cursor, a text badge or an icon? Use a plugin; CSS can't animate the cursor.
  • Different cursors in different places? Use Ultimate Cursor Pro, which targets pages, CSS selectors and HTML elements and runs several cursor configurations at once.

Mistakes that make custom cursors annoying

  • Hiding the click point. Set the hotspot where the visitor expects the click to land.
  • Low contrast. A white cursor disappears over white sections. Use a border or a shape with a contrasting outline.
  • Overriding the text cursor in forms. Visitors need the I-beam to see where they're typing. Ultimate Cursor keeps the text cursor in form fields.
  • Constant motion. Effects that never stop distract from the content. Choose effects that pause when the pointer is still, and respect reduced motion.
  • Heavy scripts. Load cursor code only when it's used.

Next steps

Browse 10 custom cursor effects and when to use each, make the cursor react to links with an interactive hover cursor, or compare plugins in our round-up of WordPress custom cursor plugins.

Common Questions

The quickest way is a free plugin such as Ultimate Cursor — choose a text, image, icon, shape or animated cursor, check it in the live preview and save. Without a plugin, add a CSS rule that sets the cursor property to url(cursor.png) 4 4, auto on the body, in Appearance → Customize → Additional CSS or the Site Editor's custom CSS.

Keep it at 32 × 32 pixels. Browsers ignore cursor images larger than 128 × 128 pixels, and anything above 32 pixels may be shown smaller or not at all on some systems. Use a PNG or SVG with a transparent background.

Browsers switch to the pointer hand over links and buttons, which overrides a cursor set only on the body. Add the same cursor rule for a, button and other clickable elements, or use a plugin that handles hover states for you.

Not really. CSS cursor images are static, and animated GIF cursors aren't supported in most browsers. Trails, particles and effects that react to movement need JavaScript, which is what cursor plugins provide.

No. Phones and tablets have no pointer, so there is nothing to replace. A good plugin hides the custom cursor on touch devices and doesn't load its scripts there.

It can if the cursor is hard to see or hides what it's pointing at. Keep it high-contrast, keep the hotspot at the tip, keep the text cursor in form fields and respect visitors who ask their device to reduce motion.

Get new guides and releases by email

Occasional emails when we publish a guide or ship a notable plugin update. No spam — unsubscribe any time.

We only use your email to send these updates. See our privacy policy.