Kukuriya

Description

Kukuriya turns the links to one product at several stores into a single “product” that you manage in one place, and shows it in your posts as a product card or a comparison table. Searching, inserting, designing and keeping prices current all happen in the Block Editor. The Classic Editor is supported too, through a button that inserts a shortcode.

It is for people moving from Pochipp or Rinker, people who cannot use the Amazon API yet, and anyone who links to several stores from one site.

Key features

  • One product, several stores: each product holds its links to Amazon, Rakuten Ichiba, Yahoo! Shopping and more. A card shows one button per store, in the order you choose
  • Add products from the editor: search Amazon, Rakuten Ichiba or Yahoo! Shopping, or paste a product page URL (SiteStripe short URLs amzn.to / amzn.asia work too). Products the store APIs cannot find, such as A8.net or afb items, can be registered by hand
  • 3 card templates: Card (the default), Simple (image, name and one button, no price) and Compact (the whole card is one link), plus a comparison table block for up to 10 products
  • Comparison tables you can shape: reorder the rows, add rows from custom fields or free text, mark cells with ◎ ○ △ ×, highlight the cell that decides it, put the products down the side instead of across the top, and set the button text and colour per column
  • Design controls: 4 presets (Neo / Outline / Glass / Bold), an accent colour and per-store button colours, frames, button styles, an optional “See reviews” link, and animated effects that pause for visitors who prefer reduced motion. Set them for the whole site, for one product or for one block
  • Custom fields: per-product spec fields in 5 types (text / number / select / yes-no / date)
  • CSV import / export, with a dry run that checks the file first
  • Migration from Pochipp and Rinker: copies the settings, products and affiliate IDs, then rewrites the cards inside your posts. The last step cannot be undone, so take a full site backup before you run it
  • Automatic price refresh: Amazon, Rakuten Ichiba and Yahoo! Shopping prices are fetched again every 6 hours. Prices older than 24 hours are hidden, as Amazon and Rakuten require
  • Click tracking on your own site (anonymized): the dashboard shows which products, stores and posts get clicked. IP addresses and user agents are hashed, and no cookies are used. It can be turned off under “Measurement”
  • Optional product description generation through a text generation API that you configure yourself
  • Optional credit: off by default. When turned on, a small mark and the name “Kukuriya” appear at the bottom right of cards. It is never a link
  • Translatable: every string can be translated (text domain: kukuriya)

Supported ASPs (all built in — enable the ones you use)

  • Amazon (Creators API, 15 marketplaces. A tracking ID alone is enough to make links)
  • Rakuten Ichiba (Rakuten Ichiba Item Search API)
  • Yahoo! Shopping (Shopping Web Service V3, with ValueCommerce affiliate links)
  • Moshimo Affiliate (link conversion; a way to earn from Amazon and Rakuten without their APIs)
  • Mercari (Mercari Ambassador: your afid is added to Mercari links)
  • Manual entry (A8.net / afb / ValueCommerce, etc.) (for products and services without a product API)

Usage notes

  • The Amazon Creators API needs credentials for your own account (a central proxy is not allowed under its licence)
  • Amazon gives API access only to accounts with at least 10 qualifying sales in the last 30 days. Until then, a tracking ID alone or the Moshimo Affiliate route can be used
  • Please follow the terms of service of each ASP

External services

This plugin talks to the shopping services whose connectors you turn on, using credentials that you supply. Nothing is sent anywhere until you enter credentials and enable a connector, and no data is ever sent to the plugin author.

Amazon Creators API (Login with Amazon)

Used to search Amazon and to get a product’s title, image, price and availability for your cards and their price updates. It is used only if you turn on the Amazon connector and enter your own Credential ID and Credential Secret. With only a tracking ID entered, no request is made.

It sends your Credential ID and Credential Secret to get an access token (api.amazon.com, api.amazon.co.jp or api.amazon.co.uk, depending on the marketplace). Then, on each product search, each scheduled price refresh (every 6 hours) and each card render that misses the cache, it sends the search keyword or ASIN with that token and your tracking ID. If you paste a SiteStripe short URL (amzn.to or amzn.asia) into the editor, your site also makes one request to that address to find the product it points to.

This service is provided by “Amazon.com, Inc.”: terms of use, privacy policy.

Rakuten Web Service (Rakuten Ichiba Item Search API)

Used to search Rakuten Ichiba at openapi.rakuten.co.jp and to get a product’s title, image, price and availability. It is used only if you turn on the Rakuten connector and enter your own Application ID and Access Key. It sends them, with your Affiliate ID and the search keyword or item code, on each product search, scheduled price refresh and card render that misses the cache.

