# Spinoko: full documentation > A full-site-editing WordPress theme for casino affiliate and review publishers. Built entirely on core WordPress APIs — no third-party field or page-builder plugins required. ============================================================ Spinoko ============================================================ --- URL: https://docs.affkraft.com/spinoko Markdown: https://docs.affkraft.com/spinoko.md # Spinoko Theme Spinoko is a full-site-editing WordPress theme for casino affiliate and review publishers. It's built entirely on core WordPress APIs — no third-party field or page-builder plugin is required to run it. *** ## Getting Started It's easy to get started with Spinoko. Follow the documentation to install the theme and build out your site. ### Requirements Before getting started make sure you have all the requirements met. To use the theme, you must be running `WordPress 7.1` or higher and `PHP 8.4` or higher. Also make sure your host has the minimum requirements to run WordPress and PHP `max_upload_size` is more than 2MB. ### Dashboard Widget Once the theme is active, your wp-admin **Dashboard** gets a Spinoko widget showing your casino/slot publish counts, quick links to Theme Options, Casino Vault and Integrations, and lists of published casinos still missing a logo, affiliate link, or bonus, and published slots still missing an image, a rating, or a casino to play at. ### Changelog Find the full changelog [here](https://affkraft.com/changelog?product=spinoko). --- URL: https://docs.affkraft.com/spinoko/installation Markdown: https://docs.affkraft.com/spinoko/installation.md # Theme Installation You can install the theme either through the WordPress dashboard (recommended) or via FTP. *** ## Before Installation Please make sure your server meets the minimum system requirements and download the theme file from your [AffKraft account](https://affkraft.com/login). ### Install through WordPress Dashboard 1. Visit WordPress dashboard → Themes and click `Add New` and `Upload Theme` after that 2. Click `Choose File`, select the theme file `spinoko.zip` and click `Install Now` 3. Activate the theme ### Install via FTP 1. Log in to your server with your FTP credentials, using an FTP client, cPanel or similar 2. Navigate to `themes` directory from your WordPress website root 3. Upload the theme file `spinoko.zip` to `themes` directory 4. Unzip the archive, you'll have a directory `spinoko` in themes 5. Remove the `spinoko.zip` file 6. Visit WordPress dashboard → Themes and activate the theme Next, [activate your license key](https://docs.affkraft.com/spinoko/license) so the theme can receive updates. --- URL: https://docs.affkraft.com/spinoko/upgrading-from-v2 Markdown: https://docs.affkraft.com/spinoko/upgrading-from-v2.md # Upgrading from v2 v3 is not an update to v2 — it's a different theme, built from scratch. v2 keeps working after v3 is released, and nothing forces you to switch. If you do want to switch to v3, AffKraft provides a free plugin, the **Spinoko v2 → v3 Migrator**, that automates most of the work. But it leaves some room for manual checks and replacements, and the amount of manual tasks depends on the amount and type of content you have. ⚠️ The plugin currently works only through `WP-CLI`, WordPress's command-line tool — there's no page for it in the dashboard, so you'll need **SSH access** to your server to use it. It adds four commands, run in this order: `export`, `import`, `cleanup-legacy`, and an optional `convert-blocks`, details in [The Commands](https://docs.affkraft.com/spinoko/upgrading-from-v2#the-commands) section. *** ## Do You Need This? This only applies to websites already running Spinoko v2. If you're starting a new website, — just [install v3](https://docs.affkraft.com/spinoko/installation). There are two separate questions to answer, and they don't affect each other. ### How many casinos and slots do you have? * **A handful** — rebuild them by hand in v3. It's quicker than running the migration and then checking every field it filled in anyway. * **Dozens or more** — use `export` and `import`. They create the casino and slot posts for you, matching names, images and categories automatically. Afterward you just review a short report of the few things they couldn't figure out on their own. ### How much of your regular content — posts and pages — uses v2's blocks? * **Just a few pages** — update them by hand. * **A large archive** — run `convert-blocks` to update them automatically instead. Mix and match freely. Migrate your casinos by hand and still run `convert-blocks` on your blog, or the other way around. *** ## Before You Start * **Back up your website** (database and files) before doing any of this. * Do it on a **staging copy** first, not the live website. * Confirm you actually have working **SSH and WP-CLI access** before you begin. > There's no undo, once you complete the migration you can't no back, it's mandatory to back up your website and try this on a staging server. *** ## Install the Plugin Download the plugin from its [GitHub repo](https://github.com/affkraft/spinoko-migrator) — click Code → Download ZIP. Install it like any other plugin — Plugins → Add New → Upload Plugin — then keep it active through the whole process. It does nothing unless you run one of the commands below. ## The Commands > ⚠️ These commands modify your database directly. ### 1. `export` — run while v2 is still active ```bash wp spinoko-migrator export [--output=] # default --output: spinoko-v2-export.json ``` Saves your casino and slot data to one JSON file, read through v2 so the values come out correctly. Errors out if v2 isn't active. **Includes:** casino and game/slot field data only. **Doesn't include:** posts, pages, menus, or site options. ### 2. `import` — run after switching to v3 ```bash wp spinoko-migrator import [--dry-run] [--v2-theme=] [--report=] # --v2-theme default: spinoko # --report default: spinoko-migration-report.md ``` Reads the export file and creates the matching casino and slot posts in v3. It skips anything that already exists under the same name, so running it twice won't create duplicates. Because this is the same site, your old v2 casino posts are still sitting on the exact URLs the new v3 casinos need. So before creating anything, `import` renames each old casino's slug and title (adding `-v2` / `(v2)`) to free those up for the new one. This command also scans your posts, pages, casinos, and slots for any v2 blocks and generates a report about it for you. Each one is marked either fine, or flagged because it has a v2 block. It will also copy your nav menu(s) from v2 to v3. * `--dry-run` previews what would happen without writing anything. It won't show which casinos or slots need manual block rebuilding — that only shows up on a real run. * `--report` (also printed to the terminal) lists: what was created or skipped, posts/pages/casinos/slots needing manual rebuilding, casinos with no country data set, old casino posts renamed pending cleanup, and how each casino's rating breakdown was mapped over. ### 3. `cleanup-legacy` — run once you've checked the import ```bash wp spinoko-migrator cleanup-legacy [--dry-run] [--force] ``` Removes the old v2 casino and game posts left behind after a migration. Moves things to trash by default; `--force` deletes them for good. `--dry-run` lists what would be removed without touching anything. Only use `--force` once you're sure: if you permanently delete a casino or slot's old v2 post and then need to re-run `import` for it, the new one will be missing its original content, author, date, and featured image. It's a separate, later step on purpose — so you can check a bad import against the old posts before anything is actually deleted. ### 4. `convert-blocks` — optional, independent of the above ```bash wp spinoko-migrator convert-blocks [--dry-run] [--report=] # --report default: spinoko-block-conversion-report.md ``` Updates existing posts, pages, casinos, and slots in place — nothing new is created — swapping v2's blocks for their v3 equivalents wherever one exists. A post with none of those blocks isn't touched. A block with no v3 equivalent is left as it is (it just stops showing anything once v2 is gone) and listed in the report instead. You can run this whether or not you migrate any casinos. Worth doing afterward: open a converted page in the block editor and check it doesn't show a "block contains unexpected or invalid content" notice. *** ## What Comes Across, and What Doesn't **URLs, titles, content, author, and publish date** stay exactly the same as they were in v2, including the original featured image. ### Casino/slot fields Casino and game/slot fields carry over with some exceptions, check below:. **Doesn't carry over:** casino website, deposit max; slot wilds, free spins, mobile-playable, reel rows; classic widgets; any colors, fonts, or layout settings from v2's Customizer (v3 controls appearance through the [Site Editor](https://docs.affkraft.com/spinoko/site-editor) instead, an unrelated system). **New in v3, nothing to migrate — just fill in by hand:** casino tagline, payout speed, customer support, KYC speed, minimum withdrawal, blacklist status, geo-specific affiliate links, currencies; most slot detail fields — release date, languages, land-based availability, markets, cluster/ scatter pays, bet/win limits, bonus buy, autoplay, quickspin, tumbling reels, increasing multipliers, orientation, restrictions, themes, types. ### Block conversions | v2 block | Becomes | | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | | Casino Countries / Payments / Games / Game Providers | Same-purpose native block (settings reset to v3's defaults) | | Casino Finder, Casino Dropdown | Casino Finder (a dropdown becomes a live search box) | | Casino CTA | Casino Card | | Casino Info (Pros & Cons) | Casino Quick Facts — shows different content: license, established, payout speed, deposit/withdrawal, support, KYC — not pros & cons | | FAQs | FAQ | | Recent Posts | Recent Posts (style variants not carried over) | | Single Bonus | Bonus Card (shows the casino's real bonus; any hand-typed text is dropped) | | Single Casino (Featured Casino) | Featured Casino (visual style and heading text dropped) | | Casinos Grid / Casinos Table | Casino Listing (a hand-picked casino list becomes an unfiltered listing of the same size; badges dropped) | | Casino Bonuses | One Bonus Card per bonus the casino actually has in v3 | | Page Links | A row of linked featured images and titles | | Show More | An expandable "read more" section (a separate "show less" label, if you had one, is dropped) | **No v3 equivalent, left as-is, still flagged:** Game Finder, Casino Ratings. *** ## Manual Checks This is where most of the real work happens, so budget time for it rather than treating it as cleanup. * **Flagged posts, pages, casinos, and slots.** `import` and `convert-blocks` both list every one that still has a v2 block with no v3 version — these go blank once v2 is gone. The report links straight to each one; open it and rebuild that part with v3's own blocks. If you already ran `convert-blocks`, only what's left over after that still needs doing. * **Rating breakdown order.** Since ratings carry over by position, check the order actually makes sense across your whole site before naming the slots on the Labels page — do this once, not per casino. * **Old posts pending cleanup.** The casino posts `import` renamed are listed for reference. Once you're happy the new version is correct, run `cleanup-legacy` to remove them. * **Affiliate links** and **old page URLs** still work. *** ## Troubleshooting * **"This must be run while the Spinoko v2 theme is active"** on `export` — switch back to v2 (and make sure ACF is active) before exporting. * **"This must be run while the Spinoko v3 theme is active"** on `import`, `cleanup-legacy`, or `convert-blocks` — v3 isn't active, or (only if you installed it from source rather than the packaged theme file) some of its files are missing. * **A casino you expected to be created shows up as "skipped"** — a casino with the same name already exists in v3, from a previous run or a demo import. * **Menus don't come across** — v2 wasn't installed under its default `spinoko` folder name; pass `--v2-theme=` with the actual folder name instead. * **A converted page shows a block-recovery notice** — a couple of block types are rebuilt as plain HTML rather than the block editor's own format. Usually harmless, worth a quick check on a few pages after converting. --- URL: https://docs.affkraft.com/spinoko/license Markdown: https://docs.affkraft.com/spinoko/license.md # License Activation You need to activate your license key to receive new security and feature updates directly in your WordPress dashboard. *** ## Activating Your Key 1. In your WordPress dashboard, go to **Spinoko** → the license key field is at the top of the main Theme Options page. 2. Paste your product key (from your [AffKraft account](https://affkraft.com/login)) and click activate. 3. The key is validated immediately against AffKraft's servers — you'll see a success or error message right away, before anything is saved. If activation fails, the message tells you why (invalid key format, the key is already tied to too many sites, a connection timeout, etc.) rather than a single generic error. ## Removing a Key Use the same field to remove/deactivate a key, for example if you're moving the license to a different site. ## What the Key Unlocks An active, valid license key is what allows the theme to check for and install updates from **Dashboard → Updates**, the same way a WordPress.org theme does. Without an active key, the theme keeps working — you just won't be offered new versions. --- URL: https://docs.affkraft.com/spinoko/site-editor Markdown: https://docs.affkraft.com/spinoko/site-editor.md # Editing Your Site Spinoko is a full-site-editing (FSE) theme, so there's no separate Customizer screen. Every visual change — colors, fonts, the header, the footer, page layout — is made in **Appearance → Editor** (the Site Editor), the same screen you already use to edit block content. *** ## Global Styles **Appearance → Editor → Styles** controls colors, typography and spacing sitewide. Spinoko ships two style variations you can switch between from the styles panel: * **Default** — a dark palette * **Light** — a light palette Both use the same set of named color slots (Base, Contrast, Primary, Accent, etc.), so switching variations re-colors the whole site consistently instead of leaving some blocks on the old palette. ## Header & Footer The header and footer are template parts (**Appearance → Editor → Patterns → Template Parts**), built from ordinary blocks — groups, navigation, site logo/title, and a couple of theme-specific blocks (the header search and notification bell, covered in their own pages). Edit them directly like any other block content; there's no separate "header builder" screen. ## Navigation Menus Spinoko uses WordPress's `wp:navigation` block for both the header and footer menus — there are no classic "menu locations" to assign in a Customizer. To edit a menu: 1. Open the Site Editor and select the Navigation block in the header or footer. 2. Add, remove, or reorder links directly, or click the menu name to switch to a different saved navigation menu. The footer additionally has three small navigation blocks side by side (Content / Company / Legal, in the default template), which you can edit or repurpose the same way. ## Homepage Layout Spinoko ships three alternate homepage designs (Home V1, V2, V3) in addition to the default. See [Templates](https://docs.affkraft.com/spinoko/templates) for how to choose which one is assigned to your front page. --- URL: https://docs.affkraft.com/spinoko/templates Markdown: https://docs.affkraft.com/spinoko/templates.md # Templates Spinoko is a block theme, so it doesn't use classic PHP page templates or a "Page Attributes → Template" dropdown tied to files you'd install with a child theme. Every template is a block template, edited visually in **Appearance → Editor → Templates**. *** ## Built-in Templates | Template | Used for | | ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Casino Archive | The full, filterable table of every published casino | | Single Casino Review | A single casino review — rating, bonus, quick facts sidebar | | Single Casino Review — Featured Hero | An alternate single-casino template with a wide hero (identity, bonus, pros/cons, rating breakdown, payment methods/currencies/games), via the Casino Hero block | | Single Casino Review — Compact Hero | An alternate single-casino template with a single-row hero (identity, rating, facts strip, one inline bonus line), via the Casino Hero (Compact) block | | Slot Archive | The full, load-more grid of every published slot | | Single Slot Review | A single slot review — facts grid, full specifications table | | Home V1 | Curated homepage: hero banner, top-rated/new casino listings, bonus grid, FAQ | | Home V2 | Alternate homepage with casino cards directly in the hero | | Home V3 | Alternate homepage with 3 small casino tiles in the hero | | Home V4 | Slot-focused homepage: top-rated/newest slot listings, with a casino bonus section for where to play them | | Home V5 | Alternate slot-focused homepage with 3 small slot tiles in the hero | | Page with Sidebar | A Page template with a two-column layout and a Table of Contents block in the sidebar | | Single, Page, Archive, Search, 404, Index | Standard WordPress fallbacks for everything else (blog posts, plain pages, category archives, etc.) | You can edit any of these directly in the Site Editor — add/remove blocks, change layout — the same way you'd edit a page. ## Choosing a Homepage The five home templates aren't separate pages you have to pick between ahead of time — they're all applied the same way you assign any template to a Page: 1. Create or open the Page you want to use as your homepage. 2. In the block editor sidebar, open the **Template** panel and choose **Home V1** through **Home V5**. 3. Set that page as your homepage under **Settings → Reading → Your homepage displays**. ## Casino & Slot Review Templates A single casino review page uses **Single Casino Review** by default. To switch it to the Featured Hero or Compact Hero variant instead, open that casino, open the block editor sidebar's **Template** panel, and choose one of the two alternates. Single slot pages have one template (**Single Slot Review**) with no alternates to choose between. What you fill in per casino/slot is covered in [Casino Pages](https://docs.affkraft.com/spinoko/casino-pages) and [Slot Pages](https://docs.affkraft.com/spinoko/slot-pages). ## Page with Sidebar For a regular Page (a long-form guide, a comparison article) that should show a sticky Table of Contents alongside the content, assign the **Page with Sidebar** template from the same **Template** panel. --- URL: https://docs.affkraft.com/spinoko/patterns Markdown: https://docs.affkraft.com/spinoko/patterns.md # Patterns Alongside its custom blocks, Spinoko ships a set of ready-made block **patterns** — pre-built groups of core blocks you can insert and then customize like normal content. Find them in the block inserter under the **Spinoko** pattern category. *** ## Available Patterns | Pattern | What it is | | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | | Hero Banner (+ v2, v3) | The homepage hero section, in three casino-focused layout variants — matching the Home V1/V2/V3 templates | | Hero Banner v4, v5 | The slot-focused equivalents of Hero Banner v2 and v3 — a live top-rated slot grid, or a stacked slot-tile ranking — matching the Home V4/V5 templates | | Verdict | An editorial summary/conclusion box with a score aside, for wrapping up a review | | Callout Card | An icon + heading + text + CTA card in a theme-tinted box | | Icon Columns | A three-column icon + heading + text strip | | Section Header | A section title with optional sub-text and a "see all" link — a starting point you trim down as needed | Patterns are plain markup once inserted — there's nothing "locked" about them. Delete a piece you don't need (like Section Header's optional sub-text) rather than looking for a setting to hide it. --- URL: https://docs.affkraft.com/spinoko/blocks Markdown: https://docs.affkraft.com/spinoko/blocks.md # Blocks Spinoko adds its own blocks (under the **Spinoko** block category) for everything casino/slot-specific — reviews, listings, comparison tables, sidebars — plus a handful of general content blocks. Insert them anywhere core blocks go, and configure them from the block toolbar/sidebar like any other block. *** ## Casino Blocks | Block | What it does | | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Casino Card | A casino review card: logo, rating, bonus, pros/cons and CTA buttons | | Bonus Card | A bonus-focused card: logo, rating, feature tags and welcome bonus | | Featured Casino | A large editor's-pick spotlight for one casino: rating, bonus, score breakdown, verdict and CTAs | | Casino Hero | A single-casino review-page hero: identity, rating, bonus, pros/cons and CTAs, alongside a rating breakdown and payment methods/currencies/games chips. Used by the Single Casino Review — Featured Hero template | | Casino Hero (Compact) | A single-row single-casino review-page hero: identity and rating, a facts strip, and one inline bonus line with a CTA. Used by the Single Casino Review — Compact Hero template | | Casino Listing | A queried list of casinos — card grid, full/compact table with filters, or bonus grid. Supports "Load more" pagination and filtering by the visitor's detected country | | Casino Finder | A live, type-to-filter search over every casino, showing top-rated casinos by default | | Casino Quick Facts | A compact sidebar card: license, established year, wagering, minimum deposit, custom taxonomies and a CTA | | Casino Tile / Casino Tiles | A ranked casino tile (logo, rank, name, first bonus, rating) for a casino picked from Casino Vault, and the group that stacks several of them | | Countries | A casino's restricted/supported countries as a flag grid | | Currencies | A casino's accepted currencies (fiat and crypto) as a grid | | Payment Methods | A casino's supported payment methods as an icon grid | | Games | A casino's supported games as an icon grid | | Game Providers | A casino's game providers as an icon grid | | Country Support | Shows whether the visitor's detected country supports a casino — bonus/CTA if it does, alternatives link if it doesn't. For review pages | ## Slot Blocks | Block | What it does | | ---------------------- | ---------------------------------------------------------------------------------------------------------------------------- | | Slot Card | A slot review hero: logo tile, type/theme tags, name, provider byline, facts grid and a play CTA | | Slot Listing | A queried grid of slots with optional type/theme/provider filters and "Load more" pagination | | Slot Finder | A live, type-to-filter search over every slot, showing top-rated slots by default | | Slot Specifications | The full spec table for a slot — provider, type, themes, release date, and every stat field | | Slot Casino Picks | Sidebar widget listing casinos a slot is playable at (linked casino + top casinos), each with bonus and claim link | | Slot Where to Play | The full "Where to Play" comparison table for a slot | | Slot Tile / Slot Tiles | A ranked slot tile (thumbnail, rank, name, provider/type, rating) for a real slot, and the group that stacks several of them | ## Content Blocks | Block | What it does | | ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | | FAQ | A grid of frequently-asked questions, with automatic Schema.org FAQPage markup | | Stat Breakdown | A row of weighted stat items (value + label + description), fully editable | | Link Tile / Link Tiles | A link + icon + label + sublabel tile, and the row that groups several | | Table of Contents | A sticky sidebar nav linking to the post's H2 sections, highlighting the current one as the reader scrolls | | Reading Progress | A thin fixed bar under the header that fills as the reader scrolls | | Share Buttons | Share-to-Facebook/X/LinkedIn links plus an optional copy-link button; platforms shown are configurable per instance | | Author Bio | A bigger author card (avatar, name, job title, bio) for the end of an article — one per byline author | | Post Byline | Avatar + linked author name(s) plus the published/updated/reading-time meta line | | Recent Posts | A queried list of blog posts — featured + sidebar list, card grid, stacked list with bylines, or minimal image-overlay cards. Optionally filtered by category/tag | ## Theme Chrome Blocks These are built for use in the header/footer template parts or singular templates specifically — they're available in the inserter, but there's rarely a reason to add them anywhere else. | Block | What it does | | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | | Header Search | The header's search control — icon + popover form, always-visible form, or hidden | | Header Notifications | The header's notification bell — see [Header Notifications](https://docs.affkraft.com/spinoko/header-notifications) | | Breadcrumbs | The breadcrumb trail from whichever SEO plugin is active (Yoast, Rank Math, or All in One SEO); renders nothing if none is installed | | Post Meta | "By {author} · {date} · Updated {date} · {n} min read", for singular templates | --- URL: https://docs.affkraft.com/spinoko/casino-pages Markdown: https://docs.affkraft.com/spinoko/casino-pages.md # Casino Pages Casinos are their own content type in Spinoko — separate from Posts and Pages — so they get their own archive, their own review template, and a dedicated editing sidebar instead of you building each review's layout by hand. *** ## Creating a Casino Go to **Casinos → Add New** in the wp-admin menu. The page title and main editor are used for the review write-up itself; everything else (rating, bonus, facts) is filled in from the **Casino Details** panel in the block editor sidebar, not the content area. ### Main Info * Logo * Name * Tagline * Affiliate URL * Blacklisted (toggle) + Blacklist reason — mark a casino as blacklisted to swap its normal CTA/recommendation treatment for a warning across every block that displays it ### Ratings * Overall Rating (out of 10) * Rating Breakdown — up to 6 individually-scored slots (e.g. "Payout Speed", "Game Selection") shown on Featured Casino and the Casino Hero template block. Each slot's display name is a sitewide default renamed from [Labels](https://docs.affkraft.com/spinoko/labels), not stored per casino, so renaming a slot there updates it everywhere at once. Leave a slot blank to skip it. ### Casino Facts License/jurisdiction, established year, payout speed, minimum deposit, minimum withdrawal, customer support, KYC speed — these feed the Casino Quick Facts block automatically. ### Pros & Cons Two free-form lists, shown wherever a Casino Card/Featured Casino block displays pros/cons. ### Bonuses A repeatable list — each entry has its own type, bonus text, bonus code, short/full terms text, terms link, and an optional per-bonus affiliate link. A bonus's own affiliate link, when set, always takes priority over both the casino's main Affiliate URL and any Geo Affiliate Link (see below). ### Geo Affiliate Links Per-country overrides of the main Affiliate URL — set a different affiliate link for visitors detected in a specific country. A geo link overrides the main Affiliate URL, but a bonus's own affiliate link still wins over both when that bonus is the one being shown. ## Taxonomies Casinos can be tagged with: * **Casino Categories** / **Casino Tags** — general organization * **Countries** — supported/restricted countries (drives Country Support and the Countries block) * **Payment Methods** * **Currencies** * **Casino Games** * **Game Providers** The last four have their own icon/logo per term (set when editing the term, not the casino) and can be pre-populated in bulk — see [Data Import](https://docs.affkraft.com/spinoko/data-import). ## Displaying Casinos Use the [Casino Card, Casino Listing, Casino Finder, Featured Casino, Casino Hero, and related blocks](https://docs.affkraft.com/spinoko/blocks) anywhere you want casinos to appear — they aren't limited to the built-in Casino Archive template. ## Casino URL Slug By default casino pages live at `/casino/your-casino-name/`. Change the `/casino/` part from **Spinoko → Settings** (the "Casino Slug" field on the main Theme Options page). --- URL: https://docs.affkraft.com/spinoko/slot-pages Markdown: https://docs.affkraft.com/spinoko/slot-pages.md # Slot Pages Slots are a separate content type from Casinos, with their own archive (`/slots/`) and single review template (`/slot/your-slot-name/`). Use them for individual slot game reviews, distinct from a casino operator review. *** ## Creating a Slot Go to **Slots → Add New**. As with Casinos, the write-up goes in the main editor; the structured data lives in the **Slot Details** sidebar panel. ### Main Info Screenshot, name, software provider, slot type, rating (out of 10). ### Pros & Cons Two free-form lists, same shape as Casino Pages. ### Stats RTP, volatility, reels, paylines, min/max bet, release date, progressive jackpot toggle, plus an "advanced fields" section: currencies, languages, also-land-based toggle, markets, cluster pays, scatter pays, max exposure, max win per spin, bonus buy, autoplay, quick spin, tumbling reels, increasing multipliers, orientation, restrictions. These feed the Slot Specifications block automatically. ### Where to Play Link the slot to a real Casino from your site (the linked casino), plus optionally list additional "top casinos" to play it at. This drives both the Slot Casino Picks sidebar widget and the Slot Where to Play comparison table. ## Taxonomies Slots can be tagged with **Slot Types** and **Slot Themes**, both of which can be bulk-seeded from [Data Import](https://docs.affkraft.com/spinoko/data-import). ## Displaying Slots Use the [Slot Card, Slot Listing, Slot Finder, Slot Tile/Slot Tiles, Slot Specifications, Slot Casino Picks, and Slot Where to Play blocks](https://docs.affkraft.com/spinoko/blocks) anywhere you want slots to appear, in addition to the built-in Slot Archive template. --- URL: https://docs.affkraft.com/spinoko/casino-vault Markdown: https://docs.affkraft.com/spinoko/casino-vault.md # Casino Vault Casino Vault is a search-as-you-type lookup against AffKraft's remote casino-data service, so you can pull in a well-known operator's details instead of typing everything in by hand. *** ## Importing a Casino 1. Go to **Spinoko → Casino Vault**. 2. Type an operator's name — it's search-only, there's no browsable list of the full catalog, so search for a specific casino you already know you want. 3. Pick the matching result and import it. Importing creates a new Casino post and fills in the same fields you'd otherwise fill in yourself from the Casino Details sidebar — meta (rating, facts, bonuses), taxonomy terms, and the logo — using the same sanitization rules as manual entry, so an imported casino is indistinguishable from one entered by hand. You can edit anything about it afterward. --- URL: https://docs.affkraft.com/spinoko/data-import Markdown: https://docs.affkraft.com/spinoko/data-import.md # Data Import **Spinoko → Data Import** is where you populate a new site with content instead of building everything by hand — a one-click demo import, starter taxonomy terms, and a way to move a site's full content and appearance between Spinoko installs via a JSON file. *** ## Demo Websites Import one of the theme's demo websites with one click — content, media, settings, styles/customizations, navigation menus and everything else that makes the demo look the way it does. Importing runs step by step with a progress bar (terms, then casinos/slots/ posts, then menus, then site options/styles/templates last) rather than one long request. It's safe to import onto an existing site — it doesn't delete anything already there, it just adds the demo's content alongside it. ## Casino Vault A "Visit Casino Vault" link to import individual real casinos one at a time — see [Casino Vault](https://docs.affkraft.com/spinoko/casino-vault) for the search-as-you-type flow itself. ## Casino & Slot Terms Buttons to seed a starter set of taxonomy terms, one per taxonomy: * Payment Methods * Currencies * Games * Game Providers * Countries * Slot Types * Slot Themes Each button adds the default term set for that taxonomy (name, icon/logo, and any relevant term meta — e.g. a currency's symbol) without touching terms you've already created or edited. Running it again is safe; it won't duplicate terms that already exist. Once added, edit, remove, or add your own from each taxonomy's own admin screen at any time. ## Import from File Upload a JSON file previously produced by **Export This Website** (below) — either from this same site, or exported from a different Spinoko install — to bring its casinos, slots, terms, posts/pages, menus and appearance settings into this site. Runs step by step with the same progress bar as a demo import, and is safe to re-run: importing the same file twice doesn't create duplicates, and importing a different export on top just layers its content in alongside what's already there. ## Export This Website Downloads a single JSON file containing everything: casinos, slots, taxonomy terms, posts and pages, navigation menus, and the appearance-affecting site options, Global Styles, and any template/template part customizations. Re-import that file here later, or on a different Spinoko website, to restore this exact content. --- URL: https://docs.affkraft.com/spinoko/labels Markdown: https://docs.affkraft.com/spinoko/labels.md # Labels Buttons, headings and other bits of hardcoded text across the casino/slot block family ("Claim Bonus", "Show more", "Pros", the reading-time format, etc.) aren't hardcoded strings you'd need a translation file to change — they're editable from one settings screen. *** ## Editing Labels Go to **Spinoko → Labels**. Fields are grouped by scope: * **Global** — reused across multiple blocks (CTA button text, pros/cons headings, byline/date prefixes, reading time format, etc.) * **Bonus** — the per-bonus-type labels (Welcome, No Deposit, Reload, Free Spins, Cashback, VIP/Loyalty, Other) and bonus terms/copy-feedback text * **Rating** — the display name for each of the 6 Rating Breakdown slots (see [Casino Pages](https://docs.affkraft.com/spinoko/casino-pages)), including the variants shown on Featured Casino and Casino Hero * **Tile Grid blocks** — shared text for Countries/Currencies/Payment Methods/Games/Game Providers ("Show more", item counts) * One section per block that has its own specific text — Header, Featured Casino, Casino Hero, Casino Hero (Compact), Casino Finder, Bonus Card, Casino Listing (plus its Table and Compact views separately), Casino Quick Facts, Recent Posts, Table of Contents, Country Support, Slot Card, Slot Specifications, Slot Casino Picks, Slot Where to Play, Slot Listing, Slot Finder, Share Buttons A change here is a sitewide default — every instance of that block falls back to it. Where a block also exposes the same text as a per-instance attribute (in the block's own sidebar), that per-instance value overrides the sitewide default just for that one block. --- URL: https://docs.affkraft.com/spinoko/header-notifications Markdown: https://docs.affkraft.com/spinoko/header-notifications.md # Header Notifications The site header can show a notification bell that opens a small popover — useful for a new bonus alert, a review update, or a site announcement. It's a fixed set of up to three items you set from settings, not a post type you publish to. *** ## Setting Up Notifications Go to **Spinoko → Notifications**. You get up to three notification slots, each with: * Thumbnail image * Text * Subtext * Link Leave a slot's text empty to skip it — the bell only shows a badge/count for the slots you've actually filled in, and if none are filled in the bell doesn't render at all. The bell itself is the Header Notifications block, already placed in the default header template part — see [Editing Your Site](https://docs.affkraft.com/spinoko/site-editor) if you've removed it and need to add it back. --- URL: https://docs.affkraft.com/spinoko/geo-targeting Markdown: https://docs.affkraft.com/spinoko/geo-targeting.md # Geo-Targeting Spinoko detects each visitor's country and uses it to tailor casino content — no separate geo-targeting plugin needed, this is built into the theme. *** ## How Detection Works Out of the box, detection uses the `CF-IPCountry` header if your site is behind Cloudflare — no setup required. If a visitor's country can't be determined, a site-wide default applies. ## Where It's Used * **Casino Listing** block's visitor-country filter — show only casinos available in the visitor's country * **Country Support** block/sections on review pages — shows a bonus/CTA when the visitor's country is supported, or an alternatives link when it's not * **Geo Affiliate Links** on a casino (see [Casino Pages](https://docs.affkraft.com/spinoko/casino-pages)) — per-country affiliate link overrides ## Alternatives Page When a casino isn't supported in a visitor's country, Country Support can link to an "alternatives" page instead. Set the default page from **Spinoko → Settings** ("Alternatives page") — an individual Country Support block can still override this default for that one instance. The link's text is editable from [Labels](https://docs.affkraft.com/spinoko/labels) ("Alternatives link text"). --- URL: https://docs.affkraft.com/spinoko/ai Markdown: https://docs.affkraft.com/spinoko/ai.md # Spinoko & AI With Spinoko 3.2.0 you can manage your casino and slot reviews from an AI chat. Ask Claude or ChatGPT something like "which casinos have no bonus yet?" or "add a 100 free spins welcome bonus to Casino X", and it does the work on your website for you. This page explains how to set that up. If you are a developer using a coding tool such as Claude Code, skip to [Coding agents and developer tools](https://docs.affkraft.com/spinoko/ai#coding-agents-and-developer-tools). *** ## Manage your website from a chat ### How it works An AI assistant doesn't log in to your dashboard and click around like you do. Instead, your website gives it a list of specific tasks it is allowed to do, such as "list casinos", "update a casino" or "add a bonus". WordPress calls these tasks **abilities**. To make this work you need three things: 1. **Spinoko** provides the abilities for your casinos, slots, bonuses and theme settings. You choose which ones to offer on the **Spinoko → AI & Abilities** page. 2. **"[MCP Adapter](https://wordpress.org/plugins/mcp-adapter/)"**, a free plugin, lets AI apps connect to your website and use those abilities. 3. **"[Enable Abilities for MCP](https://wordpress.org/plugins/enable-abilities-for-mcp/)"**, a free plugin, adds the sign-in. When you connect a chat app, you log in to your WordPress website and approve the connection, much like "Sign in with Google" on other websites. The assistant then works as the WordPress user you signed in with. If that user isn't allowed to do something, the assistant can't do it either. > **Warning** > > Your website must be online and use HTTPS, because the chat app connects to it > over the internet. A local website, or a staging website behind a password, > won't work. ### Set it up 1. **Install the plugins.** Go to **Spinoko → AI & Abilities**. The **Status** box at the top has buttons to install and activate both plugins. 2. **Choose what the assistant can do.** On the same page, tick **Enable abilities**, then tick the groups you want and click **Save Changes**. The default groups let the assistant read and edit casinos and slots, but not delete anything or change your settings. 3. **Turn on sign-in.** Go to **Settings → WP Abilities**, open the **Connection** tab and turn on the OAuth connector. 4. **Connect your chat app.** In your chat app, add a *custom connector* and paste your website address. You'll be sent to your WordPress login page: sign in and approve. 5. **Try it.** Start a new chat, make sure the connector is switched on for it, and ask "list my five most recent casinos". Where to add a custom connector depends on the app. Menu names change often, so treat these as a guide: | App | Where | | --- | --- | | Claude | **Settings → Connectors → Add custom connector** | | ChatGPT | Turn on Developer Mode in **Settings → Apps & Connectors → Advanced settings**, then create a connector with your website address and OAuth sign-in. Paid plans only, at the time of writing. | | Gemini | **Settings → Connected Apps → Add a custom app**. Available to personal accounts in the US only, at the time of writing. | > **Tip** > > "Enable Abilities for MCP" also comes with its own abilities for posts, pages, > media and more. Spinoko doesn't need them, so turn on only the ones you want on > its **Abilities** tab. ### The AI & Abilities page **Status** tells you whether everything is ready. A green tick means that part is fine; a warning icon tells you what's missing, usually with a button to fix it. * **MCP Adapter** and **Chat app sign-in (OAuth)** show whether the two plugins are active. * **Spinoko abilities** shows how many tasks the assistant can currently use. * **Hidden elsewhere** only appears if "Enable Abilities for MCP" has switched off some of Spinoko's abilities on its own screen. Turn them back on there if you want to use them. **Ability Groups** starts with the main switch, **Enable abilities**. It is off by default, and while it's off, assistants can't do anything with your Spinoko data. Below it, related tasks are grouped together, for example everything needed to create and update casinos. **Individual abilities (advanced)** lets you switch off a single task inside a group you turned on. For example, you can let the assistant update casinos but not remove bonuses. ### Ability groups "Who can use it" means which WordPress users the assistant can sign in as to use that group. | Group | Abilities | Who can use it | Default | | --- | --- | --- | --- | | List, view and audit casinos | `spinoko/list-casinos`, `spinoko/get-casino`, `spinoko/audit-casinos` | Users who can edit posts (Contributor and up) | On | | Create and update casinos | `spinoko/create-casino`, `spinoko/update-casino`, `spinoko/upsert-bonus`, `spinoko/remove-bonus`, `spinoko/set-casino-template` | Users who can edit posts, only on posts they may edit | On | | Move casinos to trash | `spinoko/trash-casino` | Users who can delete that post | Off | | List, view and audit slots | `spinoko/list-slots`, `spinoko/get-slot`, `spinoko/audit-slots` | Users who can edit posts (Contributor and up) | On | | Create and update slots | `spinoko/create-slot`, `spinoko/update-slot` | Users who can edit posts, only on posts they may edit | On | | Move slots to trash | `spinoko/trash-slot` | Users who can delete that post | Off | | Taxonomy terms | `spinoko/list-terms`, `spinoko/update-term-meta` | Users who can manage categories (Editor and up) | On | | Theme options | `spinoko/get-settings`, `spinoko/update-settings` | Administrators | Off | | Labels | `spinoko/list-labels`, `spinoko/update-labels` | Administrators | Off | | Header notifications | `spinoko/get-header-notifications`, `spinoko/update-header-notifications` | Administrators | Off | | Casino Vault | `spinoko/vault-search`, `spinoko/vault-import` | Administrators on a site with a current license | Off | ### Keeping it safe * **Use a separate WordPress user** for the assistant, with the Editor role, instead of your own Administrator account. * **Start with the default groups** and turn on more only when you need them. * **Nothing goes live by accident.** New casinos and slots, including Casino Vault imports, are always saved as drafts. * **Nothing is deleted for good.** "Move to trash" only moves posts to the Trash, where you can restore them. * **Ask to see changes first**, especially for bulk edits: "show me the changes before saving". ### Things you can ask * "Audit my casinos for missing data and list what's missing." * "Which slots have no casino to play at?" * "Add a 100 free spins welcome bonus to *casino name*. Show me the change before saving." * "Create a draft slot review for *slot name* and link it to our top three casinos." * "Search Casino Vault for *casino name* and import it." Checks for missing data work the same way as the **Casinos with issues** and **Slots with issues** lists on your Dashboard. A casino is flagged when it has no logo, no affiliate link or no bonus. A slot is flagged when it has no image, no rating or no casino to play at. *** ## Coding agents and developer tools Tools such as Claude Code, Codex or Cursor don't need the chat-app sign-in, so "Enable Abilities for MCP" isn't required. You still turn on the abilities in **Spinoko → AI & Abilities**. ### MCP over HTTP Needs the "MCP Adapter" plugin and a WordPress [Application Password](https://developer.wordpress.org/advanced-administration/security/application-passwords/) (**Users → Profile**). The `@automattic/mcp-wordpress-remote` proxy connects to the endpoint. For Claude Code: ```bash claude mcp add wordpress \ --env WP_API_URL=https://example.com/wp-json/mcp/mcp-adapter-default-server \ --env WP_API_USERNAME=your-user \ --env WP_API_PASSWORD="xxxx xxxx xxxx xxxx xxxx xxxx" \ -- npx -y @automattic/mcp-wordpress-remote@latest ``` ### MCP over WP-CLI On a local site, or over SSH, you can skip HTTP and run the MCP server through WP-CLI (STDIO): ```bash wp mcp-adapter list wp mcp-adapter serve --server=mcp-adapter-default-server --user=admin ``` ### WordPress REST API Casinos and slots are normal REST-enabled post types, and all Spinoko fields are exposed as post meta, so no extra plugin is needed: ```bash # List casinos curl -u "your-user:APPLICATION_PASSWORD" \ "https://example.com/wp-json/wp/v2/casino?per_page=5" # Update a field curl -u "your-user:APPLICATION_PASSWORD" -X POST \ -H "Content-Type: application/json" \ -d '{"meta":{"rating":9.5}}' \ "https://example.com/wp-json/wp/v2/casino/123" ``` Slots are at `/wp-json/wp/v2/slot`, and taxonomy terms at `/wp-json/wp/v2/`, for example `casino_categories` or `slot_types`. Abilities with REST enabled are also listed by WordPress itself at `/wp-json/wp-abilities/v1/abilities`. Spinoko's abilities are in the `spinoko` category. ### WP-CLI ```bash wp post list --post_type=casino --fields=ID,post_title,post_status wp post meta update 123 rating 9.5 ``` *** ## AI writing helpers in the editor The official WordPress AI plugin adds writing helpers inside the Block Editor, such as titles, excerpts and alt text. It works alongside Spinoko and is a different thing from managing your website from a chat assistant. --- URL: https://docs.affkraft.com/spinoko/settings Markdown: https://docs.affkraft.com/spinoko/settings.md # Theme Options **Spinoko → Theme Options** is the main settings screen — everything that doesn't have a dedicated screen of its own lives here. *** ## License Key See [License Activation](https://docs.affkraft.com/spinoko/license). ## Casino Page Options * **Casino review page slug** — the URL segment single casino reviews are published under (e.g. `yoursite.com/{slug}/example-casino`). Changing it updates every casino URL immediately. * **Rich snippet** — toggles Product rich snippet (schema.org) markup on casino pages, for Google's star rich result. * **Rich snippet review author** — who the review is attributed to in that markup: the organization (this site) or the review's post author. ## External Link Options * **External link rel attribute** — the `rel` attribute set on external affiliate links. Defaults to `nofollow noopener noreferrer`. * **External link target attribute** — the `target` attribute set on external affiliate links. Defaults to `_blank`. ## Country Support Options * **Alternatives page** — see [Geo-Targeting](https://docs.affkraft.com/spinoko/geo-targeting). ## Custom Scripts * **Header scripts** — pasted as-is near the end of every page's `` (analytics, verification meta tags, etc.) * **Footer scripts** — pasted as-is near the end of every page, just before ``. --- URL: https://docs.affkraft.com/spinoko/integrations Markdown: https://docs.affkraft.com/spinoko/integrations.md # Integrations **Spinoko → Integrations** lists connections between Spinoko and other tools. This area is still being rolled out — check this screen in your dashboard for the latest status rather than relying on this page. Want to manage your casinos and slots from Claude or ChatGPT? See [AI](https://docs.affkraft.com/spinoko/ai). *** ## Nonaki [Nonaki](https://affkraft.com/nonaki) is a free, separately-installed AffKraft plugin for cloaked redirect links with built-in analytics. Once it's active, connect it from the Integrations screen — this adds a "Create Nonaki Link" button next to every affiliate URL field in the casino editor, so you can cloak a link on the spot without leaving the page. ## tablrr [tablrr](https://tablrr.app) is a centralized listings platform for casino affiliates managing multiple websites. Instead of updating casino details on every site, you manage them in one dashboard and every connected website stays in sync. Spinoko's integration works in two directions, both controlled from the **tablrr** menu in your WordPress admin: * **Push:** **Publish Casinos to tablrr** sends your existing published casinos to tablrr as operators, with custom fields and field groups created for you. Every casino is mapped to its operator automatically, including ones already on tablrr, which are skipped rather than sent again. * **Pull:** **Operator Sync** copies operator data from tablrr onto the mapped casino pages every hour, or on demand with **Sync now**. tablrr overwrites the synced fields on your site. You need Spinoko 3.0.0 or later, the tablrr plugin, and a tablrr plan with custom fields (Hobby or higher). See the full reference, [Spinoko and tablrr Integration](https://docs.affkraft.com/spinoko/integrations/tablrr), for setup, every field sent and synced, mapping a second site, behavior and limits, and troubleshooting. --- URL: https://docs.affkraft.com/spinoko/integrations/tablrr Markdown: https://docs.affkraft.com/spinoko/integrations/tablrr.md # Spinoko and tablrr Integration [tablrr](https://tablrr.app) is a centralized platform for casino affiliates managing multiple websites. You keep each casino's details in one dashboard, and every connected website reads from it. Spinoko's integration syncs **operator data** in both directions: * **Push** — **Publish Casinos to tablrr** sends your existing Spinoko casinos to your tablrr account as operators, so you don't re-enter them. * **Pull** — **Operator Sync** copies operator data from tablrr back onto the matching casino pages, every hour or on demand. Both are controlled from the **tablrr** menu in your WordPress admin, which is added by the tablrr plugin. *** ## Requirements * **Spinoko 3.0.0 or later.** With an older Spinoko, the plugin doesn't show the **Operator Sync** and **Publish Casinos to tablrr** sections at all. A child theme of Spinoko works, since the plugin checks the parent theme. * The **tablrr WordPress plugin**, installed, activated and connected to your tablrr account. * **A tablrr plan with custom fields** (Hobby or higher). Bonuses, licenses, payout speed, geo links and most other casino data travel as custom fields. *** ## Setup 1. Install and activate the tablrr plugin, then connect your site. In the plugin's **Domain Verification** section, enter the verification code from your tablrr account and click **Verify Domain**. See the [tablrr sites guide](https://docs.tablrr.app/sites). 2. Open the **tablrr** menu in WordPress. Expand **Publish Casinos to tablrr** and click the button to send your casinos to tablrr (see [Publish Casinos to tablrr](https://docs.affkraft.com/spinoko/integrations/tablrr#publish-casinos-to-tablrr)). 3. Expand **Operator Sync**, tick **Enable operator sync** (“Sync operator data from tablrr to your site”) and click **Save**. Once sync is enabled, the **Sync Schedule** and **Operator mapping** areas appear in the same section. If you disable sync later, the hourly schedule is removed; the saved mapping is kept. *** ## Publish Casinos to tablrr Expand **Publish Casinos to tablrr** under the **tablrr** menu and click the **Publish Casinos to tablrr** button. It sends every casino with the status **Published** (drafts and other statuses are not sent). ### What is sent | Spinoko | tablrr operator field | | ------------------------------------------- | ---------------------------------------- | | Name (falls back to the post title) | Name | | Post slug | Slug | | (type) | Type: always `casino` | | Tagline | Description | | Overall Rating (0–10) | Rating (0–5), see below | | First bonus of type `welcome`: bonus text | Bonus | | That bonus's full terms, or short terms if full is empty | Terms and conditions | | That bonus's terms link | Terms link | | That bonus's affiliate URL, or the casino's Affiliate URL if empty | Affiliate link | | Logo (the image URL) | Logo | | Pros (text of each item) | Features | | Countries (restricted countries) | Restricted countries | | Currencies | Supported currencies | | Payment Methods | Payment methods | | Game Providers | Software providers | | Casino Games | Games | Rating is converted from Spinoko's 0–10 scale to tablrr's 0–5 scale by dividing by two (rounded to two decimals; values outside 0–10 are clamped first). Countries are matched by name to a country code. A country name the plugin can't match to a code is left out. Payment methods, game providers, games and the categories and tags below are sent with the term's name and its WordPress slug as the code, so the same term is found again on the way back. ### Custom fields and groups Everything else is sent as custom fields on the operator. You don't need to create them in tablrr first: the push includes their definitions, and tablrr creates any that don't exist yet, organized into field groups. | Group | Custom field (tablrr name) | | ----------------------------- | ----------------------------------------------------------------------------- | | Spinoko: Main Info | Blacklisted, Blacklist Reason | | Spinoko: Casino Facts | Licenses, Established Year, Payout Speed, Min Deposit, Min Withdrawal, Customer Support, KYC Speed | | Spinoko: Pros & Cons | Cons | | Spinoko: Bonuses | Bonuses (repeatable: Type, Bonus Text, Bonus Code, Terms (Short), Terms (Full), Terms Link, Affiliate URL) | | Spinoko: Geo Affiliate Links | Geo Affiliate Links (repeatable: Country, URL) | Two custom relationships are created as well, **Spinoko Categories** and **Spinoko Tags**, holding the casino's Casino Categories and Casino Tags. The Licenses value is stored in Spinoko as one comma-separated string, and is split into separate entries on tablrr. All bonuses are sent, not only the welcome bonus; the welcome bonus is additionally copied to the operator's own Bonus, Terms and Affiliate link fields. Definitions are only created when missing. An existing custom field with the same key is left as it is. ### Background batches and progress The push runs in the background in batches of 20 casinos, so large sites are fine. The status line next to the button shows **Publishing casinos... X of Y** while it runs. When it finishes, the line reads, for example, **Published 18 of 20 casinos to tablrr. 1 already existed and was skipped. 1 failed.** A failed count comes with an expandable **item(s) need attention** list showing each casino's name and the reason. ### Skipping and auto-mapping * **Skip by name.** tablrr matches on name and type. A casino whose name already exists on your tablrr account as a casino operator is skipped, and never duplicated or overwritten. This includes operators you deleted on tablrr if they are still in its trash. Names are compared as written, so a different spelling is treated as a different casino. * **Auto-mapping.** Every operator the push creates is mapped to the casino it came from. A skipped casino is mapped to the operator that already exists, so the same casinos on a second website are linked too. You don't have to do anything in **Operator mapping** for these. Existing mappings are never overwritten, and operators in tablrr's trash are not mapped. ### Running it again It is safe to run again whenever you add casinos. Casinos already on tablrr are skipped, so the push **does not update** existing operators. To change an operator that is already on tablrr, edit it on tablrr and let sync bring it back. *** ## Sync: Spinoko pulling from tablrr ### Schedule When **Enable operator sync** is on, the plugin checks tablrr **every hour** using a WordPress scheduled event. The **Sync Schedule** table shows **Last synced** (or **never**) and **Next scheduled run**. Click **Sync now** to run it immediately; it reports **Sync completed successfully.** when done. Each run asks tablrr for operators **changed since the last successful sync** (24 hours back on the very first run) and applies those that are mapped. Operators mapped since the last run, by the push or with **Save mapping**, are pulled in full on the next run, whether or not they changed on tablrr. ### What is synced and where it lands | tablrr operator | Spinoko casino | | ------------------------------- | ------------------------------------------------------------------- | | Name | Name (**Casino Details**; the post title isn't changed) | | Description | Tagline | | Affiliate link | Affiliate URL | | Rating (0–5) | Overall Rating (0–10), see below | | Features | Pros | | Cons | Cons | | Licenses | License (entries joined with a comma) | | Established Year | Established year | | Payout Speed | Payout speed | | Min Deposit | Minimum deposit | | Min Withdrawal | Minimum withdrawal | | Customer Support | Customer support | | KYC Speed | KYC speed | | Blacklisted, Blacklist Reason | Blacklisted toggle, Blacklist reason | | Bonuses | Bonuses (see below) | | Geo Affiliate Links | Geo Affiliate Links | | Logo | Logo (see below) | | Restricted countries | Countries | | Supported currencies | Currencies | | Payment methods | Payment Methods | | Software providers | Game Providers | | Games | Casino Games | | Spinoko Categories | Casino Categories | | Spinoko Tags | Casino Tags | Fields not in the table (the post content, featured image, rating breakdown and so on) aren't touched, and aren't pushed either. ### Rating tablrr stores 0–5; Spinoko stores 0–10. The sync multiplies by two and keeps the result between 0 and 10. A 4.5 on tablrr becomes 9 in Spinoko. ### Bonuses If the operator has any **Bonuses** custom-field entries, that list is treated as complete and **replaces** the casino's bonuses (type, text, code, short and full terms, terms link and affiliate URL for each entry). If the operator has none, but it has a Bonus text, the sync creates a single **welcome** bonus from the operator's Bonus, Terms and conditions and Terms link. With neither, the casino's bonuses are cleared. Geo Affiliate Links are replaced the same way, with the list from tablrr. The Affiliate URL is written from the operator's Affiliate link, and the push fills that link from the welcome bonus's own affiliate URL when it has one. After a round trip, the casino's main Affiliate URL can therefore carry the welcome bonus's link. ### Logo The logo is downloaded into the Media Library only when the casino **has no logo yet** and the operator's logo URL is a valid URL. If the casino already has a logo, whether from an earlier sync or set by hand, sync leaves it alone. To refresh it from tablrr, remove the logo on the casino first. If the download fails, the casino simply stays without a logo; there's no error message. ### Taxonomy terms Currencies, Payment Methods, Game Providers, Casino Games, Casino Categories, Casino Tags and Countries are **replaced** with the terms from tablrr: a term that tablrr no longer lists is removed from that casino (the term itself stays in WordPress). For each term from tablrr: 1. It is matched to an existing term by slug (the code), then by name. Countries are matched by name, after translating the country code to Spinoko's own country name. 2. If none exists, a new term is created. So the sync can add terms to your site that you hadn't created yet. Term icons and logos are not synced; set them on the term as usual (see [Data Import](https://docs.affkraft.com/spinoko/data-import)). ### Custom mapping file The three simple fields in the table (Name, Description, Affiliate link) can be remapped to different meta keys by placing a JSON file at `tablrr/operator-mapping-spinoko.json` in the active (child) theme. This affects only those three fields; everything else always lands where the table says. *** ## Behavior and limits * **tablrr overwrites local edits.** For a mapped casino, a sync writes every field in the table, including empty values. If tablrr has a blank tagline, the tagline on your site is cleared. Make your edits on tablrr. Edits to fields not in the table are untouched. * **Sync never creates posts.** It updates casinos that already exist and are mapped. A new operator on tablrr doesn't create a casino on your site; create the casino first (or push it from WordPress), then map it. * **Only mapped casinos sync.** An operator without a casino selected in **Operator mapping** is ignored. * **URLs don't change.** The casino's slug is never changed by sync, even if the operator's slug on tablrr differs. * **Deleting an operator on tablrr.** Deleted operators stop appearing in tablrr's responses, so nothing arrives for them. The casino on your site is **not** deleted or changed; it keeps the last synced data. The operator is removed from the mapping table the next time you click **Load operators**. * **Deleting a casino on WordPress.** If the post is permanently deleted, the sync skips that operator. It doesn't recreate the casino, and the operator on tablrr is unchanged. *** ## Mapping **Operator mapping** (inside **Operator Sync**) links each tablrr operator to a Spinoko casino. The link is stored on your site. ### Automatic: from the push Casinos created by **Publish Casinos to tablrr** are mapped for you. ### Manual: Load operators For anything else, such as a casino whose name differs from its operator on tablrr, map by hand: 1. In **Operator Sync → Operator mapping**, click **Load operators**. The plugin fetches every operator on your tablrr account and lists them with their name, type and slug. 2. Next to each operator, choose the matching casino from the dropdown. The dropdown lists the **published** casinos on this site by title, so create the casinos first. 3. Click **Save mapping**. You'll see **Mapping saved successfully.** Once a mapping exists, the button reads **Reload operators**. Reloading refreshes the list from tablrr and keeps your existing choices (as long as the casino still exists), adds new operators and drops those that are gone from tablrr. ### Example: a second website You push your casinos from site A. Later you build site B with the same casinos: 1. Connect site B to tablrr and enable operator sync there. 2. Click **Publish Casinos to tablrr**. Casinos already on tablrr are skipped and mapped to their existing operators; any new ones are sent and mapped. 3. Click **Sync now**. The mapped casinos are pulled in full. Casinos are matched by name, as written. Map any that are named differently by hand (see above). From then on, an edit on tablrr reaches both sites on their next sync. ### Unmapping Choose **—** for the operator in the dropdown and click **Save mapping**. The operator stays listed but isn't synced. *** ## Troubleshooting * **No Operator Sync or Publish section.** The sections only appear when the active theme is Spinoko 3.0.0 or later. **Publish Casinos to tablrr** appears only with Spinoko. **Sync Schedule** and **Operator mapping** appear only after you've enabled sync and saved. * **“Publishing casinos... X of Y” doesn't move.** Each batch is queued as a WordPress scheduled event. If WordPress cron isn't running (for example because it's disabled on the site), batches don't run. * **Failed items after a push.** Open the **item(s) need attention** list. A casino with no name is reported as **Casino has no name.** A casino tablrr rejects is listed with tablrr's validation message. If tablrr can't be reached or returns an invalid response, every casino in that batch is marked failed with the error. Fix the cause and run the push again; successfully published casinos are skipped. * **Sync now shows an error.** The message is the error returned when the plugin asked tablrr for operators (a connection or authentication problem, or an invalid response). Last synced is not updated, so the next run retries from the same point. * **Sync now says it completed, but nothing changed.** Check, in order: sync is enabled; the casino is selected in **Operator mapping** and saved; the operator was changed on tablrr after **Last synced** (newly mapped operators are always pulled). With nothing mapped, a run only updates **Last synced**. * **Casino has no logo after sync.** Sync only sets a logo when there's none, and only if the logo URL is valid and can be downloaded. --- URL: https://docs.affkraft.com/spinoko/child-theme Markdown: https://docs.affkraft.com/spinoko/child-theme.md # Child Themes If you need to customize theme files directly (PHP, CSS beyond what Global Styles covers, or overriding a template), do it through a child theme rather than editing Spinoko's own files — otherwise your changes are overwritten the next time you update the theme. *** ## How It Works for a Block Theme Spinoko is a full-site-editing theme, so a child theme overrides it the same way any WordPress block-theme child works: * A `templates/*.html` or `parts/*.html` file in the child theme overrides the parent's file of the same name. * A `theme.json` in the child theme merges with (and can override) the parent's. * A `functions.php` in the child theme still loads alongside the parent's, same as with a classic theme, for any PHP customizations. For most visual changes — colors, fonts, spacing — you don't need a child theme at all; use **Appearance → Editor → Styles**, which saves your customizations independently of the theme files. Reach for a child theme when you need to change actual template/part markup or PHP behavior. --- URL: https://docs.affkraft.com/spinoko/updates Markdown: https://docs.affkraft.com/spinoko/updates.md # Theme Updates Spinoko updates are baked into the theme, meaning you will receive them in your WordPress dashboard as soon as they are available and you don't have to do anything more than just clicking the update button — no need to download the theme and upload it through FTP again. This requires an [active license key](https://docs.affkraft.com/spinoko/license). Without one, the update check has nothing to authenticate against and no update will be offered. If for some reason you want to update manually, you can still download the latest theme files from your account, remove the old theme directory and upload the new one to your server. --- URL: https://docs.affkraft.com/spinoko/how-to Markdown: https://docs.affkraft.com/spinoko/how-to.md # How To ... ### How to edit the header/footer navigation menus See [Editing Your Site → Navigation Menus](https://docs.affkraft.com/spinoko/site-editor#navigation-menus). ### How to switch between the dark and light color styles See [Editing Your Site → Global Styles](https://docs.affkraft.com/spinoko/site-editor#global-styles). ### How to choose which homepage layout to use See [Templates → Choosing a Homepage](https://docs.affkraft.com/spinoko/templates#choosing-a-homepage). ### How to import an existing casino instead of typing it in by hand See [Casino Vault](https://docs.affkraft.com/spinoko/casino-vault). ### How to quickly set up a site that looks like one of the demos See [Data Import → Demo Websites](https://docs.affkraft.com/spinoko/data-import#demo-websites). ### How to move a site's content and appearance to a different Spinoko install See [Data Import → Export This Website](https://docs.affkraft.com/spinoko/data-import#export-this-website). ### How to change button/label text without editing code See [Labels](https://docs.affkraft.com/spinoko/labels). ### How to add a Table of Contents sidebar to a long-form Page See [Templates → Page with Sidebar](https://docs.affkraft.com/spinoko/templates#page-with-sidebar).