WUXIA for WordPress

Your own Netflix‑style drama site, on plain WordPress.

A free theme and plugin for Chinese and Hong Kong series and films: poster rows, title pages, an HLS player, Shorts, and the whole site in Khmer or English.

  • Version 1.1.0
  • WordPress 6.5+
  • PHP 8.1+
  • Free, GPL-2.0
The Wuxia home page: a billboard for Lighting Up the Stars above a row of new releases.
The episode page on a phone: the player, Episode 3, and next-episode buttons.

Trusted by

  • DramaSabay

Running a site on Wuxia? Get in touch on GitHub to be listed here or to have your logo added to the Site logo switch.

Two downloads, one site

Install both. The plugin keeps your catalogue; the theme shows it. Switch themes later and every drama stays.

Wuxia Core plugin

The Drama Manager in wp-admin.

  • Dramas and episodes with English and Khmer titles and synopses, genres, countries, posters and ratings
  • Storage providers for your HLS streams, played through a signed media address so the storage URL never reaches the page
  • Import whole series from iVault JSON exports
  • Settings → Site language: Khmer or English
Download wuxia-core.zip

Wuxia theme

The front end your viewers see.

  • Billboard, poster rows, Top 10 and genre rows on the home page
  • Title pages with episode lists and “More Like This”
  • An HLS player with subtitles, quality, speed and up-next
  • New & Popular, search, and a vertical Shorts feed
Download wuxia-theme.zip

Title pages that sell the next episode

Poster, rating, year and status up top, a Play button that remembers where each viewer stopped, then every episode one tap away and similar titles below.

A title page for The Lucky Stars: poster, Play, synopsis, genre tags and five episodes.

Shorts: your catalogue as a feed

A full-screen, swipe-up feed that plays a clip from a random episode of each title, with a button straight to the full episode.

The Shorts feed on a phone, playing Heavenly Sword and Dragon Slaying Sabre, Episode 29.

Khmer or English, one switch

Pick the site language in Drama Manager → Settings. The whole public site follows: menus, player, titles, synopses and numbers.

The English site never shows Khmer. The Khmer site keeps each English title as a second line.

Drama Manager settings with a Site language choice of Khmer or English.

A Drama Manager, not a blog

Dramas, episodes, genres, countries, storage and imports in one menu. The list shows each title’s episodes, status, rating and which languages are filled in.

The Dramas list in wp-admin with posters, Khmer titles, language badges, episode counts and genres.

Install in five steps

No Docker needed. Pages run on any WordPress host; video plays when nginx serves the site, with the two media rules added.

  1. Install WordPress as usual

    With your host’s one-click installer, or from wordpress.org/download.

  2. Add the plugin

    Plugins → Add New Plugin → Upload Plugin, choose wuxia-core.zip, then Activate.

  3. Add the theme

    Appearance → Themes → Add New Theme → Upload Theme, choose wuxia-theme.zip, then Activate.

  4. Turn on readable links

    Settings → Permalinks → Post name → Save. Shorts and New & Popular need it; WordPress reminds you if it’s off.

  5. Add your dramas

    Drama Manager → Import for iVault exports, or Add drama by hand. Connect your video storage under Storage Providers and choose the language under Settings.

Updating later: download the new zips and upload them the same way; WordPress asks to replace the installed version. Each release lists SHA256SUMS so you can check a download.

Let video play: two nginx rules

WordPress checks each signed /media/ link and names the file; nginx fetches it from your storage and streams it. Viewers never see where your videos live, and PHP never carries video.

  1. Copy the rules

    Download nginx-wuxia-media.conf. Part 1 goes inside http { }, part 2 inside your site’s server { }.

  2. Point it at PHP

    Change the lines marked CHANGE: the same fastcgi_pass as your site’s PHP block (for example unix:/run/php/php8.3-fpm.sock).

  3. Make the cache folder

    sudo mkdir -p /var/cache/nginx/wuxia && sudo chown -R www-data /var/cache/nginx/wuxia

  4. Reload nginx

    sudo nginx -t && sudo systemctl reload nginx, then play an episode: its .m3u8 and .ts files answer 200.

Without these rules the site still works, but every episode answers 501 Media is served through nginx. Setting up a server? The deployment guide walks through a new Ubuntu server, hosting panels and Cloudflare step by step.

Requirements

WordPress6.5 or newer (tested with 7.1)
PHP8.1 or newer
Web servernginx in front of WordPress, with Wuxia’s media rules, for video to play. Apache and LiteSpeed show the site but can’t play episodes.
Permalinks“Post name” (or any readable structure)
Your videosHLS streams (master.m3u8) on storage you own, such as Cloudflare R2, S3, Google Drive or Telegram. iVault can convert and upload them for you.
OptionalA Redis object cache speeds up large catalogues; WUXIA_MEDIA_KEY and WUXIA_SMTP_* in wp-config.php for a dedicated media key and outgoing mail.

Questions

Is it free?

Yes. The theme and plugin are free software under the GPL, version 2 or later, like WordPress itself. Use them on as many sites as you like.

Do I need both downloads?

Yes. The plugin holds your dramas and episodes; the theme displays them. The theme runs without the plugin but has nothing to show, and it tells you so in wp-admin.

Where do the videos come from?

From your own storage. Each episode points at an HLS stream (master.m3u8). The iVault desktop app converts video files and uploads them to R2, S3, Google Drive, Telegram and more, then exports JSON the plugin imports.

Does it work on shared hosting?

The site does: install, import and every page in Khmer and English work on a standard WordPress 7.1 with no extra configuration. Video playback needs nginx with the media rules, which most shared hosting (Apache or LiteSpeed) can’t add. Use a VPS, or a panel that runs nginx and accepts custom configuration.

Episodes show “501 Media is served through nginx”

The server has no media rules, so WordPress refuses to answer rather than reveal your storage address. Add the nginx rules and reload nginx. A 403 “link has expired” just means the page is more than six hours old: reload it.

Can I show the site in English only?

Yes. Choose English in Drama Manager → Settings. Titles and synopses come from each drama’s English fields, and no Khmer is shown anywhere on the public site.

I’m using Wuxia. How do I get in touch?

Open a “Using Wuxia on your site” issue on GitHub. Tell us your site’s name and address, and whether you’d like it listed under Trusted by, your logo added to Drama Manager → Settings → Site logo, or help with setup. We reply there.

How do I update?

Download the latest zips from this page and upload them again; WordPress offers to replace the current version. Your dramas, episodes and settings stay.

Start your drama site today.