This service is provided by “Rakuten Group, Inc.”: terms of use, privacy policy.

Yahoo! Shopping Web Service

Used to search Yahoo! Shopping at shopping.yahooapis.jp and to get a product’s title, image, price and availability. It is used only if you turn on the Yahoo connector and enter your own Client ID. It sends the Client ID with the search keyword or item code, on each product search, scheduled price refresh and card render that misses the cache.

This service is provided by “LY Corporation”: terms of use, privacy policy, developer guidelines.

ipify (only when you press “Find my outbound IP address”)

Rakuten asks you to register the IP address your server calls its API from. The Rakuten connector settings have a button that looks this address up. Pressing it sends a plain request, with no credentials or site data, to api.ipify.org, which replies with your server’s outbound IP address. The answer is cached for a day. If you never press the button, this service is never contacted.

This service is provided by “ipify”: terms of use and privacy policy.

A text generation API of your choosing (optional, off by default)

The optional “generate a product description” button sends a prompt with the product’s title, price and categories, plus the API key you entered, to the endpoint you entered. The plugin ships no endpoint, no key and no default address. If the setting is empty, nothing is sent. The service is provided by the company you configure, under its own terms of use and privacy policy.

Your analytics service (optional, off by default)

If you turn on click measurement under “Measurement”, the reader’s browser reports clicks on purchase buttons through the analytics tag that you or your theme already installed. This plugin adds no tag, and your server sends nothing. It sends the product ID, the product name (first 60 characters), the product code at the store (such as the ASIN, for buttons that go to a product page), the store, whether the link went to a product page or to search results, and which card in the article it was. If you also turn on card views, it sends that a card was shown on screen, with the same product ID and card position. The service is provided by the analytics company you already use, under its own terms of use and privacy policy.

Moshimo Affiliate impression pixel (only when you route a store through Moshimo)

Moshimo hands out each ad as a link that counts clicks plus a 1×1 image that counts how often the ad was shown. If you enter a Moshimo partnership ID (a_id) and route a store through Moshimo, this plugin outputs both, once per placement, so that your Moshimo dashboard reports impressions. Your visitor’s browser loads the image from i.moshimo.com when the page is shown, so Moshimo sees the visitor’s IP address, user agent, page and any Moshimo cookies. Your server sends nothing. Without an a_id or a Moshimo route, the image is never output.

This service is provided by “Moshimo Co.,Ltd.”: terms of use, privacy policy.

ValueCommerce impression pixel (only when you enter a ValueCommerce sid and pid)

ValueCommerce works the same way. If you enter a sid and pid in the ValueCommerce or Yahoo! Shopping connector, this plugin outputs a 1×1 image next to each link it converts through ValueCommerce. Your visitor’s browser loads it from ad.jp.ap.valuecommerce.com when the page is shown, so ValueCommerce sees the visitor’s IP address, user agent, page and any ValueCommerce cookies. Your server sends nothing. If the sid or pid is empty, the image is never output.

This service is provided by “ValueCommerce Co., Ltd.”: terms of use, privacy statement.

Services this plugin does NOT contact

A8.net, afb and Mercari are supported by building the affiliate URL on your own server from the IDs you enter. The plugin makes no request to them. Their addresses appear only as the destination your visitors’ browsers go to when they click a link. Moshimo Affiliate and ValueCommerce work the same way for the link itself; the only addresses contacted are the impression images above.

Source code and build

The admin screens and editor blocks are written in TypeScript and SCSS and compiled with @wordpress/scripts (webpack). The uncompiled sources are included in this plugin under assets/src/, next to the compiled output in build/, together with package.json, webpack.config.js and tsconfig.json.

To reproduce the compiled files, with Node.js 20 or later:

npm install
npm run build

No third-party JavaScript libraries are bundled. Everything the scripts use at runtime (@wordpress/element, @wordpress/components, and so on) is provided by WordPress itself.

Privacy Policy

Kukuriya stores the following anonymized data for click tracking (in the wp_bcore_clicks table):

  • HMAC-SHA256 hash of the IP address (64 hex chars)
  • HMAC-SHA256 hash of the User-Agent (64 hex chars)
  • Referrer host name only (no path / query)
  • An opaque per-tab session ID generated client-side in sessionStorage (optional)
  • Product ID / post ID / which store button / product page or search / card position / timestamp

