Plugin Directory

Changeset 3765277


Ignore:
Timestamp:
10/25/2026 10:03:48 PM (3 hours ago)
Author:
giorgaras
Message:

0.1.5: XML & CSV in name, HPOS/blocks compatibility, one-time activation notice, faster-setup copy, Plugin Check clean

Location:
feedpup-xml-supplier-sync-for-woocommerce
Files:
8 edited
1 copied

Legend:

Unmodified
Added
Removed
  • feedpup-xml-supplier-sync-for-woocommerce/tags/0.1.5/assets/admin.css

    r3765270 r3765277  
    7575    font-size: 12px;
    7676}
     77
     78.feedpup-connect .feedpup-steps {
     79    margin: 12px 0 0;
     80    font-size: 14px;
     81    font-weight: 600;
     82    color: #182033;
     83}
  • feedpup-xml-supplier-sync-for-woocommerce/tags/0.1.5/feedpup-woocommerce.php

    r3765270 r3765277  
    11<?php
    22/**
    3  * Plugin Name: FeedPup – XML & CSV Supplier Feed Import for WooCommerce
     3 * Plugin Name: FeedPup – XML & CSV Supplier Feed Import & Sync for WooCommerce
    44 * Plugin URI: https://woo.feedpup.weareplano.gr
    5  * Description: Connects WooCommerce to FeedPup so supplier XML products, categories, prices and stock can be reviewed and synced.
    6  * Version: 0.1.4
     5 * Description: Import supplier XML or CSV feeds into WooCommerce with FeedPup, then keep prices and stock in sync.
     6 * Version: 0.1.5
    77 * Author: FeedPup (PLANO)
    88 * Author URI: https://weareplano.gr
    … …  
    2121}
    2222
    23 define('FEEDPUP_WC_VERSION', '0.1.4');
     23define('FEEDPUP_WC_VERSION', '0.1.5');
    2424define('FEEDPUP_WC_FILE', __FILE__);
    2525define('FEEDPUP_WC_DIR', plugin_dir_path(__FILE__));
    … …  
    3232register_uninstall_hook(__FILE__, ['FeedPup_WooCommerce', 'uninstall']);
    3333
     34// FeedPup never reads or writes orders and adds nothing to cart or checkout, so it is compatible with
     35// High-Performance Order Storage and the Cart & Checkout blocks.
     36add_action('before_woocommerce_init', static function (): void {
     37    if (class_exists(\Automattic\WooCommerce\Utilities\FeaturesUtil::class)) {
     38        \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility('custom_order_tables', FEEDPUP_WC_FILE, true);
     39        \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility('cart_checkout_blocks', FEEDPUP_WC_FILE, true);
     40    }
     41});
     42
    3443add_action('plugins_loaded', static function (): void {
    3544    FeedPup_WooCommerce::instance();
  • feedpup-xml-supplier-sync-for-woocommerce/tags/0.1.5/includes/class-feedpup-woocommerce.php

    r3765270 r3765277  
    232232            return;
    233233        }
    234         $dismiss_url = wp_nonce_url(admin_url('admin-post.php?action=feedpup_dismiss_notice'), 'feedpup_dismiss_notice');
     234        // Shown exactly once: cleared as soon as it is rendered (the core "X" button hides it on this screen).
     235        delete_option(self::OPT_ACTIVATION_NOTICE);
    235236        ?>
    236         <div class="notice notice-success feedpup-activation-notice">
     237        <div class="notice notice-success is-dismissible feedpup-activation-notice">
    237238            <p><strong><?php esc_html_e('FeedPup is ready — open FeedPup in the admin menu to connect your store.', 'feedpup-xml-supplier-sync-for-woocommerce'); ?></strong></p>
    238             <p>
    239                 <a class="button button-primary" href="<?php echo esc_url($this->admin_page_url()); ?>"><?php esc_html_e('Open FeedPup', 'feedpup-xml-supplier-sync-for-woocommerce'); ?></a>
    240                 <a class="button-link" style="margin-left:12px" href="<?php echo esc_url($dismiss_url); ?>"><?php esc_html_e('Dismiss', 'feedpup-xml-supplier-sync-for-woocommerce'); ?></a>
    241             </p>
     239            <p><a class="button button-primary" href="<?php echo esc_url($this->admin_page_url()); ?>"><?php esc_html_e('Open FeedPup', 'feedpup-xml-supplier-sync-for-woocommerce'); ?></a></p>
    242240        </div>
    243241        <?php
    … …  
    280278                    <div>
    281279                        <h1>Feed<span>Pup</span></h1>
    282                         <p class="feedpup-muted"><?php esc_html_e('XML Supplier Sync for WooCommerce', 'feedpup-xml-supplier-sync-for-woocommerce'); ?></p>
     280                        <p class="feedpup-muted"><?php esc_html_e('XML & CSV Supplier Feed Sync for WooCommerce', 'feedpup-xml-supplier-sync-for-woocommerce'); ?></p>
    283281                    </div>
    284282                </div>
    … …  
    309307                            <p class="feedpup-lead"><?php esc_html_e('One click links this store to FeedPup and opens your FeedPup workspace, already signed in. No account, password or URL needed.', 'feedpup-xml-supplier-sync-for-woocommerce'); ?></p>
    310308                            <?php submit_button(__('Connect to FeedPup', 'feedpup-xml-supplier-sync-for-woocommerce'), 'primary hero feedpup-connect-button', 'submit', false); ?>
     309                            <p class="feedpup-steps"><?php esc_html_e('Takes under 3 minutes: connect, paste your XML or CSV feed, and FeedPup maps the fields for you.', 'feedpup-xml-supplier-sync-for-woocommerce'); ?></p>
    311310                            <p class="feedpup-muted feedpup-consent"><?php
    312311                            // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- format is escaped; both links are built with esc_url()/esc_html__() above.
    … …  
    912911            return 0;
    913912        }
    914         $existing = get_posts(['post_type' => 'attachment', 'post_status' => 'inherit', 'post_parent' => $product_id, 'meta_key' => '_source_url', 'meta_value' => $url, 'fields' => 'ids', 'numberposts' => 1]);
    915         if ($existing) return (int) $existing[0];
     913        // A product has only a handful of attachments, so compare their source URL in PHP instead of a postmeta query.
     914        $children = get_posts(['post_type' => 'attachment', 'post_status' => 'inherit', 'post_parent' => $product_id, 'fields' => 'ids', 'numberposts' => 50]);
     915        foreach ($children as $child_id) {
     916            if ((string) get_post_meta((int) $child_id, '_source_url', true) === $url) {
     917                return (int) $child_id;
     918            }
     919        }
    916920        require_once ABSPATH . 'wp-admin/includes/media.php';
    917921        require_once ABSPATH . 'wp-admin/includes/file.php';
    … …  
    11871191            'fields' => 'ids',
    11881192            'numberposts' => 1,
     1193            // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key -- single-row fallback lookup by FeedPup's own unique key, used only when the links table has no row.
    11891194            'meta_key' => '_feedpup_product_key',
     1195            // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_value -- see above.
    11901196            'meta_value' => $key,
    11911197        ]);
  • feedpup-xml-supplier-sync-for-woocommerce/tags/0.1.5/readme.txt

    r3765270 r3765277  
    1 === FeedPup – XML & CSV Supplier Feed Import for WooCommerce ===
     1=== FeedPup – XML & CSV Supplier Feed Import & Sync for WooCommerce ===
    22Contributors: giorgaras
    33Tags: supplier feed, xml supplier feed, dropshipping xml, stock sync, csv import
    … …  
    88WC requires at least: 8.0
    99WC tested up to: 11.2
    10 Stable tag: 0.1.4
     10Stable tag: 0.1.5
    1111License: GPLv2 or later
    1212License URI: https://www.gnu.org/licenses/gpl-2.0.html
    1313
    14 Import supplier XML or CSV feeds into WooCommerce. Preview products, test with drafts, then keep prices and stock in sync automatically.
     14Import supplier XML & CSV feeds into WooCommerce. FeedPup maps the fields for you, then keeps prices and stock in sync automatically.
    1515
    1616== Description ==
     17
     18= Why FeedPup =
     19
     20* **Automatic field mapping, no manual column mapping.** FeedPup detects your XML or CSV feed's structure and maps the supplier fields (title, SKU, price, stock, images, EAN, categories) to WooCommerce for you. You just review and confirm.
     21* **Fast setup.** Connect your store and run your first test import in under 3 minutes. No account to create, no import template, no XPath.
     22* **Automatic price and stock sync** on a schedule (paid plans), updating only the products FeedPup imported.
    1723
    1824**FeedPup imports products from your supplier's XML or CSV feed into WooCommerce and keeps their prices and stock up to date.** Paste the feed URL (or upload a CSV file), check the field matches that Pup, FeedPup's AI-assisted mapper, suggests, preview real products and create a few as drafts. Nothing is imported until you confirm it.
    … …  
    156162== Changelog ==
    157163
     164= 0.1.5 =
     165* Name: now "FeedPup – XML & CSV Supplier Feed Import & Sync for WooCommerce"; plugin description and admin page say XML & CSV.
     166* WooCommerce: declares compatibility with High-Performance Order Storage (HPOS) and the Cart & Checkout blocks, so WooCommerce no longer lists FeedPup as incompatible.
     167* The activation notice is shown once only.
     168* Connect page: a short line on what happens after you click Connect.
     169* Readme: clearer description of automatic field mapping and setup time.
     170
    158171= 0.1.4 =
    159172* Easier to find: FeedPup now has its own item in the WordPress admin menu (below WooCommerce and Products), plus a Settings link on the Plugins page, a one-time activation notice and a one-time redirect to the FeedPup page after activation.
    … …  
    174187== Upgrade Notice ==
    175188
     189= 0.1.5 =
     190Declares WooCommerce HPOS and Cart & Checkout blocks compatibility (removes the "incompatible plugin" warning) and shows the activation notice only once.
     191
    176192= 0.1.4 =
    177193FeedPup now has its own item in the admin menu, plus a Settings link and an activation notice, so it is easier to find.
  • feedpup-xml-supplier-sync-for-woocommerce/trunk/assets/admin.css

    r3765270 r3765277  
    7575    font-size: 12px;
    7676}
     77
     78.feedpup-connect .feedpup-steps {
     79    margin: 12px 0 0;
     80    font-size: 14px;
     81    font-weight: 600;
     82    color: #182033;
     83}
  • feedpup-xml-supplier-sync-for-woocommerce/trunk/feedpup-woocommerce.php

    r3765270 r3765277  
    11<?php
    22/**
    3  * Plugin Name: FeedPup – XML & CSV Supplier Feed Import for WooCommerce
     3 * Plugin Name: FeedPup – XML & CSV Supplier Feed Import & Sync for WooCommerce
    44 * Plugin URI: https://woo.feedpup.weareplano.gr
    5  * Description: Connects WooCommerce to FeedPup so supplier XML products, categories, prices and stock can be reviewed and synced.
    6  * Version: 0.1.4
     5 * Description: Import supplier XML or CSV feeds into WooCommerce with FeedPup, then keep prices and stock in sync.
     6 * Version: 0.1.5
    77 * Author: FeedPup (PLANO)
    88 * Author URI: https://weareplano.gr
    … …  
    2121}
    2222
    23 define('FEEDPUP_WC_VERSION', '0.1.4');
     23define('FEEDPUP_WC_VERSION', '0.1.5');
    2424define('FEEDPUP_WC_FILE', __FILE__);
    2525define('FEEDPUP_WC_DIR', plugin_dir_path(__FILE__));
    … …  
    3232register_uninstall_hook(__FILE__, ['FeedPup_WooCommerce', 'uninstall']);
    3333
     34// FeedPup never reads or writes orders and adds nothing to cart or checkout, so it is compatible with
     35// High-Performance Order Storage and the Cart & Checkout blocks.
     36add_action('before_woocommerce_init', static function (): void {
     37    if (class_exists(\Automattic\WooCommerce\Utilities\FeaturesUtil::class)) {
     38        \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility('custom_order_tables', FEEDPUP_WC_FILE, true);
     39        \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility('cart_checkout_blocks', FEEDPUP_WC_FILE, true);
     40    }
     41});
     42
    3443add_action('plugins_loaded', static function (): void {
    3544    FeedPup_WooCommerce::instance();
  • feedpup-xml-supplier-sync-for-woocommerce/trunk/includes/class-feedpup-woocommerce.php

    r3765270 r3765277  
    232232            return;
    233233        }
    234         $dismiss_url = wp_nonce_url(admin_url('admin-post.php?action=feedpup_dismiss_notice'), 'feedpup_dismiss_notice');
     234        // Shown exactly once: cleared as soon as it is rendered (the core "X" button hides it on this screen).
     235        delete_option(self::OPT_ACTIVATION_NOTICE);
    235236        ?>
    236         <div class="notice notice-success feedpup-activation-notice">
     237        <div class="notice notice-success is-dismissible feedpup-activation-notice">
    237238            <p><strong><?php esc_html_e('FeedPup is ready — open FeedPup in the admin menu to connect your store.', 'feedpup-xml-supplier-sync-for-woocommerce'); ?></strong></p>
    238             <p>
    239                 <a class="button button-primary" href="<?php echo esc_url($this->admin_page_url()); ?>"><?php esc_html_e('Open FeedPup', 'feedpup-xml-supplier-sync-for-woocommerce'); ?></a>
    240                 <a class="button-link" style="margin-left:12px" href="<?php echo esc_url($dismiss_url); ?>"><?php esc_html_e('Dismiss', 'feedpup-xml-supplier-sync-for-woocommerce'); ?></a>
    241             </p>
     239            <p><a class="button button-primary" href="<?php echo esc_url($this->admin_page_url()); ?>"><?php esc_html_e('Open FeedPup', 'feedpup-xml-supplier-sync-for-woocommerce'); ?></a></p>
    242240        </div>
    243241        <?php
    … …  
    280278                    <div>
    281279                        <h1>Feed<span>Pup</span></h1>
    282                         <p class="feedpup-muted"><?php esc_html_e('XML Supplier Sync for WooCommerce', 'feedpup-xml-supplier-sync-for-woocommerce'); ?></p>
     280                        <p class="feedpup-muted"><?php esc_html_e('XML & CSV Supplier Feed Sync for WooCommerce', 'feedpup-xml-supplier-sync-for-woocommerce'); ?></p>
    283281                    </div>
    284282                </div>
    … …  
    309307                            <p class="feedpup-lead"><?php esc_html_e('One click links this store to FeedPup and opens your FeedPup workspace, already signed in. No account, password or URL needed.', 'feedpup-xml-supplier-sync-for-woocommerce'); ?></p>
    310308                            <?php submit_button(__('Connect to FeedPup', 'feedpup-xml-supplier-sync-for-woocommerce'), 'primary hero feedpup-connect-button', 'submit', false); ?>
     309                            <p class="feedpup-steps"><?php esc_html_e('Takes under 3 minutes: connect, paste your XML or CSV feed, and FeedPup maps the fields for you.', 'feedpup-xml-supplier-sync-for-woocommerce'); ?></p>
    311310                            <p class="feedpup-muted feedpup-consent"><?php
    312311                            // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- format is escaped; both links are built with esc_url()/esc_html__() above.
    … …  
    912911            return 0;
    913912        }
    914         $existing = get_posts(['post_type' => 'attachment', 'post_status' => 'inherit', 'post_parent' => $product_id, 'meta_key' => '_source_url', 'meta_value' => $url, 'fields' => 'ids', 'numberposts' => 1]);
    915         if ($existing) return (int) $existing[0];
     913        // A product has only a handful of attachments, so compare their source URL in PHP instead of a postmeta query.
     914        $children = get_posts(['post_type' => 'attachment', 'post_status' => 'inherit', 'post_parent' => $product_id, 'fields' => 'ids', 'numberposts' => 50]);
     915        foreach ($children as $child_id) {
     916            if ((string) get_post_meta((int) $child_id, '_source_url', true) === $url) {
     917                return (int) $child_id;
     918            }
     919        }
    916920        require_once ABSPATH . 'wp-admin/includes/media.php';
    917921        require_once ABSPATH . 'wp-admin/includes/file.php';
    … …  
    11871191            'fields' => 'ids',
    11881192            'numberposts' => 1,
     1193            // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key -- single-row fallback lookup by FeedPup's own unique key, used only when the links table has no row.
    11891194            'meta_key' => '_feedpup_product_key',
     1195            // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_value -- see above.
    11901196            'meta_value' => $key,
    11911197        ]);
  • feedpup-xml-supplier-sync-for-woocommerce/trunk/readme.txt

    r3765270 r3765277  
    1 === FeedPup – XML & CSV Supplier Feed Import for WooCommerce ===
     1=== FeedPup – XML & CSV Supplier Feed Import & Sync for WooCommerce ===
    22Contributors: giorgaras
    33Tags: supplier feed, xml supplier feed, dropshipping xml, stock sync, csv import
    … …  
    88WC requires at least: 8.0
    99WC tested up to: 11.2
    10 Stable tag: 0.1.4
     10Stable tag: 0.1.5
    1111License: GPLv2 or later
    1212License URI: https://www.gnu.org/licenses/gpl-2.0.html
    1313
    14 Import supplier XML or CSV feeds into WooCommerce. Preview products, test with drafts, then keep prices and stock in sync automatically.
     14Import supplier XML & CSV feeds into WooCommerce. FeedPup maps the fields for you, then keeps prices and stock in sync automatically.
    1515
    1616== Description ==
     17
     18= Why FeedPup =
     19
     20* **Automatic field mapping, no manual column mapping.** FeedPup detects your XML or CSV feed's structure and maps the supplier fields (title, SKU, price, stock, images, EAN, categories) to WooCommerce for you. You just review and confirm.
     21* **Fast setup.** Connect your store and run your first test import in under 3 minutes. No account to create, no import template, no XPath.
     22* **Automatic price and stock sync** on a schedule (paid plans), updating only the products FeedPup imported.
    1723
    1824**FeedPup imports products from your supplier's XML or CSV feed into WooCommerce and keeps their prices and stock up to date.** Paste the feed URL (or upload a CSV file), check the field matches that Pup, FeedPup's AI-assisted mapper, suggests, preview real products and create a few as drafts. Nothing is imported until you confirm it.
    … …  
    156162== Changelog ==
    157163
     164= 0.1.5 =
     165* Name: now "FeedPup – XML & CSV Supplier Feed Import & Sync for WooCommerce"; plugin description and admin page say XML & CSV.
     166* WooCommerce: declares compatibility with High-Performance Order Storage (HPOS) and the Cart & Checkout blocks, so WooCommerce no longer lists FeedPup as incompatible.
     167* The activation notice is shown once only.
     168* Connect page: a short line on what happens after you click Connect.
     169* Readme: clearer description of automatic field mapping and setup time.
     170
    158171= 0.1.4 =
    159172* Easier to find: FeedPup now has its own item in the WordPress admin menu (below WooCommerce and Products), plus a Settings link on the Plugins page, a one-time activation notice and a one-time redirect to the FeedPup page after activation.
    … …  
    174187== Upgrade Notice ==
    175188
     189= 0.1.5 =
     190Declares WooCommerce HPOS and Cart & Checkout blocks compatibility (removes the "incompatible plugin" warning) and shows the activation notice only once.
     191
    176192= 0.1.4 =
    177193FeedPup now has its own item in the admin menu, plus a Settings link and an activation notice, so it is easier to find.
Note: See TracChangeset for help on using the changeset viewer.