{"id":310400,"date":"2026-05-10T19:51:30","date_gmt":"2026-05-10T19:51:30","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/balticxml\/"},"modified":"2026-10-22T14:00:14","modified_gmt":"2026-10-22T14:00:14","slug":"balticxml","status":"publish","type":"plugin","link":"https:\/\/mk.wordpress.org\/plugins\/balticxml\/","author":17576777,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.2","stable_tag":"1.2.2","tested":"7.1.3","requires":"6.0","requires_php":"8.2.35","requires_plugins":null,"header_name":"BalticXML","header_author":"Edgars Veidenbaums","header_description":"Generates XML product feeds from your WooCommerce store for Latvian price comparison sites: salidzini.lv, kurpirkt.lv and ceno.lv.","assets_banners_color":"e9f1fb","last_updated":"2026-10-22 14:00:14","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/balticxml.lv","rating":5,"author_block_rating":0,"active_installs":0,"downloads":600,"num_ratings":1,"support_threads":1,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"veidenbaums","date":"2026-05-10 19:51:08","revision":3527987},"1.1.0":{"tag":"1.1.0","author":"veidenbaums","date":"2026-07-26 19:28:14","revision":3623755},"1.1.1":{"tag":"1.1.1","author":"veidenbaums","date":"2026-09-21 17:09:24","revision":3705995},"1.2.0":{"tag":"1.2.0","author":"veidenbaums","date":"2026-10-15 10:59:53","revision":3748243},"1.2.1":{"tag":"1.2.1","author":"veidenbaums","date":"2026-10-21 12:38:50","revision":3758340},"1.2.2":{"tag":"1.2.2","author":"veidenbaums","date":"2026-10-22 14:00:14","revision":3760028}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3527987,"resolution":"256x256","location":"assets","locale":"","width":1254,"height":1254}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3748233,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3748233,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0","1.1.1","1.2.0","1.2.1","1.2.2"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3748233,"resolution":"1","location":"assets","locale":"","width":1100,"height":979},"screenshot-2.jpg":{"filename":"screenshot-2.jpg","revision":3748233,"resolution":"2","location":"assets","locale":"","width":1100,"height":1148}},"screenshots":{"1":"BalticXML settings with country tabs and feed URL controls","2":"Product feed readiness checks with status indicators and guidance for missing fields (sample product)"}},"plugin_section":[],"plugin_tags":[262511,262510,262509,286,11891],"plugin_category":[45],"plugin_contributors":[176836],"plugin_business_model":[],"class_list":["post-310400","plugin","type-plugin","status-publish","hentry","plugin_tags-ceno","plugin_tags-kurpirkt","plugin_tags-salidzini","plugin_tags-woocommerce","plugin_tags-xml-feed","plugin_category-ecommerce","plugin_contributors-veidenbaums","plugin_committers-veidenbaums"],"banners":{"banner":"https:\/\/ps.w.org\/balticxml\/assets\/banner-772x250.png?rev=3748233","banner_2x":"https:\/\/ps.w.org\/balticxml\/assets\/banner-1544x500.png?rev=3748233","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/balticxml\/assets\/icon-256x256.png?rev=3527987","icon_2x":"https:\/\/ps.w.org\/balticxml\/assets\/icon-256x256.png?rev=3527987","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/balticxml\/assets\/screenshot-1.jpg?rev=3748233","caption":"BalticXML settings with country tabs and feed URL controls"},{"src":"https:\/\/ps.w.org\/balticxml\/assets\/screenshot-2.jpg?rev=3748233","caption":"Product feed readiness checks with status indicators and guidance for missing fields (sample product)"}],"raw_content":"<!--section=description-->\n<p>BalticXML creates WooCommerce product feeds for price comparison sites in Latvia and Lithuania. Choose the sites you use, save your settings, and submit each site's XML feed URL.<\/p>\n\n<h4>Supported sites<\/h4>\n\n<ul>\n<li>Latvia: <strong>salidzini.lv<\/strong>, <strong>kurpirkt.lv<\/strong>, <strong>ceno.lv<\/strong><\/li>\n<li>Lithuania: <strong>Kaina24.lt<\/strong>, <strong>Kainos.lt<\/strong>, <strong>Pricer.lt<\/strong><\/li>\n<\/ul>\n\n<p>Each site gets its own feed in the format it needs. BalticXML uses your existing product information, including prices, images, categories, brands and barcodes.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>XML product feeds for six Latvian and Lithuanian price comparison sites<\/li>\n<li>Support for simple, variable and external WooCommerce products, including individual variation offers<\/li>\n<li>Product prices, images, category hierarchies, brands, models and EAN\/GTIN barcodes in supported feed formats<\/li>\n<li>Scheduled feed updates and caching for fast feed delivery<\/li>\n<li>Out-of-stock product filtering<\/li>\n<li>Product data validation with instructions for fixing missing required and recommended fields<\/li>\n<li>Reports showing excluded products, missing information and links to edit affected products<\/li>\n<li>Independent feeds with customizable URLs for each comparison site<\/li>\n<li>WooCommerce HPOS compatibility<\/li>\n<li>Translation ready<\/li>\n<\/ul>\n\n<h4>Get started<\/h4>\n\n<p>Open <strong>BalticXML<\/strong> in your WordPress admin, choose Latvia or Lithuania, enable the feeds you need, and save. Copy each feed URL and submit it to the corresponding price comparison site. Set your update schedule and other shared options on the <strong>General<\/strong> tab.<\/p>\n\n<p>Use the <strong>BalticXML - Feed readiness<\/strong> panel when editing products to check whether their information is complete for your enabled feeds.<\/p>\n\n<!--section=installation-->\n<h4>Automatic Installation<\/h4>\n\n<ol>\n<li>Log in to your WordPress admin panel<\/li>\n<li>Navigate to Plugins &gt; Add New<\/li>\n<li>Search for \"BalticXML\"<\/li>\n<li>Click \"Install Now\" and then \"Activate\"<\/li>\n<\/ol>\n\n<h4>Manual Installation<\/h4>\n\n<ol>\n<li>Download the plugin ZIP file<\/li>\n<li>Go to Plugins &gt; Add New &gt; Upload Plugin<\/li>\n<li>Upload the ZIP file and click \"Install Now\"<\/li>\n<li>Activate the plugin<\/li>\n<\/ol>\n\n<h4>After Installation<\/h4>\n\n<ol>\n<li>Make sure WooCommerce is installed and active<\/li>\n<li>Open <strong>BalticXML<\/strong> in the admin menu<\/li>\n<li>Choose Latvia or Lithuania, enable your feeds, and save settings<\/li>\n<li>Copy each feed URL and submit it to the corresponding price comparison site<\/li>\n<li>Set your update schedule and shared options on the <strong>General<\/strong> tab<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20urls%20do%20i%20submit%3F\"><h3>What URLs do I submit?<\/h3><\/dt>\n<dd><p>Copy the URL shown beside each enabled feed in BalticXML settings. Each site has its own URL, for example <code>https:\/\/yoursite.com\/salidzini-a7k3p9.xml<\/code>. You can customize the feed slug in settings.<\/p><\/dd>\n<dt id=\"how%20often%20are%20the%20feeds%20updated%3F\"><h3>How often are the feeds updated?<\/h3><\/dt>\n<dd><p>For cached feeds, choose hourly, every six hours, twice daily or daily updates on the <strong>General<\/strong> tab. You can also disable scheduled updates and regenerate manually. Scheduled updates use WordPress cron and depend on your site's cron setup and traffic.<\/p>\n\n<p>With caching disabled, the plugin generates fresh XML whenever a feed URL is requested.<\/p><\/dd>\n<dt id=\"are%20out-of-stock%20products%20included%3F\"><h3>Are out-of-stock products included?<\/h3><\/dt>\n<dd><p>They are excluded by default. You can change this on the <strong>General<\/strong> tab.<\/p><\/dd>\n<dt id=\"are%20product%20variations%20included%3F\"><h3>Are product variations included?<\/h3><\/dt>\n<dd><p>Yes. Each variation can be exported as a separate offer. You can change this on the <strong>General<\/strong> tab.<\/p><\/dd>\n<dt id=\"how%20do%20i%20add%20a%20brand%20or%20manufacturer%3F\"><h3>How do I add a brand or manufacturer?<\/h3><\/dt>\n<dd><p>Assign the product's brand in <strong>Brands<\/strong>, if available. You can also add an attribute named <code>brand<\/code> or <code>manufacturer<\/code> under <strong>Product data &gt; Attributes<\/strong>. Supported brand plugins and parent product brands are also detected.<\/p>\n\n<p>BalticXML checks the <code>product_brand<\/code>, <code>pwb-brand<\/code>, <code>pa_brand<\/code> and <code>pa_zimols<\/code> taxonomies by default. A variation's own brand takes priority over its parent's brand.<\/p><\/dd>\n<dt id=\"can%20i%20use%20a%20custom%20brand%20taxonomy%3F\"><h3>Can I use a custom brand taxonomy?<\/h3><\/dt>\n<dd><p>Yes. Add its exact taxonomy key through the <code>balticxml_brand_taxonomies<\/code> filter in a small custom plugin or your child theme's <code>functions.php<\/code>. For example, to support <code>pa_custom_brand<\/code> without duplicating product data:<\/p>\n\n<pre><code>`php\n<\/code><\/pre>\n\n<p>add_filter('balticxml_brand_taxonomies', function ($taxonomies) {\n    $taxonomies[] = 'pa_custom_brand';<\/p>\n\n<pre><code>return $taxonomies;\n<\/code><\/pre>\n\n<p>});\n    `<\/p>\n\n<p>The filter receives the ordered taxonomy list, the product or parent currently being checked, and the feed format key. Appending a key preserves the priority of existing brand taxonomies. The filter applies to feed generation, validation and product readiness checks.<\/p><\/dd>\n<dt id=\"can%20i%20supply%20a%20manufacturer%20from%20a%20custom%20field%3F\"><h3>Can I supply a manufacturer from a custom field?<\/h3><\/dt>\n<dd><p>Yes. The <code>balticxml_manufacturer_fallback<\/code> filter runs only when neither the product nor its parent has a detected brand. It receives the fallback value (initially empty), the exported product or variation, the parent product if available, and the feed format key.<\/p>\n\n<p>This example checks a custom metadata key on the product and then its parent. Replace <code>_custom_maker<\/code> with your actual key:<\/p>\n\n<pre><code>`php\n<\/code><\/pre>\n\n<p>add_filter('balticxml_manufacturer_fallback', function ($manufacturer, $product, $parent, $format) {\n    if (trim($manufacturer) !== '') {\n        return $manufacturer;\n    }<\/p>\n\n<pre><code>foreach ([$product, $parent] as $source) {\n    if (!$source) {\n        continue;\n    }\n\n    $manufacturer = trim((string) $source-&gt;get_meta('_custom_maker', true));\n\n    if ($manufacturer !== '') {\n        return $manufacturer;\n    }\n}\n\nreturn '';\n<\/code><\/pre>\n\n<p>}, 10, 4);\n    `<\/p>\n\n<p>Only return the real manufacturer. An empty result keeps missing-data reporting in place. This filter also applies to validation and product readiness checks. After changing either brand filter, use <strong>Regenerate Feed Now<\/strong> when caching is enabled to update existing cached XML.<\/p><\/dd>\n<dt id=\"how%20can%20i%20choose%20a%20product%27s%20feed%20category%3F\"><h3>How can I choose a product's feed category?<\/h3><\/dt>\n<dd><p>By default, BalticXML uses the deepest assigned product category. If multiple categories have the same depth, it uses the first one. Use the <code>balticxml_category_term_id<\/code> filter in a small custom plugin or your child theme's <code>functions.php<\/code> to select another assigned category:<\/p>\n\n<pre><code>`php\n<\/code><\/pre>\n\n<p>add_filter('balticxml_category_term_id', function ($term_id, $product_id) {\n    if ($product_id === 123) {\n        return 45;\n    }<\/p>\n\n<pre><code>return $term_id;\n<\/code><\/pre>\n\n<p>}, 10, 2);\n    `<\/p>\n\n<p>Replace <code>123<\/code> with the product ID and <code>45<\/code> with an assigned <code>product_cat<\/code> term ID, not a <code>term_taxonomy_id<\/code>. Invalid or unassigned IDs keep the automatic selection. Products without assigned categories stay uncategorized. Variations inherit their parent product's selection and pass the parent product ID to the filter.<\/p>\n\n<p>The filter applies to all six feeds, validation and product readiness checks. Category names, full hierarchies, IDs and links follow the selected category in each site's supported format. An optional third argument, <code>$format<\/code>, provides the feed key (<code>salidzini<\/code>, <code>kurpirkt<\/code>, <code>ceno<\/code>, <code>kaina24<\/code>, <code>kainos<\/code> or <code>pricer<\/code>) for site-specific selections; use <code>10, 3<\/code> to receive it. After adding or changing the filter, use <strong>Regenerate Feed Now<\/strong> when caching is enabled.<\/p><\/dd>\n<dt id=\"how%20do%20i%20add%20a%20model%20or%20barcode%3F\"><h3>How do I add a model or barcode?<\/h3><\/dt>\n<dd><p>Add an attribute named <code>model<\/code> under <strong>Product data &gt; Attributes<\/strong> for the product model.<\/p>\n\n<p>For barcodes, use the GTIN\/EAN field under <strong>Product data &gt; Inventory<\/strong>, if available, a supported barcode plugin, or a product attribute named <code>ean<\/code>.<\/p><\/dd>\n<dt id=\"where%20can%20i%20see%20missing%20product%20fields%3F\"><h3>Where can I see missing product fields?<\/h3><\/dt>\n<dd><p>Open the product editor and find <strong>BalticXML - Feed readiness<\/strong>. Red indicators show missing required data, yellow indicators show recommended improvements, and green indicators show completed checks. Each missing field includes instructions for adding it. You can collapse each feed's messages.<\/p>\n\n<p>Save or update the product to refresh the checks. Feed settings also list products excluded because required information is missing or invalid. Missing recommended fields do not prevent export.<\/p><\/dd>\n<dt id=\"does%20balticxml%20submit%20products%20to%20the%20comparison%20sites%3F\"><h3>Does BalticXML submit products to the comparison sites?<\/h3><\/dt>\n<dd><p>BalticXML provides the XML feed URLs. Submit each URL to the corresponding site and follow its shop registration process.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20require%20woocommerce%3F\"><h3>Does this plugin require WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. WooCommerce must be installed and active to export products.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Export the full category hierarchy in Kaina24 category names and refresh older cached feeds automatically.<\/li>\n<li>Add the <code>balticxml_category_term_id<\/code> filter to choose an assigned product category across all six feeds.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Fix automatic manufacturer detection for the <code>pa_zimols<\/code> global product attribute.<\/li>\n<li>Update salidzini.lv and kurpirkt.lv footer banners.<\/li>\n<li>Add <code>balticxml_brand_taxonomies<\/code> and <code>balticxml_manufacturer_fallback<\/code> filters for custom brand taxonomies and manufacturer fallbacks.<\/li>\n<\/ul>\n\n<h4>1.2<\/h4>\n\n<ul>\n<li>Add Kaina24.lt, Kainos.lt and Pricer.lt exports.<\/li>\n<li>Split settings in Latvia, Lithuania and General settings tabs.<\/li>\n<li>Show missing required and recommended feed fields directly in the product editor.<\/li>\n<li>Add  readiness indicators and field-specific instructions for fixing missing product data.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Fixed: Auto-regenerate cron schedule not updating when changing the interval setting<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added partner banners in the theme footer for enabled feeds<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>salidzini.lv compatible XML feed (<code>&lt;products&gt;\/&lt;product&gt;<\/code> schema)<\/li>\n<li>kurpirkt.lv compatible XML feed (<code>&lt;root&gt;\/&lt;item&gt;<\/code> schema)<\/li>\n<li>ceno.lv compatible XML feed (<code>&lt;root&gt;\/&lt;item&gt;<\/code> schema with extended delivery fields)<\/li>\n<li>Per-format cache files with shared WP-Cron regeneration<\/li>\n<li>Simple, variable and external product support<\/li>\n<li>Brand \/ manufacturer and EAN auto-detection<\/li>\n<li>Customizable feed slugs per portal<\/li>\n<li>HPOS compatible<\/li>\n<li>Translation ready<\/li>\n<\/ul>","raw_excerpt":"WooCommerce XML feeds for Latvian and Lithuanian price comparison sites.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/310400","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=310400"}],"author":[{"embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/veidenbaums"}],"wp:attachment":[{"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=310400"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=310400"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=310400"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=310400"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=310400"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=310400"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}