Raw IPs, raw User-Agents, and full URLs are never stored. No cookies are used. Rows are deleted after 90 days. Recording can be switched off under “Measurement”.

External communication happens only with the services you configured, as listed under “External services”. No data is sent to the plugin developer (Pifto Works).

Screenshots

Blocks

This plugin provides 3 blocks.

  • Kukuriya Link Place a link you registered in Kukuriya. Articles only hold the key, so changing the link later updates every article.
  • Kukuriya Comparison Insert a comparison table of up to 10 Kukuriya products.
  • Kukuriya Product Insert a product card managed by Kukuriya.

Installation

Basic setup

  1. Search for Kukuriya under “Add New” in the Plugins screen, install, and activate
  2. Open the “Kukuriya” admin menu, and in the “Connectors” tab turn on the ASPs you use and enter each connector’s API keys (for example, Rakuten needs an Application ID, an Access Key and an Affiliate ID)
  3. Add the “Kukuriya Product” block in the post / page editor, then search and insert

Admin tabs

  • Dashboard: price refresh cron status and recent click summaries
  • Custom fields: CRUD for your own spec fields
  • CSV import / export: bulk migration of existing product data
  • Migration: import from Pochipp

Using the manual-entry connector route

ASPs that do not provide a product API, such as A8.net and afb, can be handled with the built-in manual-entry (Generic) connector by registering a URL template manually.

FAQ

Is it free?

Yes. Everything in this plugin is free and fully functional GPL v2+ open source, including every built-in connector. Nothing here is locked behind a licence.

A separate paid add-on plugin (Kukuriya Pro, distributed from piftoworks.com) adds sale campaigns and bulk editing. It is not required, and none of its code is part of this plugin.

Are API keys stored securely?

Yes. All API keys are encrypted with AES-256-GCM, protected by a key derived from AUTH_KEY in wp-config.php. Keys are separated per connector ID, so API keys cannot be decrypted even with direct database access.

Can I migrate from Pochipp or Rinker?

Yes. You can import Pochipp data (CPT pochipps) or Rinker data from the “Migration” tab in the admin screen. The primary ASP is determined automatically in the order of Amazon ASIN / Rakuten item code / Yahoo seller_id + itemcode, and each post is converted into a Kukuriya product with Universal Link offers. A dry-run mode lets you check counts and errors before committing.

Take a full backup of your site before you start. The migration runs in three steps, and the third one replaces the Pochipp or Rinker cards inside your posts with Kukuriya cards. There is no undo for that step: putting the old cards back means restoring your posts from a backup. Every step can be run as a dry run first, and you can limit a run to a single post while you check the result, so there is no need to do the whole site at once. The plugin also asks you to confirm that you have a backup before it will run the last step on every post.

Generic CSV import is also supported, for migrating from other tools.

Does the plugin send data to third parties?

No data is ever sent to the plugin developer (Pifto Works). Product API calls go directly to each ASP, using the API keys that you configure yourself. See the “External services” section above for exactly what is sent, to whom, and when.

Does click tracking protect visitor privacy?

Clicks are recorded in your own database only (the wp_bcore_clicks table); nothing is sent to the plugin developer. IP addresses and User-Agents are stored as HMAC-SHA256 hashes (salted from AUTH_KEY) and the original values cannot be recovered. Referrers keep the host name only (path / query are discarded). No cookies are used — a per-tab session ID lives in sessionStorage and disappears when the tab closes — so cookie consent management is not required. Rows are deleted after 90 days. Recording is on by default and can be switched off under “Measurement”.

What happens to my data when I uninstall?

By default, the 5 wp_bcore_* tables (credentials / offers / clicks / custom_fields_def / custom_fields_value) and related options / cron events are deleted. To keep the data, set the option bcore_keep_data_on_uninstall to true before deleting the plugin.

The products and the self-made links you registered are ordinary posts (custom post types bcore_product / bcore_link) and are left in place, the same way WordPress leaves posts when a plugin is removed. Delete them from the database if you want a clean slate.

Does it work on Multisite?

It works technically, but this version targets per-site operation. Network-wide aggregation and cross-site management are not implemented.

Is there product caching?

Yes. Each connector’s API responses are cached short-term via the WP Transient API. The price refresh cron persists into the wp_bcore_offers table independently of the cache, so front-end rendering stays fast at all times.

Can I write a connector for a new ASP myself?

Yes. You can distribute an independent WP plugin that implements PiftoWorks\Kukuriya\Contracts\ConnectorInterface. Register it with the core via the kukuriya_register_connectors hook, and it can use the core’s search UI, price refresh cron, click tracking, and other infrastructure as-is.

