{"id":354476,"date":"2026-08-14T18:35:18","date_gmt":"2026-08-14T18:35:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/pcio-vis-products\/"},"modified":"2026-09-11T12:31:53","modified_gmt":"2026-09-11T12:31:53","slug":"pcio-vis-products","status":"publish","type":"plugin","link":"https:\/\/kaa.wordpress.org\/plugins\/pcio-vis-products\/","author":20981457,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.0","stable_tag":"1.2.0","tested":"7.1","requires":"6.2","requires_php":"8.1","requires_plugins":null,"header_name":"PCIO VIS Products","header_author":"PCIO","header_description":"Adds a digital shop to PCIO VIS Member Event: products and license-key subscriptions, a public [pcio_me_shop] storefront with Stripe checkout, a Shop Orders list in Finance, automatic membership subscriptions on the member list, and a renewal\/expiry reminder cron. Reuses the Tickets plugin's Stripe configuration.","assets_banners_color":"000000","last_updated":"2026-09-11 12:31:53","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/www.pcio.dk\/","header_author_uri":"https:\/\/www.pcio.dk","rating":0,"author_block_rating":0,"active_installs":0,"downloads":176,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"pcio","date":"2026-08-14 18:35:06","revision":3647824},"1.1.0":{"tag":"1.1.0","author":"pcio","date":"2026-09-08 12:27:41","revision":3686599},"1.2.0":{"tag":"1.2.0","author":"pcio","date":"2026-09-11 12:31:53","revision":3691381}},"upgrade_notice":{"1.2.0":"<p>Requires PCIO VIS Member Event 1.4 or later, which adds the member &quot;Membership #&quot; field that subscriptions are linked to. Update the core plugin first, then open any wp-admin page so its schema upgrade runs.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3647823,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3647823,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3647823,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3647823,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0","1.2.0"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3647823,"resolution":"1","location":"assets","locale":"","width":2761,"height":806}},"screenshots":{"1":"The product page where products can be maintained. Single purchase or subscription products."}},"plugin_section":[],"plugin_tags":[147431,702,1242,5349,4079],"plugin_category":[41,45],"plugin_contributors":[265152],"plugin_business_model":[],"class_list":["post-354476","plugin","type-plugin","status-publish","hentry","plugin_tags-license-keys","plugin_tags-products","plugin_tags-shop","plugin_tags-stripe","plugin_tags-subscriptions","plugin_category-communication","plugin_category-ecommerce","plugin_contributors-pcio","plugin_committers-pcio"],"banners":{"banner":"https:\/\/ps.w.org\/pcio-vis-products\/assets\/banner-772x250.png?rev=3647823","banner_2x":"https:\/\/ps.w.org\/pcio-vis-products\/assets\/banner-1544x500.png?rev=3647823","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/pcio-vis-products\/assets\/icon-128x128.png?rev=3647823","icon_2x":"https:\/\/ps.w.org\/pcio-vis-products\/assets\/icon-256x256.png?rev=3647823","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/pcio-vis-products\/assets\/screenshot-1.jpg?rev=3647823","caption":"The product page where products can be maintained. Single purchase or subscription products."}],"raw_content":"<!--section=description-->\n<p>PCIO VIS Products is an extension for the PCIO VIS Member Event plugin. It adds a digital shop with products and license-key subscriptions, a public <code>[pcio_me_shop]<\/code> storefront with Stripe checkout, a Shop Orders list in Finance, automatic membership subscriptions on the member list, and a renewal\/expiry reminder cron.<\/p>\n\n<p>Features:<\/p>\n\n<ul>\n<li>Digital products and license-key subscriptions.<\/li>\n<li>Public storefront via the <code>[pcio_me_shop]<\/code> shortcode with Stripe checkout.<\/li>\n<li>Shop Orders list integrated into the core Finance area.<\/li>\n<li>Automatic membership subscriptions on the member list.<\/li>\n<li>Renewal and expiry reminder cron.<\/li>\n<\/ul>\n\n<p>This plugin requires the PCIO VIS Member Event core plugin to be installed and active. It reuses the PCIO VIS Tickets plugin's Stripe configuration.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the Stripe payment API (operated by Stripe, Inc.) to process card payments for paid products and subscription renewals. Free products (price 0) never contact Stripe. Stripe is only used when Stripe API keys have been entered in the PCIO VIS Tickets settings.<\/p>\n\n<p>What is sent, and when:<\/p>\n\n<ul>\n<li><strong>When a buyer checks out a paid product or renewal:<\/strong> the plugin creates a Stripe Checkout Session by sending the order number, line items (product names and amounts), the currency, the buyer's email address, and success\/cancel return URLs to <code>https:\/\/api.stripe.com<\/code>. The buyer is then redirected to Stripe's hosted checkout page, where card details are entered directly with Stripe (card data never passes through this site).<\/li>\n<li><strong>When an administrator refunds a paid order:<\/strong> the payment reference is sent to <code>https:\/\/api.stripe.com<\/code> to create the refund.<\/li>\n<li><strong>On the order confirmation page:<\/strong> the plugin queries <code>https:\/\/api.stripe.com<\/code> to confirm payment status (this site does not use a separate webhook for the shop).<\/li>\n<\/ul>\n\n<p>Buyer name and email entered at checkout are stored on this site to issue and email licence keys. Because personal data and payment data are transmitted to Stripe, please ensure your own privacy policy covers this. By using this integration you and your buyers are subject to Stripe's terms and policies:<\/p>\n\n<ul>\n<li>Stripe Services Agreement (terms): https:\/\/stripe.com\/legal\/ssa<\/li>\n<li>Stripe Privacy Policy: https:\/\/stripe.com\/privacy<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the <strong>PCIO VIS Member Event<\/strong> core plugin first.<\/li>\n<li>Upload the <code>pcio-vis-products<\/code> directory to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin in <strong>Plugins<\/strong> in the WordPress admin.<\/li>\n<li>Add products and configure the shop under the <strong>Vis<\/strong> admin menu.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20does%20the%20storefront%20appear%3F\"><h3>Where does the storefront appear?<\/h3><\/dt>\n<dd><p>Add the <code>[pcio_me_shop]<\/code> shortcode to any page, or browse the shop under <code>\/vis\/shop<\/code>.<\/p><\/dd>\n<dt id=\"do%20i%20need%20to%20configure%20stripe%20here%3F\"><h3>Do I need to configure Stripe here?<\/h3><\/dt>\n<dd><p>Stripe configuration is shared with the PCIO VIS Tickets plugin. No separate Stripe setup is needed in this plugin.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Added: <strong>Manage subscriptions<\/strong> \u2014 the Subscriptions tab on <code>\/vis\/shop<\/code> now lets authorized users create, edit and delete member subscriptions directly, alongside the ones generated automatically from Stripe orders. The dialog picks a product, the member's membership number, an expiry date and a status (active, expired or cancelled).<\/li>\n<li>Added: <strong>Membership number linking<\/strong> \u2014 subscriptions are tied to a member by the core \"Membership #\" field. The Subscriptions tab gains Member #, Membership and Counted columns (with a Counted filter) so you can see and reconcile exactly which subscriptions count toward the active-membership total.<\/li>\n<li>Changed: subscription management is available to users with either <strong>Manage finance<\/strong> or <strong>Manage shop<\/strong>, and the <code>\/vis\/shop<\/code> page now opens for finance managers too.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added: Membership Rules admin page (<strong>Vis \u2192 Membership Rules<\/strong>) to control how subscription expiry dates are calculated \u2014 Floating (1 year from purchase), Fixed annual start, or Fixed with a cutting date.<\/li>\n<li>Added: Subscription period selector in the product dialog so a product can follow the Floating, Fixed, or Fixed-with-cutting-date rule.<\/li>\n<li>Added: Editable email templates in the core Mails editor (<code>\/vis\/mails\/<\/code>) for the subscription reminder, subscription-ended, order-confirmation, and delivery-notification emails, with insertable tags such as <code>{name}<\/code>, <code>{product_name}<\/code>, <code>{expire_date}<\/code>, <code>{renew_url}<\/code>, <code>{licence_keys}<\/code>, <code>{order_no}<\/code>, and <code>{site_name}<\/code>. Templates are seeded automatically, including on existing installs.<\/li>\n<li>Added: New <code>[pcio_me_member_subscription_count]<\/code> shortcode that shows an animated count of members with an active membership subscription.<\/li>\n<li>Added: Active-membership count is now contributed to the core Statistics dashboard.<\/li>\n<li>Added: Subscription details (<code>{subscription_name}<\/code>, <code>{expire_date}<\/code>) are now available as tags in the member welcome email.<\/li>\n<li>Added: Quantity picker with a configurable <code>max_qty<\/code> attribute on the <code>[pcio_me_product_order]<\/code> shortcode.<\/li>\n<li>Added: Cron test mode toggle on the Vis sync page \u2014 routes all subscription emails to the site administrator and keeps expired subscriptions in place, for safe testing and migration.<\/li>\n<li>Added: Shortcode reference page now documents <code>[pcio_me_shop]<\/code>, <code>[pcio_me_product_order]<\/code>, and <code>[pcio_me_member_subscription_count]<\/code>, including navigation entries.<\/li>\n<li>Added: Dark page-header banner (matching the Members and Finance pages) on the <code>\/vis\/shop<\/code> and <code>\/vis\/delivery<\/code> admin pages.<\/li>\n<li>Improved: The delivery orders list now shows the member's address and phone (from the core member record), and the delivery-notification email includes them.<\/li>\n<li>Fixed: <code>\/vis\/delivery<\/code> showed a duplicate section heading \u2014 the JS-rendered \"Delivery Orders\" inner header has been removed.<\/li>\n<li>Fixed: Resolved WordPress Plugin Check warnings (nonce verification on the Membership Rules page and a discouraged schema-change query in the products database layer).<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Adds a digital shop to PCIO VIS Member Event: products, license-key subscriptions, a storefront with Stripe checkout and member subscriptions.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/kaa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/354476","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kaa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/kaa.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/kaa.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=354476"}],"author":[{"embeddable":true,"href":"https:\/\/kaa.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/pcio"}],"wp:attachment":[{"href":"https:\/\/kaa.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=354476"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/kaa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=354476"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/kaa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=354476"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/kaa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=354476"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/kaa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=354476"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/kaa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=354476"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}