Does it work with the Classic Editor?

Yes. The “Kukuriya” button above the Classic Editor opens the same product picker as the Block Editor. Pick a product and a template, and the [bcore_product] shortcode is inserted where you were typing. Comparison tables can be placed with the [bcore_comparison] shortcode.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“Kukuriya” is open source software. The following people have contributed to this plugin.

Contributors

“Kukuriya” has been translated into 1 locale. Thank you to the translators for their contributions.

Translate “Kukuriya” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog

0.16.4

  • Fixed: opening the product picker in the editor, or the Products tab, could take several seconds on sites with many posts and products. The “Used in” column was worked out for each product separately by searching the content of every post, 50 times per page, whenever its 10-minute cache had expired. The posts are now scanned once for the whole page, and the picker’s “Saved products” tab no longer asks for it at all.

0.16.3

  • Fixed: on sites with more than about 200 products, some products were never refreshed, so their cards showed no price. The price refresh picked products in ID order, 50 at a time, four times a day, and the products at the end of the list never got a turn. Products are now refreshed oldest-first, and the refresh runs every hour instead of every 6 hours. Each product is still fetched at most once every 6 hours, so the number of requests to the stores does not change.
  • Changed: the “Refresh now” button on the dashboard also works oldest-first, so pressing it repeatedly moves through all products instead of refreshing the same ones.
  • Changed: the dashboard shows how often each product’s price is refreshed (every 6 hours) rather than how often the background job runs.

0.16.2

  • Changed: when you search a store again for a product with a broken link, the search box now starts with a short keyword made from the product name – usually the maker and the model number – instead of the whole name. Long store titles full of features found other products or nothing. The original name is shown under the search box, so you can add or remove words.

0.16.1

  • Fixed: the page cache was not cleared when a price refresh only changed a product’s own price, or when it found a broken link. Pages served from a cache plugin could keep showing an old price or a button to a missing page. The “Refresh now” button on the dashboard now clears the cache in the same way.
  • Changed: a store with a broken link is no longer counted as “needs fixing” when it has a link URL override, because its button already goes to the URL you entered. Its price stays hidden, since it was not confirmed by the store.
  • Changed: on a broken store’s row in the product editor, the product page URL box can no longer be edited. Changing it did not fix the button. The editor points to “Add from a product page URL” instead.
  • Changed: the Moshimo settings mention Amazon before Rakuten Ichiba, in the same order as everywhere else.
  • Fixed: some field labels in the admin screens, such as “Amazon” in the affiliate route settings, were shown in capital letters.
  • Added: the manual registration connector links to its step-by-step guide on kukuriya.jp.

0.16.0

This release comes from going through the plugin three times as three different people – someone moving from Pochipp, someone moving from Rinker, and someone placing their first product link – and fixing what got in their way.

  • Added: migration from Rinker. Copy the settings, import the products and rewrite the cards in your posts, in the same numbered steps as the Pochipp migration. Synced patterns are rewritten too, and cards left in widgets or other places are listed with links to edit them.
  • Added: a migration is marked as finished from the current state of the site, and a large notice tells you when it is safe to deactivate the old plugin.
  • Added: products that cannot be found by search can be registered by hand from the product picker (“Register by hand”), with an image from the Media Library. When registering by URL fails, the notice links straight to it with the URL filled in. An ad code from A8.net and the like can be pasted as it is; only the link is used.
  • Added: for products you registered yourself, the price, the product page URL and the text of the “View product” button can be changed on the Products tab. The “View product” button can be moved and turned off in the block’s button order like any store button.
  • Added: a Classic Editor button that opens the same product picker, then lets you choose the template while looking at a preview of the card.
  • Added: a Help tab, a “Getting started” panel on the dashboard, and a one-time notice after activation that points to the Kukuriya screen.
  • Added: when click measurement is on, a click on a button that goes to a product page also sends the product code at the store (such as the ASIN), so Analytics CORE can match clicks with the rewards reported by each affiliate service. Search links and custom buttons send no code.
  • Added: an optional setting under “Measurement” that also sends card views to Analytics CORE (off by default), so each card position’s clicks can be compared with how often it was seen.
  • Added: an Amazon tracking ID alone is enough. Without Creators API credentials, the Amazon button links to Amazon search results and still earns. The same applies to a Rakuten affiliate ID without API keys.
  • Changed: the “Pochipp compatible” template has been removed. Cards that used it are shown with the Card template, which is now the default. The Simple template is now a light card: image, name and one button, without a price.
  • Changed: the product name is now larger than the price on cards, and there is more room between the image and the text.
  • Changed: stores are listed in the order Amazon, Rakuten, Yahoo! Shopping everywhere in the admin screens.
  • Changed: the comparison table editor is now a grid shaped like the published table, with a wide-screen mode, labelled inputs per product and explanations for each row. Price and rating rows can hold your own text.
  • Changed: the Rakuten settings follow Rakuten’s “app list” (Application ID, Access Key, Affiliate ID in one box), the Amazon settings put the tracking ID first, and the Moshimo and ValueCommerce settings say what they are for and what to paste.
  • Changed: many screen texts in the Japanese translation were rewritten in plain words, and the price refresh panel shows hours and the number of products instead of seconds and offers.
  • Fixed: settings that cannot work are refused with the reason before they are saved – a Japanese tracking ID without “-22”, a Rakuten Application ID pasted into the Affiliate ID field, or a link that is not an ad link of that service.
  • Fixed: when Rakuten refuses a request because the server’s IP address is not registered, the connection test and the product search say so, instead of reporting a wrong key. Rakuten’s expiry date can be pasted as Rakuten shows it.
  • Fixed: the “See reviews” link is no longer shown for a product whose store page has disappeared. It comes back as soon as the product is fixed, including when the Amazon link is fixed with a URL override.
  • Fixed: a product you registered yourself now shows its price on the card. The price you entered was saved but never displayed.
  • Fixed: with only an Amazon tracking ID, the Amazon search button disappeared from cards.
  • Fixed: when a card or a product has its own button order, the block settings say that changes on the Design tab do not reach it, and offer to go back to the site setting.
  • Fixed: the editor explains why a price is not shown – older than 24 hours, not fetched yet, or not entered for a product you registered yourself.
  • Fixed: a product with a broken link now says how to fix it, in the product list and in the product editor.
  • Fixed: lists show store, product and post names instead of internal names and numbers, and untitled posts as “(No title) #123”.
  • Fixed: in the Classic Editor, choosing a product made the whole screen disappear.
  • Fixed: a card for a product without an image no longer breaks its layout, and a product whose link is broken no longer links its image and name to the missing page.

0.15.2

  • Fixed: a second store’s price could be shown long after it had stopped being fetched, with a “checked at” time that was wrong and sometimes in the future. When a store stopped returning a price – out of stock, for example – Kukuriya kept the old price and took the time of the failed attempt as the time the price was fetched. Prices are now judged by the last time they were actually fetched, so they disappear 24 hours later as intended. The card itself, with its buttons, stays.

  • Fixed: the click summary on the dashboard no longer says that no clicks have been recorded when the table under it lists recent clicks. If there were none in the last 7 days, it now says so.

  • Changed: recent clicks on the dashboard are listed by the time they happened, newest first.

0.15.1

  • Added: when links are converted through ValueCommerce – with the sid and pid in the ValueCommerce connector, or in the Yahoo! Shopping connector – Kukuriya now outputs ValueCommerce’s impression image next to each converted link, as it already does for Moshimo. ValueCommerce hands out each ad as a link plus a 1×1 image, and until now only the link was output, so the impression count in your ValueCommerce dashboard stayed at zero. Nothing is output when the sid or pid is empty, so a site that uses LinkSwitch is not counted twice. See “External services” for what ValueCommerce receives.

  • Fixed: the connection test for Yahoo! Shopping or Rakuten no longer warns that links will not be converted when you send that store’s links through another provider in Monetization route (ValueCommerce or Moshimo) and that provider is set up. It now says which provider converts them.

  • Changed: the link at the bottom of the Moshimo Affiliate settings is no longer labelled as an API key guide. Moshimo has no API key; you paste an ad link.

0.15.0

  • Fixed: a comparison table no longer sends readers to a product page that has been marked as gone. Product cards already switched such a button to a search for the product, but the table ignored the mark and kept linking to the discontinued page. A column now goes where the card’s buy button for that store would go – usually a search for the product at the same store, or the card’s first button when that store has none – and if the card would have no button at all, the product is shown without a link. Clicks on such a column are counted for the store it now leads to.

  • Fixed: a comparison table shows another store’s current price when the product’s own price has expired, as product cards already do. It used to show a dash even when a different store had a fresh price. The price is taken from the same store as the column’s button wherever possible, so the price and the link do not point at different shops.

  • Changed: the note under a price in a comparison table now names the store the price came from, as it already did on a product card (“as of 2026/09/25 10:00 | via Rakuten Ichiba”). Now that a column can switch to another store’s price, the note is what tells readers whose price they are looking at.

  • Fixed: a comparison table that is wider than the page can be scrolled with the keyboard. It only scrolled with a mouse or touch, so the columns off to the right could not be reached without one. The table area now takes focus, shows an outline when it has it, and is announced to screen readers as a comparison table that scrolls sideways.

  • Fixed: the star rating on a product card no longer shows its screen-reader text on themes that do not hide it. The extra words relied on a class the theme was expected to define, and on themes without it the card read “Rating ★4.5 out of 5, (128 reviews)”. The rating is now described by a label on the element itself, as it already was in comparison tables, so it no longer depends on the theme.

  • Fixed: posts that contain only [bcore_link] shortcodes load the plugin’s stylesheet. Without it, banner images in those links were not scaled down and spilled past the edge of the screen on phones. Links printed from other places, such as widgets or excerpts, are covered as well. The block version was not affected.

  • Fixed: a custom link with its own rel value keeps “sponsored” and “noopener”. Writing rel=”nofollow” replaced the defaults instead of adding to them, so the link lost the value that marks it as an ad and the safeguard for links that open in a new tab. The values you enter are kept and the missing defaults are added.

  • Fixed: a search link can no longer take a page down because of a store template. Search addresses were filled in with PHP’s sprintf, so a stray percent sign in a template supplied through the kukuriya_store_catalog filter made PHP 8 stop with an error and the page did not render. Only the %s placeholder is replaced now.

  • Fixed: sale classes passed in through the kukuriya_product_render_options filter are reduced to characters that are valid in a class name before they are printed. They were added to the card’s class attribute as they came, so a quotation mark in the value could break out of it.

  • Changed: the “Find my outbound IP address” button now makes its request the same way as every other request in the plugin, which refuses to follow a redirect to a private or local address. It still contacts only api.ipify.org, and only when you press the button.

  • Fixed: the Pochipp migration could read a card and the Pochipp card right after it as a single card. The second card was then neither converted nor listed among the cards that could not be converted.

  • Fixed: a Pochipp block whose closing comment is missing, which usually comes from hand editing, no longer takes the text after it with it. The migration treated everything up to the next closing comment – paragraphs and other cards included – as part of that block and replaced all of it with one card. Such a block is now left as it is, and the cards after it are converted or reported as usual.

  • Fixed: the Pochipp migration never saves a post it could not read to the end, and never saves a post that would come out empty. A very long card, or text containing broken characters, could make the matching fail partway, and in rare cases the post was written back empty. Such posts are now left untouched and listed with the reason.

  • Fixed: uninstalling the plugin also removes the record that the Pochipp settings were imported. When it was left behind and the plugin was installed again, the migration screen treated the site as already migrated and would not move past that step.

  • Added: the Products screen opens a single product for editing when its address carries &product= and the product’s ID, so a link from elsewhere in the admin can land straight on that product. If the product cannot be opened, the list is shown as usual and the parameter is taken out of the address.

  • Changed: the Moshimo connector links to its own setup guide. It used to point at the index of the guides.

  • Added: for developers, kukuriya_product_link( $product_id, $store ) returns the link a reader would follow for a product: the same link as the card’s buy button for that store – the product page through your monetization route, or a search link only when that search earns – and an empty string otherwise. kukuriya_product() returns the plain product URL, which earns nothing, so an add-on that lists products had no proper link to give them. Escape the result when you print it.

  • Added: for developers, PiftoWorks\Kukuriya\Links\PlacementScanner::by_kind() sorts what a post contains – cards, comparison tables, links, inline product links and any Pochipp cards still left – using the same rules the migration uses to rewrite them, and says whether it could read the whole post. PlacementScanner::RULES_VERSION goes up whenever those rules change, so anything that stores the result knows when to rebuild it.

0.14.1

  • Fixed: changing a monetization route, saving connector credentials or saving the design settings now clears your page cache. Until now only saving a product did. If you switched a store to a different network, pages already in the cache kept handing out the old links, which earned nothing, and there was nothing on screen to say so. The same applies to the scheduled price refresh: cached pages kept showing the old price and the old “as of” date, past the 24-hour limit the card is supposed to respect.

  • Fixed: a store button that cannot be monetized is no longer shown as a bare search link. Kukuriya ships with Amazon, Rakuten and Yahoo! Shopping enabled and falls back to a search link for stores with no product data, so a site that had only set up Rakuten was publishing plain Amazon and Yahoo! search links. They sent visitors away and earned nothing. Buttons for products you have actually registered are unaffected.

  • Fixed: a store whose route cannot work is shown in the monetization route list with the reason, instead of disappearing from it. A store with no credentials of its own and no working route was dropped from the list entirely, so the setting could not be corrected and nothing explained why its links were not being converted. Migrating from Pochipp could leave a store in exactly that state.

  • Fixed: the route list also refuses combinations that cannot work, such as routing Amazon through the Rakuten connector. These were accepted and produced broken links.

  • Fixed: pasting a Moshimo ad link into the wrong merchant section is now refused, naming both merchants. Moshimo issues a different set of IDs per merchant and its ad link carries the advertiser number, which Kukuriya already knows; it was reading only the partnership ID and ignoring the rest. An Amazon ad link pasted into the Rakuten section therefore read as “set up”, the links still redirected, and nothing was ever tracked.

  • Fixed: the click-measurement endpoint now only accepts beacons sent from your own site, and its rate limit is applied atomically where an object cache is available. Anyone could previously post arbitrary values to it and distort the click figures in your dashboard. Nothing about what is stored has changed: addresses and user agents are still hashed, never kept in the clear.

0.14.0

  • Added: when a store is routed through Moshimo Affiliate, Kukuriya now outputs Moshimo’s impression tag alongside the link. Moshimo hands out each ad as a pair – a link that counts clicks, and a 1×1 image that counts how often the ad was shown – and until now only the link was output. The impression count in your Moshimo dashboard therefore stayed at zero and the click-through rate could not be read. Commissions and clicks were never affected; they are counted by the link itself.

  • Added: the tag is output once per placement – next to each purchase button, each inline product link and each comparison-table button – and only if you have entered a Moshimo partnership ID (a_id) and chosen Moshimo as the route for that store. Your visitors’ browsers then load an image from i.moshimo.com whenever such a page is shown. The “External services” section above describes exactly what Moshimo receives.

  • Changed: the Moshimo connector asks for three values instead of sixteen. The p_id, pc_id and pl_id that Moshimo issues per advertiser are the same for every site and every partnership, so the plugin now holds them and asks only for the a_id of each of the three advertisers. Values you saved in an earlier version are still read, and still take precedence.

  • Changed: the Yahoo! connector links to its own setup guide, which walks through the Yahoo! Developer Network and the ValueCommerce registrations separately. It used to point at the index of the guides.

  • Fixed: the “saved” banner in the settings screens disappears on its own. It used to stay until you saved again or touched a field, covering the top of the page – the admin bar included – for as long as you left it alone. All six screens are affected.

  • Fixed: the cross in a comparison table is the same size as the circles beside it. The multiplication sign used until now is a Latin-width character, so at the same font size it looked smaller than the full-width circles – most noticeably in Yu Gothic, the usual default on Windows.

0.13.9

  • Added: the product list now shows, for each store, whether its button opens the product page or only searches for the name. Until now the list showed a number, and finding the gaps meant opening products one at a time.

  • Added: those store labels are buttons. Press one and Kukuriya searches that store for the product, so you can fill a gap without leaving the list.

  • Added: a filter that leaves only the products still searching at a store you pick, so you can work through the gaps one store at a time.

  • Fixed: the new column no longer lists a store whose button does not appear on the site. Mercari can only be linked directly through a URL override, so without an ambassador ID its button is never rendered, yet the list described where that button would go.

  • Fixed: error messages from the connectors are translatable. Until now a missing Rakuten application ID, an Amazon rate limit and similar problems were shown in English regardless of the site language.

  • Fixed: the product list no longer spills past the panel on narrow screens. The table scrolls sideways instead.

  • Fixed: the tabs across the top wrap onto a second line on narrow screens. They used to be squeezed into one row until each label broke into a vertical stack of single characters.

0.13.8

  • Added: a button in the Rakuten connector settings that looks up your server’s outbound IP address. Rakuten asks for it when you register an application as an “API / backend service”, and it is not the address your own domain resolves to. The value can be copied with a click, and nothing is sent anywhere until you press the button.

  • Added: an optional expiry date for your Rakuten application. Rakuten does not tell you when the key is about to stop working, so the settings screen starts reminding you 30 days ahead. If a call does fail, the connection test now names both of the causes that produce the same error and how to tell them apart.

  • Added: links from each connector’s settings to the setup guide for that service, and to the terms of the company providing the API (Amazon / Rakuten / Yahoo!).

  • Changed: “no affiliate ID is set” is no longer folded into the green success message of a connection test. It is shown as a warning of its own, and it appears as soon as you save the credentials rather than only after you run a test.

  • Changed: connector settings are grouped under headings that separate the keys used to fetch product data from the keys used to earn a commission.

  • Changed: the migration screen and the FAQ now say plainly that the last step rewrites the cards inside your posts and cannot be undone, and that a full backup is the way back.

0.13.7

  • Changed: the hint that appears when a comparison table scrolls sideways is now a light chip with dark text instead of a dark bar. It sits over the buttons in the last row, and the dark version read as though it were covering them up.

0.13.6

  • Changed: the “scroll sideways” hint on a comparison table is shorter, and the buttons underneath show through it. The old line ran long enough to sit on top of them.

0.13.5

  • Changed: the Amazon button is a brighter orange out of the box. The old one read as brown next to the other stores. Sites that picked their own Amazon colour under Design are unaffected.

0.13.4

  • Fixed: the store buttons in a comparison table ran together into one solid bar. Each button was overflowing its column by the width of its own padding on themes that do not set border-box sizing for you, Twenty Twenty-Five among them. Most themes do set it, and those were never affected.
  • Fixed: a column label such as “Top pick” covered the product name next to it once a table had several columns. A table that uses a label now keeps room for it above every heading, so the names still line up with each other.

0.13.3

  • Fixed: the sample card on the Design screen carried a real manufacturer’s name as its brand line. It is a made-up name now. Nothing on your site changes — the name only ever appeared in that preview, before you pick a product.

0.13.2

  • Changed: cards and buttons have much squarer corners out of the box. The 14px radius made every card look like a pill, which fought with most themes. Sites that set their own radius under Design are unaffected.
  • Changed: a one-line (compact) card is now one link the whole way across. The row used to be dead except for the round arrow on the right, and nothing said so.
  • Changed: the column headings in a comparison table are the same size as the product names below them. They were smaller, which read as though the headings mattered less than the rows.
  • Fixed: the store buttons in a comparison table disappeared. The link that rewrites inline product mentions was also rewriting the buttons the table had already drawn, and stripped the class that made them look like buttons.
  • Fixed: a product name in a comparison table was drawn in your theme’s link colour and weight, so it looked like body text that happened to be linked instead of the name of the thing in that row.
  • Fixed: on a phone, the store name inside a button (Amazon, Rakuten, and so on) was set thin and narrow while the button around it stayed large.

0.13.1

  • Fixed: cards no longer turn dark on their own. Following dark mode was on by default, but the browser setting it follows has nothing to do with your theme, so a card could go black in the middle of a light page. It is off by default now, and the setting says what it actually follows. Sites that already saved a choice keep it; turn it back on under Design if your theme follows the browser too.

0.13.0

  • Changed: every on/off control in the admin screens is now a two-part “Off | On” switch, with the chosen side filled in. The round sliding knob did not say which side was on, and the pale colour made it worse.
  • Changed: a product opens in a window of its own instead of unfolding underneath the list. With a full page of products the editor used to sit far below the fold, so editing meant scrolling past fifty rows first.
  • Changed: that window is now divided into sections you open one at a time — card overrides, micro-copy, link URLs, custom buttons, sale, posts using it, and store buttons — all closed to begin with. Roughly forty fields used to stand in one flat column. Sections that can be counted show how many things are set in them.
  • Changed: the store section was rebuilt. It now lists every store a product can be fetched from, one row each, and says where that store’s button goes: straight to the product page, or to a search for the product name. Only the stores that had been registered were shown before, which made a card with four buttons look as though it had one.
  • Changed: the comparison table list is one card per table, with the post title on a line of its own. As a seven-column table the product column swallowed the width and the rest collapsed into single letters stacked vertically.
  • Changed: product lists take a page number, and have First and Last buttons, so a site with thousands of products is not paged through one screen at a time.
  • Changed: sliders are thicker, with a grab handle you can actually hit — a 3px line with a 14px dot was hard to hold with a mouse and worse on a touch screen.
  • Fixed: the product image on a card sat above the middle of the row, so it crowded any label above it and left a gap below. It is centred now.
  • Fixed: the icon beside “See reviews” was an empty outline. It has the three dots inside it that make it read as a speech bubble.
  • Fixed: the card preview on a product’s screen ignored the site-wide design settings, so button colours there did not match the front end.
  • Fixed: rows that put a text field next to a button had the two at …