<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>WooCommerce Subscriptions - CODIBU</title>
	<atom:link href="https://help.codibu.com/kbtopic/woocommerce-subscriptions/feed/" rel="self" type="application/rss+xml" />
	<link>https://help.codibu.com</link>
	<description>Hosting &#38; Domain,  Development &#38; Design, SEO &#38; Marketing, 2300+ Themes &#38; Plugins, Free SEO analysis &#38; tools</description>
	<lastBuildDate>Sun, 08 Nov 2020 15:33:19 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://help.codibu.com/wp-content/uploads/2022/07/favicon.png</url>
	<title>WooCommerce Subscriptions - CODIBU</title>
	<link>https://help.codibu.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Subscriptions Scheduled Action Errors</title>
		<link>https://help.codibu.com/blog/subscriptions-scheduled-action-errors/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=subscriptions-scheduled-action-errors</link>
					<comments>https://help.codibu.com/blog/subscriptions-scheduled-action-errors/#respond</comments>
		
		<dc:creator><![CDATA[JN C]]></dc:creator>
		<pubDate>Sun, 08 Nov 2020 15:33:19 +0000</pubDate>
				<guid isPermaLink="false">https://help.codibu.com/kb/subscriptions-scheduled-action-errors/</guid>

					<description><![CDATA[<p>WooCommerce Subscriptions uses a library called Action Scheduler in order to process scheduled events, like renewal payments or subscription expirations. If an error occurs when processing a scheduled<span class="excerpt-hellip"> […]</span></p>
<p>The post <a href="https://help.codibu.com/blog/subscriptions-scheduled-action-errors/">Subscriptions Scheduled Action Errors</a> first appeared on <a href="https://help.codibu.com">CODIBU</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>WooCommerce Subscriptions uses a library called Action Scheduler in order to process scheduled events, like renewal payments or subscription expirations. If an error occurs when processing a scheduled subscription payment for WooCommerce Subscriptions, a notice may appear in the admin dashboard to alert store managers to this error.</p>
<p>This guide will explain why this notice is displayed, likely causes of the issue, steps to diagnose the cause, and how to fix the problem or get help.</p>
<h2 id="section-1">Scheduled Action Timeout Notice</h2>
<p>As mentioned in Action Scheduler housekeeping, if an action has been “running” for more than five minutes, it is considered to have timed out and is marked as failed. This is because if an action has been running for that length of time, it is likely not actually running at all. When a subscription-related action fails due to a timeout, a notice is displayed in the admin dashboard.</p>
<figure id="attachment_1435945" class="wp-caption aligncenter" aria-describedby="caption-attachment-1435945"><a href="https://help.codibu.com/wp-content/uploads/2020/11/SA1_error_notice_update.png"><img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-10718" src="https://help.codibu.com/wp-content/uploads/2020/11/SA1_error_notice_update.png" alt="" width="2900" height="336" /></a><br /><figcaption id="caption-attachment-1435945" class="wp-caption-text">Scheduled Action Error Notice</figcaption></figure>
<h2 id="section-2">Fixing Affected Subscriptions</h2>
<h3 id="section-3">Step 1 – Finding the Affected Subscription</h3>
<p>The notice that appears after an action timeout contains a note with the subscription number and a link to the edit subscription page for that subscription. This can be used to investigate if there are issues with the last renewal payment for that subscription that need to be manually addressed.</p>
<h3 id="section-4">Step 2 – Tracking When the Payment Process Was Affected</h3>
<p>The first step to this is to see if payment was actually affected. This can be done by tracking when the payment process was affected.</p>
<h4 id="tracking-the-renewal-process">Tracking the Renewal Process</h4>
<p>For a renewal order, each stage of the renewal process is documented on the subscription in its notes. To view this process:</p>
<ol>
<li>Go to the <b>WooCommerce &gt; Subscriptions &gt; Edit Subscription</b> screen</li>
<li>View the <b>Subscription notes </b>
<p>&nbsp;</p>
<figure id="attachment_1425154" class="wp-caption aligncenter" aria-describedby="caption-attachment-1425154"><a href="https://help.codibu.com/wp-content/uploads/2020/11/SA2_subscription_notes.png"><img decoding="async" class="aligncenter size-full wp-image-10719" src="https://help.codibu.com/wp-content/uploads/2020/11/SA2_subscription_notes.png" alt="" width="2048" height="996" /></a><br /><figcaption id="caption-attachment-1425154" class="wp-caption-text">WooCommerce Edit Subscription – Notes</figcaption></figure>
</li>
<li>The normal <a href="https://help.codibu.com/blog/kb/subscription-renewal-process/">process for a renewal</a> follows:
<ol>
<li>When a renewal is due, the subscription is moved to an <b>On-hold</b> status</li>
<li>An order is created to record the renewal</li>
<li>If the subscription is on automatic renewals, the order attempts to process payment and may mark complete</li>
<li>Once payment is complete, the subscription is moved to <b>Active</b> status 
<p>&nbsp;</p>
<figure id="attachment_1425155" class="wp-caption aligncenter" aria-describedby="caption-attachment-1425155"><a href="https://help.codibu.com/wp-content/uploads/2020/11/SA3_subscription_notes_renewal.png"><img decoding="async" class="aligncenter size-full wp-image-10720" src="https://help.codibu.com/wp-content/uploads/2020/11/SA3_subscription_notes_renewal.png" alt="" width="598" height="1000" /></a><br /><figcaption id="caption-attachment-1425155" class="wp-caption-text">Subscription Notes – Successful Renewal</figcaption></figure>
</li>
</ol>
</li>
<li>Each step above records the date and time at which it was processed.</li>
</ol>
<p>Comparisons can be made between the payment process and the failed action in order to find out when the process timed out.</p>
<h4 id="failure-before-payment">Failure Before Payment</h4>
<p>If the renewal order was created but the payment was not marked complete, the process may have stalled before payment was processed. This can be indicated if the time of failure of the action, as found above, is close to the time of the creation of the renewal order.</p>
<p>To make sure that the payment was not captured, there are a couple steps to take.</p>
<ol>
<li>Go to the created order, linked to in the <b>Subscription notes</b></li>
<li>Check the <b>Order notes</b> on the order to see if the status changed and the payment was processed
<p>&nbsp;</p>
<figure id="attachment_1425156" class="wp-caption aligncenter" aria-describedby="caption-attachment-1425156"><a href="https://help.codibu.com/wp-content/uploads/2020/11/SA4_order_notes_payment_complete.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10721" src="https://help.codibu.com/wp-content/uploads/2020/11/SA4_order_notes_payment_complete.png" alt="" width="2048" height="607" /></a><br /><figcaption id="caption-attachment-1425156" class="wp-caption-text">Order Notes – Payment Complete</figcaption></figure>
</li>
<li>Log in to the chosen payment gateway’s store account and check if the charge was captured for that order.</li>
</ol>
<p>If there is no charge, then the processed stalled before payment was taken.</p>
<h4 id="failure-after-payment">Failure After Payment</h4>
<p>If payment was captured but the order was not marked <b>Processing</b> or <b>Complete</b> or the subscription was not transitioned to an <b>Active</b> status, then the process stalled after payment. This can be indicated if the time of failure of the action, as found above, occurs after the payment was marked complete.</p>
<h3 id="section-5">Step 3 – Fixing Affected Subscriptions and Orders</h3>
<h4 id="affected-before-payment">Affected Before Payment</h4>
<p>If payment was not captured:</p>
<ol>
<li>On the existing renewal order, change the status to <b>Cancelled</b> and <b>Update</b>.</li>
<li>Set the subscription status to <b>Active</b> and <b>Update</b>.</li>
<li>Choose <b>Process renewal</b> from the subscription option dropdown.</li>
<li>This will then create a new renewal order, which should process as normal.</li>
</ol>
<h4 id="affected-after-payment">Affected After Payment</h4>
<p>If payment was captured but the order and subscription were not updated:</p>
<ol>
<li>If the renewal order was not marked <b>Processing</b> or <b>Complete</b>, change the status to the appropriate status. This will also update the subscription to <b>Active</b>.</li>
<li>If only the subscription was not transitioned, set the subscription status to <b>Active</b>.</li>
</ol>
<h2 id="section-6">Diagnosing the Cause</h2>
<p>It’s impossible to programmatically identify the cause of a timeout. Instead, they always require manual investigated, which is why this notice is displayed. There are a number of possible causes, as outlined below, which should be explored to find the cause of the timeout.</p>
<h3 id="section-7">Subscriptions Version</h3>
<p>These timeouts, and thus the error notices, are expected to be extremely rare occurrences with Subscriptions 2.4.3 or newer.</p>
<p>If this notice appears on a site running a version of Subscriptions less than 2.4.3, the first step is to update the Subscriptions version.</p>
<p>If a site is currently running a Subscriptions version greater than or equal to 2.4.3, the version of Subscriptions <i>at the time of the error</i> should be checked. Even if Subscriptions has since been updated, it is important to note what version was running at the time the notice first appeared.</p>
<p>In order to check the version of Subscriptions running when the error occurred:</p>
<ol>
<li>Review the <a href="https://help.codibu.com/blog/kb/subscriptions-logs/#section-7">WCS Upgrade log</a> and the <a href="https://help.codibu.com/blog/kb/subscriptions-logs/#section-3">Failed Scheduled Actions log</a></li>
<li>Compare the time the error is logged in the Failed Scheduled Actions log to the version running at that time, as found in the WCS Upgrade log</li>
</ol>
<p>If a Subscriptions version less than 2.4.3 was running at the time of the error and Subscriptions has since been updated, the underlying issue has likely been resolved.</p>
<p>If the version of Subscriptions was newer than that at the time of the error, further investigation is needed.</p>
<h3 id="section-8">PHP Time Limit</h3>
<p>The PHP time limit is the amount of time the server will spend on a single process before timing out. A time limit that is too short can cause processes to time out. A common default value is 30 seconds, and many managed hosts provide a longer timeout period.</p>
<p>To find the PHP time limit for your server:</p>
<ol>
<li>Go to <b>WooCommerce &gt; Status</b> to view the system status</li>
<li>Scroll down to the <b>Server environment</b> section</li>
<li>View the <b>PHP time limit </b>
<p>&nbsp;</p>
<figure id="attachment_1425162" class="wp-caption aligncenter" aria-describedby="caption-attachment-1425162"><a href="https://help.codibu.com/wp-content/uploads/2020/11/SA5_php_time_limit.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10722" src="https://help.codibu.com/wp-content/uploads/2020/11/SA5_php_time_limit.png" alt="" width="2048" height="526" /></a><br /><figcaption id="caption-attachment-1425162" class="wp-caption-text">PHP Time Limit</figcaption></figure>
</li>
</ol>
<p>If this limit is below 30 seconds, we recommend increasing it to avoid scheduled action timeouts.</p>
<p>To change this limit, contact your hosting provider and discuss with them the best way to change the time limit if possible.</p>
<h3 id="section-9">Large Number of Timeouts</h3>
<p>This kind of notice and timeout is expected to be a very infrequent occurrence, and certainly not something that occurs repeatedly. In sites where there are dozens of timeouts or more, there is likely a critical underlying problem causing the timeouts that will need to be addressed.</p>
<p>To check the number of timeouts review the <a href="https://help.codibu.com/blog/kb/subscriptions-logs/#section-3">Failed Scheduled Actions log</a>.</p>
<p>If there are many timeouts, please open a support ticket.</p>
<h2 id="section-10">Further Help</h2>
<p>If you would like further assistance, please open a support ticket.</p>
<p>In the support ticket, please include the <a href="https://help.codibu.com/blog/kb/opening-a-subscriptions-support-ticket/#section-6">system status</a>, so we can find your site’s PHP time limit and plugin versions, and the name of your host, so we can investigate their specific server limitations. If in Step 1 you were able to determine the active version of Subscriptions at the time of the error, include this as well. Please also include an <a href="https://help.codibu.com/blog/kb/opening-a-subscriptions-support-ticket/#section-7">admin login</a> so that we can access your site.</p><p>The post <a href="https://help.codibu.com/blog/subscriptions-scheduled-action-errors/">Subscriptions Scheduled Action Errors</a> first appeared on <a href="https://help.codibu.com">CODIBU</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://help.codibu.com/blog/subscriptions-scheduled-action-errors/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Disabling Subscriptions</title>
		<link>https://help.codibu.com/blog/disabling-subscriptions/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=disabling-subscriptions</link>
					<comments>https://help.codibu.com/blog/disabling-subscriptions/#respond</comments>
		
		<dc:creator><![CDATA[JN C]]></dc:creator>
		<pubDate>Sun, 08 Nov 2020 15:31:52 +0000</pubDate>
				<guid isPermaLink="false">https://help.codibu.com/kb/disabling-subscriptions/</guid>

					<description><![CDATA[<p>Disabling plugins is a common process in troubleshooting a problem or turning off a functionality. A number of issues can arise from disabling WooCommerce Subscriptions, such as<span class="excerpt-hellip"> […]</span></p>
<p>The post <a href="https://help.codibu.com/blog/disabling-subscriptions/">Disabling Subscriptions</a> first appeared on <a href="https://help.codibu.com">CODIBU</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Disabling plugins is a common process in troubleshooting a problem or turning off a functionality.</p>
<p>A number of issues can arise from disabling <a href="https://help.codibu.com/blog/kb/woocommerce-subscriptions/">WooCommerce Subscriptions</a>, such as for:</p>
<ul>
<li>Any dependent plugins</li>
<li>Renewal payments</li>
<li>Expiration upon the subscription’s end date</li>
<li>Cancellation after the end of the prepaid term is reached</li>
<li>Automatic retry of failed payments</li>
</ul>
<p>Additionally, simply disabling the plugin may not completely stop all the actions associated with it, such as renewal payments.</p>
<h2 id="section-1">Disabling Subscriptions Actions</h2>
<p>If choosing to disable Subscriptions, steps will need to be taken to completely stop all associated actions. Scheduled actions, such as renewal payments, are processed in Subscriptions by a job queue library called Action Scheduler.</p>
<p>If another plugin, such as WooCommerce Memberships, Follow-up Emails, or WooCommerce version 3.5 or greater, is active on the site, then they will also be loading a version of Action Scheduler to process their own scheduled actions. In this case, the scheduled events for Subscriptions will continue to be processed, even if Subscriptions is inactive.</p>
<p>To check if another plugin is loading Action Scheduler:</p>
<ol>
<li>Disable Subscriptions</li>
<li>Visit the admin screen at <code>https://example.com/wp-admin/tools.php?page=action-scheduler</code>, replacing <code>example.com</code> with your site’s URL
<p>&nbsp;</p>
<figure id="attachment_1298523" class="wp-caption aligncenter" aria-describedby="caption-attachment-1298523"><a href="https://help.codibu.com/wp-content/uploads/2020/11/scheduled_actions_page.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10725" src="https://help.codibu.com/wp-content/uploads/2020/11/scheduled_actions_page.png" alt="" width="2048" height="963" /></a><br /><figcaption id="caption-attachment-1298523" class="wp-caption-text">Scheduled Actions Page</figcaption></figure>
</li>
<li>If the page loads, another plugin is using Action Scheduler</li>
</ol>
<p>If nothing else is loading Action Scheduler, the queue will remain but be inactive. This means that it will still be there and continue to run if Action Scheduler is activated, either by re-activating Subscriptions or another plugin that uses Action Scheduler.</p>
<p>If Action Scheduler is still active and you do not want to disable the other plugins, it is possible to stop Action Scheduler from running. In order to completely stop Action Scheduler from running, download, install, and activate the Action Scheduler Disable Default Runner plugin. This plugin will stop the Action Scheduler queue from running altogether.</p>
<p>This means that all actions for all plugins using Action Scheduler will stop. If you need to continue processing actions for other plugins, please open a support ticket.</p>
<h2 id="section-2">Disabling a Payment Gateway Plugin</h2>
<p>It is also possible to disable a specific payment gateway plugin. If a gateway plugin is disabled while Subscriptions is active, those subscriptions that use that gateway will be converted to use <a href="https://help.codibu.com/blog/kb/subscription-renewal-process/">manual renewals</a>. This means that the subscriptions can be paid for, but the customer will need to log in and pay for the subscription using a different gateway, rather than a payment being automatically processed.</p><p>The post <a href="https://help.codibu.com/blog/disabling-subscriptions/">Disabling Subscriptions</a> first appeared on <a href="https://help.codibu.com">CODIBU</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://help.codibu.com/blog/disabling-subscriptions/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Subscriptions Logs</title>
		<link>https://help.codibu.com/blog/subscriptions-logs/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=subscriptions-logs</link>
					<comments>https://help.codibu.com/blog/subscriptions-logs/#respond</comments>
		
		<dc:creator><![CDATA[JN C]]></dc:creator>
		<pubDate>Sun, 08 Nov 2020 15:31:06 +0000</pubDate>
				<guid isPermaLink="false">https://help.codibu.com/kb/subscriptions-logs/</guid>

					<description><![CDATA[<p>The WooCommerce Subscriptions extension creates and adds to a number of WooCommerce logs to record errors and other events. Recording these events can be important, especially<span class="excerpt-hellip"> […]</span></p>
<p>The post <a href="https://help.codibu.com/blog/subscriptions-logs/">Subscriptions Logs</a> first appeared on <a href="https://help.codibu.com">CODIBU</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>The WooCommerce Subscriptions extension creates and adds to a number of WooCommerce logs to record errors and other events. Recording these events can be important, especially when an issue occurs and the cause must be investigated. These logs record histories of different events that can provide clues as to the cause and repercussions of an issue. Below is a list of the logs that Subscriptions creates and modifies.</p>
<p>Logs can be found on the dashboard of a site. To view the logs:</p>
<ol>
<li>Go to <b>WooCommerce &gt; Status</b></li>
<li>Click on the <b>Logs</b> tab</li>
<li>Choose a log from the drop-down</li>
</ol>
<p>Log names will begin with the given labels, but will sometimes then have a date and a string of letters and numbers, called a hash, added to them. This is to ensure that each log has a unique name and is not overwritten.</p>
<figure id="attachment_1267703" class="wp-caption aligncenter" aria-describedby="caption-attachment-1267703"><figcaption id="caption-attachment-1267703" class="wp-caption-text"><a href="https://help.codibu.com/wp-content/uploads/2020/11/1_logs_tab.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10641" src="https://help.codibu.com/wp-content/uploads/2020/11/1_logs_tab.png" alt="" width="2048" height="563" /></a>WooCommerce Logs Tab</figcaption></figure>
<h2 id="section-1">Error Logs</h2>
<h3 id="section-2">Failed Status Change Logs</h3>
<p>This log is labeled <code>wcs-update-status-failures</code>. This log records when there has been an error when updating the status of a subscription.</p>
<p>Example log entry:</p>
<figure id="attachment_1267731" class="wp-caption aligncenter" aria-describedby="caption-attachment-1267731"><a href="https://help.codibu.com/wp-content/uploads/2020/11/2_logs_status_change.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10644" src="https://help.codibu.com/wp-content/uploads/2020/11/2_logs_status_change.png" alt="" width="1960" height="1505" /></a><br /><figcaption id="caption-attachment-1267731" class="wp-caption-text">Failed Status Change Log Example</figcaption></figure>
<h3 id="section-3">Failed Scheduled Action Logs</h3>
<p>This log is labeled <code>failed-scheduled-actions</code>. This log records when a scheduled action has failed. It will contain information such as the scheduled action’s name and ID, how long it was attempted, and the arguments.</p>
<p>Example log entry:</p>
<figure id="attachment_1267747" class="wp-caption aligncenter" aria-describedby="caption-attachment-1267747"><a href="https://help.codibu.com/wp-content/uploads/2020/11/3_logs_failed_scheduled.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10646" src="https://help.codibu.com/wp-content/uploads/2020/11/3_logs_failed_scheduled.png" alt="" width="1974" height="468" /></a><br /><figcaption id="caption-attachment-1267747" class="wp-caption-text">Failed Scheduled Action Log Example</figcaption></figure>
<h3 id="section-4">Failed PayPal IPN Logs</h3>
<p>This log is labeled <code>wcs-ipn-failures</code>. This log records fatal errors that occur while a PayPal IPN is being processed. These error messages will contain info such as a stack trace for where the error occurred.</p>
<p>Example log entry:</p>
<figure id="attachment_1267761" class="wp-caption aligncenter" aria-describedby="caption-attachment-1267761"><a href="https://help.codibu.com/wp-content/uploads/2020/11/4_logs_ipn_failures.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10649" src="https://help.codibu.com/wp-content/uploads/2020/11/4_logs_ipn_failures.png" alt="" width="2048" height="1090" /></a><br /><figcaption id="caption-attachment-1267761" class="wp-caption-text">Failed PayPal IPN Log Example</figcaption></figure>
<h3 id="section-5">PayPal Logs</h3>
<p>This log is labeled <code>paypal</code>. Subscriptions does not generate this log, but adds to it. This log records PayPal IPNs, the actions taken with them, and errors.</p>
<p>Example log entry:</p>
<figure id="attachment_1267767" class="wp-caption aligncenter" aria-describedby="caption-attachment-1267767"><a href="https://help.codibu.com/wp-content/uploads/2020/11/5_logs_paypal.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10652" src="https://help.codibu.com/wp-content/uploads/2020/11/5_logs_paypal.png" alt="" width="2048" height="1087" /></a><br /><figcaption id="caption-attachment-1267767" class="wp-caption-text">PayPal Log Example</figcaption></figure>
<h3 id="section-6">Caching Event Logs</h3>
<p>This log is labeled <code>wcs-cache</code>. This log records events related to caching, such as clearing the cache of a particular subscription. <code>WCS_DEBUG</code> must be on for this log to populate. The methods that use this cache were deprecated in <a href="https://help.codibu.com/blog/kb/whats-new-in-subscriptions-2-3/">Subscriptions version 2.3</a>.</p>
<p>Example log entry:</p>
<figure id="attachment_1267770" class="wp-caption aligncenter" aria-describedby="caption-attachment-1267770"><a href="https://help.codibu.com/wp-content/uploads/2020/11/6_log_cache.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10654" src="https://help.codibu.com/wp-content/uploads/2020/11/6_log_cache.png" alt="" width="2048" height="1085" /></a><br /><figcaption id="caption-attachment-1267770" class="wp-caption-text">Caching Event Log Example</figcaption></figure>
<h2 id="section-7">Upgrade Logs</h2>
<p>When WooCommerce Subscriptions is upgraded to a new version, for example, from version <code>2.4.7</code> to <code>2.5.0</code>, it records some information about the upgrade process in a variety of logs.</p>
<h3 id="section-8">General Upgrade Notes Logs</h3>
<p>This log records during upgrades and contains:</p>
<ul>
<li>Timestamp of when the upgrade occurred</li>
<li>Version of Subscriptions being updated to</li>
<li>Old version of Subscriptions updated from</li>
<li>WooCommerce version during this upgrade</li>
<li>WooCommerce database version</li>
<li>Environment info, which includes WordPress version</li>
<li>Info about active plugins, such as name, author, and version</li>
</ul>
<p>The information in this log is automatically deleted after eight weeks. This log is labeled <code>wcs-upgrade</code>.</p>
<p>Example log entry:</p>
<figure id="attachment_1460831" class="wp-caption aligncenter" aria-describedby="caption-attachment-1460831"><a href="https://help.codibu.com/wp-content/uploads/2020/11/logs_upgrade_log.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10693" src="https://help.codibu.com/wp-content/uploads/2020/11/logs_upgrade_log.png" alt="" width="2048" height="435" /></a><br /><figcaption id="caption-attachment-1460831" class="wp-caption-text">Upgrade Log Example</figcaption></figure>
<h3 id="section-9">Update Post Author Column Logs</h3>
<p>This log is labeled <code>wcs-upgrade-subscription-post-author</code>. WooCommerce 3.5 began storing the customer ID associated with an order in the <code>post_author</code> field of the <code>wp_posts</code> table. Previously, this information was stored in post meta as <code>_customer_user</code>, and will continue to be stored there as well for backwards compatibility. This change should result in performance improvements when filtering by customer ID. Subscriptions 2.4 includes an upgrade to follow this change and store the customer ID associated with a subscription in the <code>post_author</code> field as well, but <b>only for stores running WooCommerce 3.5 or greater</b>. This log records the subscriptions that had the customer ID added to the <code>post_author</code> column or errors that occur in that process.</p>
<p>Example log entry:</p>
<figure id="attachment_1267778" class="wp-caption aligncenter" aria-describedby="caption-attachment-1267778"><a href="https://help.codibu.com/wp-content/uploads/2020/11/8_logs_post_author.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10657" src="https://help.codibu.com/wp-content/uploads/2020/11/8_logs_post_author.png" alt="" width="1910" height="846" /></a><br /><figcaption id="caption-attachment-1267778" class="wp-caption-text">Update Post Author Column Log Example</figcaption></figure>
<h3 id="section-10">Migrate Payment Retries to Custom Tables Logs</h3>
<p>This log is labeled <code>wcs-retry-migrator</code>. Subscriptions 2.4 migrates payment retry data to custom tables. This allows potential performance improvements for sites with payment retry data. This log records the payment retry id, the table it was migrated to, and its new id.</p>
<p>Example log entry:</p>
<figure id="attachment_1267779" class="wp-caption aligncenter" aria-describedby="caption-attachment-1267779"><a href="https://help.codibu.com/wp-content/uploads/2020/11/9_logs_retry_migrator.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10659" src="https://help.codibu.com/wp-content/uploads/2020/11/9_logs_retry_migrator.png" alt="" width="2048" height="472" /></a><br /><figcaption id="caption-attachment-1267779" class="wp-caption-text">Payment Retry Migration Log Example</figcaption></figure>
<h3 id="section-11">Add Start Date Meta Data Logs</h3>
<p>This log is labeled <code>wcs-add-start-date-metadata</code>. In Subscriptions 2.4, a metadata change was made to have separate entries for a subscription’s created date and start date. This is not a visible change at the moment, but the data on existing subscription will be updated. In the upgrade process for Subscriptions 2.4, a script will run that will add the start date meta data. This log records the subscriptions that have meta data added or errors that occur in that process.</p>
<p>Example log entry:</p>
<figure id="attachment_1267781" class="wp-caption aligncenter" aria-describedby="caption-attachment-1267781"><a href="https://help.codibu.com/wp-content/uploads/2020/11/10_logs_start_date.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10661" src="https://help.codibu.com/wp-content/uploads/2020/11/10_logs_start_date.png" alt="" width="2048" height="927" /></a><br /><figcaption id="caption-attachment-1267781" class="wp-caption-text">Add Start Date Meta Data Log Example</figcaption></figure>
<h3 id="section-12">Add Subscription Address Index Logs</h3>
<p>This log is labeled <code>wcs-add-subscription-address-indexes</code>. In the upgrade process for Subscriptions 2.3, a repair script will run to add address indexes for subscriptions created before WooCommerce 3.0 was in use, which is when address indexes were added. This log records the subscriptions whose addresses are updated or errors that occur during that process.</p>
<p>Example log entry:</p>
<figure id="attachment_1267784" class="wp-caption aligncenter" aria-describedby="caption-attachment-1267784"><a href="https://help.codibu.com/wp-content/uploads/2020/11/11_logs_address_indexes.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10662" src="https://help.codibu.com/wp-content/uploads/2020/11/11_logs_address_indexes.png" alt="" width="1942" height="1296" /></a><br /><figcaption id="caption-attachment-1267784" class="wp-caption-text">Add Subscription Address Index Log Example</figcaption></figure>
<h3 id="section-13">Repair PayPal Suspended Subscriptions Logs</h3>
<p>This log is labeled <code>wcs-upgrade-subscriptions-paypal-suspended</code>. In the Subscriptions 2.3 upgrade, a repair script aligns subscriptions that were suspended in PayPal but not in WooCommerce. Due to a bug that was present from Subscriptions version <code>2.1.4</code> to <code>2.2.8</code>, there were rare circumstances in which subscriptions in WooCommerce became out of sync with PayPal. This log records the subscriptions that were repaired or errors that occurred during that process.</p>
<h3 id="section-14">Repair Contains Synced Variation Subscriptions Logs</h3>
<p>This log is labeled <code>wcs-upgrade-subscriptions-containing-synced-variations</code>. In Subscriptions 2.2.0, there was a bug that meta data <code>_contains_synced_subscription</code> was not set in the case that a subscription containing a synced product variation was purchased when running WooCommerce version 3.0 or greater. This bug was fixed in Subscriptions 2.2.8. The upgrade to Subscriptions 2.2.9 contains a script that repairs the existing subscriptions that were created between versions <code>2.2.0</code> and <code>2.2.8</code> by adding that meta data. This log records the subscriptions that were repaired, those that needed no repair, and errors that occurred during that process.</p>
<p>Example log entry:</p>
<figure id="attachment_1267787" class="wp-caption aligncenter" aria-describedby="caption-attachment-1267787"><a href="https://help.codibu.com/wp-content/uploads/2020/11/12_logs_syncd_vars.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10663" src="https://help.codibu.com/wp-content/uploads/2020/11/12_logs_syncd_vars.png" alt="" width="2048" height="794" /></a><br /><figcaption id="caption-attachment-1267787" class="wp-caption-text">Repair Contains Synced Variation Subscriptions Log Example</figcaption></figure>
<h3 id="section-15">Repair End of Pre-Paid Term Subscriptions Logs</h3>
<p>This log is labeled <code>wcs-upgrade-end-of-prepaid-term-repair</code>. In Subscriptions 2.2.0, there was a condition which caused cancelled subscriptions to not schedule the action that would transition these subscriptions to cancelled status. The upgrade to Subscriptions 2.2.7 contains a script that repairs this and schedules the end of prepaid term actions. This log records the subscriptions that were repaired by immediate cancellation or adding an end of prepaid term action, those that needed no repair, and errors that occurred during that process.</p>
<p>Example log entry:</p>
<figure id="attachment_1267791" class="wp-caption aligncenter" aria-describedby="caption-attachment-1267791"><a href="https://help.codibu.com/wp-content/uploads/2020/11/13_logs_end_prepaid.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10664" src="https://help.codibu.com/wp-content/uploads/2020/11/13_logs_end_prepaid.png" alt="" width="2048" height="185" /></a><br /><figcaption id="caption-attachment-1267791" class="wp-caption-text">Repair End of Pre-Paid Term Subscriptions Log Example</figcaption></figure><p>The post <a href="https://help.codibu.com/blog/subscriptions-logs/">Subscriptions Logs</a> first appeared on <a href="https://help.codibu.com">CODIBU</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://help.codibu.com/blog/subscriptions-logs/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Opening a Subscriptions Support Ticket</title>
		<link>https://help.codibu.com/blog/opening-a-subscriptions-support-ticket/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=opening-a-subscriptions-support-ticket</link>
					<comments>https://help.codibu.com/blog/opening-a-subscriptions-support-ticket/#respond</comments>
		
		<dc:creator><![CDATA[JN C]]></dc:creator>
		<pubDate>Sun, 08 Nov 2020 15:29:29 +0000</pubDate>
				<guid isPermaLink="false">https://help.codibu.com/kb/opening-a-subscriptions-support-ticket/</guid>

					<description><![CDATA[<p>After looking through the documentation and searching online, opening a support ticket is the best way to get help for Subscriptions issues with your site. This guide will<span class="excerpt-hellip"> […]</span></p>
<p>The post <a href="https://help.codibu.com/blog/opening-a-subscriptions-support-ticket/">Opening a Subscriptions Support Ticket</a> first appeared on <a href="https://help.codibu.com">CODIBU</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>After looking through the documentation and searching online, opening a support ticket is the best way to get help for Subscriptions issues with your site.</p>
<p>This guide will outline how to fill out the support ticket form for getting help with this WooCommerce extension so that the support team can provide the most meaningful and quickest service. It will step through using an example ticket for WooCommerce Subscriptions as if a PayPal IPN error occurred on a site. This general advice can be transferred to other errors and tickets.</p>
<h2 id="section-1">Components of a WooCommerce Subscriptions Ticket</h2>
<p>The support form has a number of fields, each with the purpose to obtain information that will provide the best context to the support team. This context will help them investigate and solve the problem. Below is a fully filled-out ticket and a breakdown of each section.</p>
<figure id="attachment_1244546" class="wp-caption aligncenter" aria-describedby="caption-attachment-1244546"><a href="https://help.codibu.com/wp-content/uploads/2020/11/support_form_full.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10754" src="https://help.codibu.com/wp-content/uploads/2020/11/support_form_full.png" alt="" width="1536" height="1380" /></a><br /><figcaption id="caption-attachment-1244546" class="wp-caption-text">Support Form – Fully Filled in Ticket</figcaption></figure>
<h3 id="section-2">Extension Field – Choose Subscriptions</h3>
<p>The first field is a drop-down from which to select the extension that seems to be causing the issue.</p>
<figure id="attachment_1244547" class="wp-caption aligncenter" aria-describedby="caption-attachment-1244547"><a href="https://help.codibu.com/wp-content/uploads/2020/11/support_form_plugin_field.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10755" src="https://help.codibu.com/wp-content/uploads/2020/11/support_form_plugin_field.png" alt="" width="1464" height="210" /></a><br /><figcaption id="caption-attachment-1244547" class="wp-caption-text">Extension Field Drop-down</figcaption></figure>
<p>In some cases, it may be difficult to pinpoint which extension is causing the problem. The symptoms of the issue should be a good start. For example, if a subscription did not renew when it was supposed to, it might have to do with WooCommerce Subscriptions.</p>
<p>Sometimes, there may seem to be an issue with one plugin when it is actually the problem or conflict of another. Don’t worry if it is difficult to pinpoint the cause, the support team will investigate and do their best to help solve the issue even if that means forwarding the ticket to the right extension developer.</p>
<p>A few questions to ask yourself about the originating plugin:</p>
<ol>
<li>What plugin is the affected functionality from?</li>
<li>If there is an error, what plugin was mentioned in the error, if any?</li>
<li>Does deactivating the plugin resolve the issue?</li>
</ol>
<h3 id="section-3">Ticket Subject Line</h3>
<figure id="attachment_1244553" class="wp-caption aligncenter" aria-describedby="caption-attachment-1244553"><a href="https://help.codibu.com/wp-content/uploads/2020/11/support_form_subject.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10756" src="https://help.codibu.com/wp-content/uploads/2020/11/support_form_subject.png" alt="" width="1464" height="128" /></a><br /><figcaption id="caption-attachment-1244553" class="wp-caption-text">Subject Line</figcaption></figure>
<p>The subject line is a great place to provide a concise summary or main issue or purpose of the ticket.</p>
<p>A few questions to ask yourself about filling in this line:</p>
<ol>
<li>What is the most salient problem?</li>
<li>How can the issue be summed up?</li>
<li>What is the main symptom?</li>
</ol>
<h3 id="section-4">Ticket Body</h3>
<figure id="attachment_1645094" class="wp-caption aligncenter" aria-describedby="caption-attachment-1645094"><a href="https://help.codibu.com/wp-content/uploads/2020/11/ticket_body.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10762" src="https://help.codibu.com/wp-content/uploads/2020/11/ticket_body.png" alt="" width="1930" height="630" /></a><br /><figcaption id="caption-attachment-1645094" class="wp-caption-text">Ticket Body Example</figcaption></figure>
<p>In this section, describe the full extent of the issue. The following information can all be helpful:</p>
<ul>
<li>background of the issue</li>
<li>steps to reproduce</li>
<li>copy/paste of any error message</li>
<li>the ID numbers of specifically affected products, orders, or subscriptions, and</li>
<li>screenshots of the issue. A service like CloudUp will make this easy to share.</li>
</ul>
<p>While this section does not need to be long, a few key details can provide a lot of context for investigation.</p>
<p>This is also the place to provide details about <a href="https://help.codibu.com/blog/kb/opening-a-subscriptions-support-ticket/#section-7"><strong>login information for an admin account</strong></a>.</p>
<p>A few questions to ask yourself when filling in this section:</p>
<ul>
<li>What sequence of events happened to bring about this issue?</li>
<li>What is the end result and which specific parts of the site are affected?</li>
<li>Are there any error notices appearing?</li>
<li>Did I create and include an admin login?</li>
<li>If I was reading this message and had no background or context for it, would I understand the issue and be able to investigate it?</li>
</ul>
<h3 id="section-5">Your Store’s URL</h3>
<figure id="attachment_1244563" class="wp-caption aligncenter" aria-describedby="caption-attachment-1244563"><a href="https://help.codibu.com/wp-content/uploads/2020/11/support_form_website_url.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10758" src="https://help.codibu.com/wp-content/uploads/2020/11/support_form_website_url.png" alt="" width="1450" height="120" /></a><br /><figcaption id="caption-attachment-1244563" class="wp-caption-text">Website URL Field</figcaption></figure>
<p>In this section, list the URL of the affected site. This is a straightforward field, but make sure to include it so support knows where to look.</p>
<h3 id="section-6">Store’s Status Report</h3>
<p>When dealing with WooCommerce and Subscriptions, this section is quite important to include. The <a href="https://help.codibu.com/blog/kb/understanding-the-woocommerce-system-status-report/">system status report</a> includes information about the site, including WooCommerce version, a list of plugins and their versions, whether the site is in staging mode, and many other useful pieces of information. This type of information helps the support team to better understand the context of the issue.</p>
<figure id="attachment_1244564" class="wp-caption aligncenter" aria-describedby="caption-attachment-1244564"><a href="https://help.codibu.com/wp-content/uploads/2020/11/support_form_system_status.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10757" src="https://help.codibu.com/wp-content/uploads/2020/11/support_form_system_status.png" alt="" width="1466" height="352" /></a><br /><figcaption id="caption-attachment-1244564" class="wp-caption-text">Website Status Report Field</figcaption></figure>
<p>In order to include the system status report:</p>
<ol>
<li>In the WordPress Dashboard, go to <b>WooCommerce &gt; Status</b></li>
<li>In the info box at the top of the page, press the <b>Get system report</b> button</li>
<li>Then press <b>Get for support</b> button</li>
<li>Paste into the <b>Website Status Report</b> field on the support ticket form</li>
</ol>
<h2 id="section-7">Temporary Admin Access</h2>
<p>Creating and including an admin account is an important step to take for tickets that are not simply questions.</p>
<p>WordPress installs are not connected in a centralized system. This means that unless we have access to your site, there is no way for support to view the back end (dashboard, etc.) of the site. An administrator account allows us access to what the store manager sees as well as error logs and much more information that will be important for investigation.</p>
<p><strong>This can be a temporary user account, which can be deleted once the issue is resolved.</strong></p>
<p>Please reference the <a href="https://help.codibu.com/blog/kb/create-a-new-administrator-account-in-wordpress/">detailed guide</a> on the best way to create an admin user for us.</p>
<h2 id="section-8">After Submitting a Ticket</h2>
<p>If you don’t see a response from us, please make sure to check spam or junk folders in case the response was filtered.</p><p>The post <a href="https://help.codibu.com/blog/opening-a-subscriptions-support-ticket/">Opening a Subscriptions Support Ticket</a> first appeared on <a href="https://help.codibu.com">CODIBU</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://help.codibu.com/blog/opening-a-subscriptions-support-ticket/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>2020 New Visa Requirements for Subscriptions with a Free Trial</title>
		<link>https://help.codibu.com/blog/2020-new-visa-requirements-for-subscriptions-with-a-free-trial/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=2020-new-visa-requirements-for-subscriptions-with-a-free-trial</link>
					<comments>https://help.codibu.com/blog/2020-new-visa-requirements-for-subscriptions-with-a-free-trial/#respond</comments>
		
		<dc:creator><![CDATA[JN C]]></dc:creator>
		<pubDate>Sun, 08 Nov 2020 15:26:55 +0000</pubDate>
				<guid isPermaLink="false">https://help.codibu.com/kb/2020-new-visa-requirements-for-subscriptions-with-a-free-trial/</guid>

					<description><![CDATA[<p>Visa is updating their conditions which govern the use of free-trials and introductory offers as part of an ongoing subscription service. We’ve put together this guide<span class="excerpt-hellip"> […]</span></p>
<p>The post <a href="https://help.codibu.com/blog/2020-new-visa-requirements-for-subscriptions-with-a-free-trial/">2020 New Visa Requirements for Subscriptions with a Free Trial</a> first appeared on <a href="https://help.codibu.com">CODIBU</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Visa is updating their conditions which govern the use of free-trials and introductory offers as part of an ongoing subscription service. We’ve put together this guide to step through what changes you need to make to comply.</p>
<h2 id="do-these-changes-apply-to-me">Do these changes apply to me? </h2>
<p>The new requirements from Visa apply to your business if you offer subscription products with a free trial and collect credit card information at the time of signup.</p>
<p>These new requirements do not apply to transactions involving:</p>
<ul>
<li>Subscription products without a free trial.</li>
<li>Where the first payment on a subscription product is discounted by the use of a coupon instead of a free trial.</li>
<li>No credit card information at the time of sign-up.</li>
</ul>
<h2 id="section-2">What changes do I, as a merchant, need to make?</h2>
<p>The changes are designed to make sure customers are given clear details of the subscription’s billing terms, can more clearly identify free trial transactions and to ensure they can take action on the subscription.</p>
<p>Many of the requirements are already met by WooCommerce Subscriptions. However, there are a couple of changes you will need to make if you offer subscriptions with free trials and collect billing information from the customer at the start of the trial.</p>
<h3 id="section-3">Sign up for free trial without payment details</h3>
<p>In WooCommerce Subscriptions 2.5, a new feature was introduced that allows customers who sign up to free trial subscriptions to do so without a credit card. If your store has this enabled, you will meet the requirements of this rule change since no payment details are taken during sign up. </p>
<p>To enable this feature:</p>
<ol>
<li>Go to the <strong>WooCommerce &gt; Settings &gt; Subscriptions</strong> screen.</li>
<li>Scroll down to the <strong>Miscellaneous</strong> section.</li>
<li>Check the option to <strong>Allow $0 initial checkout without a payment method</strong>.</li>
<li>Save.</li>
</ol>
<p>Learn more about this feature in our <a href="https://help.codibu.com/blog/kb/whats-new-in-subscriptions-2-5/#section-2">WooCommerce Subscriptions 2.5 guide</a>.</p>
<h3 id="section-4">Express Consent</h3>
<blockquote class="wp-block-quote">
<p>At the time of enrollment, merchants must require the cardholder to expressly consent to entering an ongoing subscription service for recurring payment. </p>
<p><cite>Visa</cite></p></blockquote>
<p>To meet this requirement you will need to collect expressed consent from the customer before taking payment, consent that they are entering an on-going subscription service with a recurring payment component. In obtaining this consent you will need to provide the following details to the customer:</p>
<ul>
<li>Details of the goods and services provided.</li>
<li>The start and end date of the subscription.</li>
<li>The length and price of the free or promotional trial period.</li>
<li>The cost of the subscription after the trial period ends.</li>
<li>The number of reminders that will be sent prior to billing (note that a trial-ending reminder email is required at least 7 days before the end of a trial period).</li>
<li>The cancellation policy, including the steps a customer must follow to cancel a subscription. </li>
<li>The date on which the customer can expect to be billed, for example, if it will be the same date of each month.</li>
</ul>
<h3 id="section-5">Already Included in WooCommerce Subscriptions Checkout</h3>
<p>During the normal checkout process with WooCommerce Subscriptions, the following are included in the order review section on your store’s checkout page:</p>
<ul>
<li>Details of the goods</li>
<li>The start and end dates of the subscription</li>
<li>The length and price of the free trial period</li>
<li>The cost of the subscription after the trial period</li>
<li>The date on which the customer can expect to be billed</li>
</ul>
<h3 id="section-6">What You Will Need to Add</h3>
<p>If you are offering subscriptions with a free trial, the two requirements that are not already handled by Subscriptions are:</p>
<ul>
<li>The cancellation policy, including the steps a customer must follow to cancel a subscription.</li>
<li>Reminders sent prior to billing (note that a trial-ending reminder email is required at least 7 days before the end of a trial period).</li>
</ul>
<h4 id="cancellation-policy">Cancellation Policy</h4>
<p>To meet this requirement you will need to include the following in the checkout process so that customers can provide consent:</p>
<ul>
<li>Your cancellation policy</li>
<li>Details about the number of reminders that the customer can expect prior to the recurring billing component starting</li>
<li>The steps a customer must take to cancel a subscription in your terms and conditions</li>
</ul>
<p>This can be done by editing your <a href="https://help.codibu.com/blog/kb/configuring-woocommerce-settings/#section-24">Terms &amp; Conditions</a> page, which is included in WooCommerce.</p>
<p>Any subscription that begins with a free trial period must have a mechanism to cancel it before the recurring billing period begins. By default, WooCommerce Subscriptions allows customers to cancel their subscriptions at any time from their My Account page. If you have removed this option, it will need to be reinstated to comply with this condition.</p>
<h4 id="reminders-prior-to-billing">Reminders Prior to Billing</h4>
<p>To meet this requirement, you must send a notification to customers 7 days prior to the trial end and the payment taking place.</p>
<p>There are a <a href="https://help.codibu.com/blog/kb/subscriptions-faq/#section-53">variety of solutions to notify subscribers</a> before a renewal takes place. One way is to use <a href="https://help.codibu.com/blog/kb/automatewoo">AutomateWoo</a>, which integrates with WooCommerce Subscriptions. Check out more about using AutomateWoo with Subscriptions for info on the integration.</p>
<h3 id="section-7">Enhanced Statement Descriptors</h3>
<blockquote class="wp-block-quote">
<p>Note: Due to COVID-19, Visa have delayed this requirement until April 17, 2021. </p>
<p><cite>Visa</cite></p></blockquote>
<p>To assist customers with identifying free trial transactions, the first transaction description, after the free trial period, will need to include ‘trial end’ or ‘trial over’. </p>
<p>This is the description which appears on the customer’s bank statement, and in mobile banking apps.</p>
<p>This will be handled by your payment gateway extensions. Please be sure to look out for updates to your payment gateway extensions, to comply with this new requirement. </p>
<p>If you are unsure whether your payment gateway plugins meet this requirement, please reach out to them through their support channels. </p>
<h2 id="additional-requirements-for-stores-operating-in-the-eu">Additional Requirements for Stores Operating in the EU </h2>
<p>If you sell to customers located in the EU, you will also need to:</p>
<ul>
<li>Provide the customer with confirmation of the establishment of the recurring payment agreement, within 2 days of purchase. To meet this requirement, the WooCommerce order processing email sent immediately after the order is paid has been updated to include a note about automatic recurring payments.</li>
<li>At least 7 days before each recurring transaction, send an email or SMS notification to the customer to remind them about the key features of the recurring payment agreement if:
<ul>
<li>A trial period is ending.</li>
<li>More than 6 months have elapsed since the previous recurring payment.</li>
<li>The recurring payment agreement has been changed, including the amount of the recurring payment, the date of the recurring payment, or any other terms of the agreement. To meet this requirement, we recommend AutomateWoo as it can process bulk subscription billing updates and has support for notifying customers of those changes. See AutomateWoo’s guide to learn more.</li>
</ul>
</li>
</ul>
<p>To meet the requirements of more advanced pre-renewal notifications we recommend using one of the plugins and services listed in our <a href="https://help.codibu.com/blog/kb/subscriptions-faq/#section-53">pre-renewal email guide</a>.</p><p>The post <a href="https://help.codibu.com/blog/2020-new-visa-requirements-for-subscriptions-with-a-free-trial/">2020 New Visa Requirements for Subscriptions with a Free Trial</a> first appeared on <a href="https://help.codibu.com">CODIBU</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://help.codibu.com/blog/2020-new-visa-requirements-for-subscriptions-with-a-free-trial/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Subscriptions Guided Tour</title>
		<link>https://help.codibu.com/blog/subscriptions-guided-tour/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=subscriptions-guided-tour</link>
					<comments>https://help.codibu.com/blog/subscriptions-guided-tour/#respond</comments>
		
		<dc:creator><![CDATA[JN C]]></dc:creator>
		<pubDate>Sun, 08 Nov 2020 15:24:33 +0000</pubDate>
				<guid isPermaLink="false">https://help.codibu.com/kb/subscriptions-guided-tour/</guid>

					<description><![CDATA[<p>We start with explaining the power of Subscriptions and run all the way through choosing a payment method, settings, creating products, viewing reports, and all of<span class="excerpt-hellip"> […]</span></p>
<p>The post <a href="https://help.codibu.com/blog/subscriptions-guided-tour/">Subscriptions Guided Tour</a> first appeared on <a href="https://help.codibu.com">CODIBU</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>We start with explaining the power of Subscriptions and run all the way through choosing a payment method, settings, creating products, viewing reports, and all of the ways to manage your customers subscriptions. Click on any of the titles to watch what you want from our Subscriptions Guided Tour. Enjoy!</p>
<table style="width: 32.3137%; height: 235px;">
<tbody>
<tr style="height: 74px;">
<th style="height: 74px;">
<h2 id="section-1">SETUP &amp; CREATION</h2>
</th>
</tr>
<tr style="height: 23px;">
<td style="height: 23px;"><a href="https://help.codibu.com/blog/kb/subscriptions-guided-tour/">A Subscriptions Primer</a></td>
</tr>
<tr style="height: 23px;">
<td style="height: 23px;"><a href="https://help.codibu.com/blog/kb/subscriptions-guided-tour//#wistia_wz4apdv0ch">Choosing a Subscriptions Payment Gateway</a></td>
</tr>
<tr style="height: 23px;">
<td style="height: 23px;">Subscriptions Settings</td>
</tr>
<tr style="height: 23px;">
<td style="height: 23px;"><a href="https://help.codibu.com/blog/kb/subscriptions-guided-tour/#wistia_b6514xmal0">Creating a Simple Subscription Product</a></td>
</tr>
<tr style="height: 23px;">
<td style="height: 23px;"><a href="https://help.codibu.com/blog/kb/subscriptions-guided-tour/#wistia_yiww9wlyjy">Creating a Variable Subscription Product</a></td>
</tr>
<tr style="height: 23px;">
<td style="height: 23px;"><a href="https://help.codibu.com/blog/kb/subscriptions-guided-tour//#wistia_xvwvd8v1s8">Subscription Coupons</a></td>
</tr>
<tr style="height: 23px;">
<td style="height: 23px;">Subscription Reports</td>
</tr>
</tbody>
</table>
<table style="width: 41.0622%; height: 281px;">
<tbody>
<tr style="height: 74px;">
<th style="height: 74px;">
<h2 id="section-2">SUBSCRIPTION MANAGEMENT</h2>
</th>
</tr>
<tr style="height: 23px;">
<td style="height: 23px;"><a href="https://help.codibu.com/blog/kb/subscriptions-guided-tour/#wistia_q5a8bq2mz0">Manually Adding a Subscription</a></td>
</tr>
<tr style="height: 23px;">
<td style="height: 23px;">Modifying a Subscription</td>
</tr>
<tr style="height: 23px;">
<td style="height: 23px;">Switching Subscriptions</td>
</tr>
<tr style="height: 23px;">
<td style="height: 23px;">Synchronizing Subsciptrions</td>
</tr>
<tr style="height: 23px;">
<td style="height: 23px;">Handling Failed Payments</td>
</tr>
<tr style="height: 23px;">
<td style="height: 23px;"><a href="https://help.codibu.com/blog/kb/subscriptions-guided-tour/#wistia_ggrhhnw91u">Changing Address</a></td>
</tr>
<tr style="height: 23px;">
<td style="height: 23px;">Changing Payment Method</td>
</tr>
<tr style="height: 23px;">
<td style="height: 23px;">Canceling a Subscription</td>
</tr>
<tr style="height: 23px;">
<td style="height: 23px;">Resubscribe Process</td>
</tr>
</tbody>
</table><p>The post <a href="https://help.codibu.com/blog/subscriptions-guided-tour/">Subscriptions Guided Tour</a> first appeared on <a href="https://help.codibu.com">CODIBU</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://help.codibu.com/blog/subscriptions-guided-tour/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>How Does Subscriptions Handle Staging Sites and Migrations?</title>
		<link>https://help.codibu.com/blog/how-does-subscriptions-handle-staging-sites-and-migrations/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-does-subscriptions-handle-staging-sites-and-migrations</link>
					<comments>https://help.codibu.com/blog/how-does-subscriptions-handle-staging-sites-and-migrations/#respond</comments>
		
		<dc:creator><![CDATA[JN C]]></dc:creator>
		<pubDate>Sun, 08 Nov 2020 15:16:15 +0000</pubDate>
				<guid isPermaLink="false">https://help.codibu.com/kb/how-does-subscriptions-handle-staging-sites-and-migrations/</guid>

					<description><![CDATA[<p>WooCommerce Subscriptions can handle staging sites and migrations. Some hosts, like SiteGround, provide an easy way to create a clone of your website for testing changes.<span class="excerpt-hellip"> […]</span></p>
<p>The post <a href="https://help.codibu.com/blog/how-does-subscriptions-handle-staging-sites-and-migrations/">How Does Subscriptions Handle Staging Sites and Migrations?</a> first appeared on <a href="https://help.codibu.com">CODIBU</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>WooCommerce Subscriptions can handle staging sites and migrations. Some hosts, like <b>SiteGround</b>, provide an easy way to create a clone of your website for testing changes. This is called a <b>staging site</b>.</p>
<p>To prevent duplicate payments from a clone of your site, <b>Subscriptions will disable automatic payments and subscription-related emails whenever the current site’s URL differs to the URL of the site where Subscriptions was first activated</b>.</p>
<h2 id="section-1">Duplicate Site Warning</h2>
<p>You will know when the site is in staging mode because Subscriptions will display a warning in the administration area of your site. This notice also shows which URL Subscriptions considers to be the live site.</p>
<figure id="attachment_1360303" class="wp-caption aligncenter" aria-describedby="caption-attachment-1360303"><a href="https://help.codibu.com/wp-content/uploads/2020/11/staging_site_notice.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10739" src="https://help.codibu.com/wp-content/uploads/2020/11/staging_site_notice.png" alt="" width="2048" height="152" /></a><br /><figcaption id="caption-attachment-1360303" class="wp-caption-text">Staging Site Notice</figcaption></figure>
<p>Subscriptions will also display a smaller warning next to the <strong>WooCommerce &gt; Subscriptions</strong> menu item when a store is operating in Staging Mode.</p>
<p><a href="https://help.codibu.com/wp-content/uploads/2020/11/subscriptions-duplicate-site-menu-item-badge.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10744" src="https://help.codibu.com/wp-content/uploads/2020/11/subscriptions-duplicate-site-menu-item-badge.png" alt="" width="420" height="507" /></a></p>
<p>You can still test subscription renewals on a test site, but Subscriptions will use the <a href="https://help.codibu.com/blog/kb/subscriptions-store-manager-guide/"><b>manual renewal process</b></a> and will not send any <a href="https://help.codibu.com/blog/kb/subscriptions-store-manager-guide/#section-18"><b>subscription-related emails</b></a>.</p>
<p>It is possible to <a href="https://help.codibu.com/blog/kb/how-does-subscriptions-handle-staging-sites-and-migrations/#section-4">enable automatic payments</a> and to <a href="https://help.codibu.com/blog/kb/how-does-subscriptions-handle-staging-sites-and-migrations/#section-8">send subscription-relation emails</a> on a staging site.</p>
<p id="stop-emails"><strong>Please note:</strong> it is only <a href="https://help.codibu.com/blog/kb/subscriptions-store-manager-guide/#section-19">emails sent by Subscriptions</a> that will be blocked by Subscriptions in staging mode, <strong>any emails sent or managed by WordPress, WooCommerce or another plugin may still be sent from your staging site.</strong> To block all emails from your site, install a plugin like Disable Emails.</p>
<h2 id="section-2">What does Subscriptions consider a Staging Site?</h2>
<p>Subscriptions will keep a record of the URL of the site where it is first activated. It considers this to be the <em>live site</em> and will run in live mode. If the site’s URL then changes, it considers the new site to be a <em>staging site</em> and it will run in staging mode.</p>
<p>This means if you first activate Subscriptions on a staging site, <strong>Subscriptions will run in live mode on the staging site because it considers this site to actually be your live site</strong>.</p>
<p>Because of this, if you want to test Subscriptions on a staging site before running it on your life site, we recommend <strong>first activating it on the live site and then creating the staging site from that site’s database</strong>.</p>
<p><strong>Developer Note:</strong> Subscriptions stores a clone of WordPress’ <code>siteurl</code> value in an option with the name <code>wc_subscriptions_siteurl</code>. It compares this value with the <code>siteurl</code> value to see if it has changed.</p>
<h2 id="section-3">Check if Staging Mode is Active</h2>
<p>If you are unsure whether you or another administrator on the site has dismissed the notice and want to check if the store is running in Staging mode, you can:</p>
<ol>
<li>Go To <strong>WooCommerce</strong></li>
<li>Check the Subscriptions menu item. If a red area is shown with the word <strong>Staging</strong>, the site is in <strong>Staging Mode</strong>. If nothing is displayed except “Subscriptions”, the site is in <strong>Live Mode</strong>.</li>
</ol>
<p><a href="https://help.codibu.com/wp-content/uploads/2020/11/subscriptions-duplicate-site-menu-item-badge.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10744" src="https://help.codibu.com/wp-content/uploads/2020/11/subscriptions-duplicate-site-menu-item-badge.png" alt="" width="420" height="507" /></a></p>
<p>Whether the store is running in Staging or Live mode is also displayed on the Status screen. To check it there, you can:</p>
<ol>
<li>Go To <strong>WooCommerce &gt; Status</strong></li>
<li>Scroll down to <strong>Subscriptions Mode</strong></li>
<li>Check the value. If a red cross is shown with the word <strong>Staging</strong>, the site is in <strong>Staging Mode</strong>. If a tick mark is shown with the word <strong>Live</strong>, the site is in <strong>Live Mode</strong>.</li>
</ol>
<p><a href="https://help.codibu.com/wp-content/uploads/2020/11/system-status-entry-for-a-site-in-staging-mode.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10761" src="https://help.codibu.com/wp-content/uploads/2020/11/system-status-entry-for-a-site-in-staging-mode.png" alt="" width="653" height="529" /></a></p>
<p>Below this section will be a row labeled <strong>Subscriptions Live URL</strong>. This shows the URL that Subscriptions considers to be the live site.</p>
<figure id="attachment_1360327" class="wp-caption aligncenter" aria-describedby="caption-attachment-1360327"><a href="https://help.codibu.com/wp-content/uploads/2020/11/staging_site_status_url.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10740" src="https://help.codibu.com/wp-content/uploads/2020/11/staging_site_status_url.png" alt="" width="2048" height="586" /></a><figcaption id="caption-attachment-1360327" class="wp-caption-text">Subscriptions Live Site URL</figcaption></figure>
<h2 id="section-4">Enabling Automatic Payments on a Staging Site</h2>
<p>To switch your site from <em>Staging Mode</em> to <em>Live Mode</em>:</p>
<ol>
<li>Go to any administrator page on your site, e.g. visit <code>example.com/wp-admin/</code></li>
<li>Click the <strong>Enable Automatic Payments</strong> button displayed in the staging site notice.</li>
</ol>
<p>If you chose the <strong>Quit Nagging Me</strong> option, but then later find you want to <em>enable automatic payments</em> on the staging site, you can:</p>
<ol>
<li>Go to <code>example.com/wp-admin/?wcs_display_staging_notice=true</code> while logged in as an administrator, replacing <code>example.com</code> with your site’s URL</li>
</ol>
<p>Alternatively, you can:</p>
<ol>
<li>Access your database via PhpMyAdmin if your host provides it (or install a plugin like WP phpMyAdmin if your host does not provide phpMyAdmin access)</li>
<li>Search the <code>wp_options</code> table for an option with the <code>option_name</code> of <code>'wcs_ignore_duplicate_siteurl_notice'</code></li>
<li>Change the option value of the <code>'wcs_ignore_duplicate_siteurl_notice'</code> option to anything other than its current value, <strong>“false”</strong> would be a good choice.</li>
<li>Save the changes to the option value</li>
</ol>
<p>The staging site notice should reappear and you can choose to <em>Enable automatic payments</em>.</p>
<h2 id="section-5">Database Migration</h2>
<p>When migrating your site’s database from one server to another server, there are additional considerations.</p>
<p>If you have migrated your site’s database and the <em>domain name has not changed</em>, the staging mode will not be triggered on the new site. This means renewal payments will be processed in live mode. If you want to make sure payments are not processed, even temporarily, you need to:</p>
<ul>
<li>Change the site URL for it, this will switch that site into staging mode; or</li>
<li><a href="https://help.codibu.com/blog/kb/how-does-subscriptions-handle-staging-sites-and-migrations/#section-7">Disable Action Scheduler’s default queue runner</a> to ensure Subscriptions doesn’t trigger renewal events.</li>
</ul>
<h3 id="section-6">Decommission the old site</h3>
<p>To avoid any issues with duplicate payments or emails, you should decommission the old site as soon as possible.</p>
<p>However, if you need to continue to allow the old site to run after migrating the database to a different server, you must also:</p>
<ul>
<li>Change the site URL for it, this will switch that site into staging mode. In some cases, <code>wc_subscriptions_siteurl</code> value might need to be updated as well, the option can be found under <code>https://YOUR-DOMAIN.com/wp-admin/options.php</code> (replace YOUR-DOMAIN.com with your own domain URL); or</li>
<li><a href="https://help.codibu.com/blog/kb/how-does-subscriptions-handle-staging-sites-and-migrations/#section-7">Disable Action Scheduler’s default queue runner</a> to ensure Subscriptions doesn’t trigger renewal events.</li>
</ul>
<p>Without completing one of these steps, your old site will continue to process real recurring payments.</p>
<p>We also suggest you <strong>block all emails from your duplicate site</strong> to prevent customers receiving any emails from this old site. To do this, you can use a plugin like Disable Emails (this plugin is not officially endorsed by WooCommerce.com).</p>
<h2 id="section-7">Disabling All Scheduled Events</h2>
<p>By default, <a href="https://help.codibu.com/blog/kb/subscription-renewal-process/">scheduled renewals</a> and other scheduled events, like expiration, will still be triggered when Subscriptions is in staging mode. No payments will be attempted, or emails sent, for these events, but the event will still be initiated as it would be on the live site.</p>
<p>If you wish to stop these events being triggered, install and activate the free <strong>Action Scheduler – Disable Default Runner</strong> plugin.</p>
<p>This plugin disables all events in the scheduling library WooCommerce Subscriptions uses. This library is also used by other extensions, like <a href="https://help.codibu.com/blog/kb/woocommerce-memberships-2/">WooCommerce Memberships</a>, so will also disable any scheduled events for those plugins.</p>
<div class="woo-sc-box note   ">The <strong>Action Scheduler – Disable Default Runner</strong> plugin does not rely on the <a href="https://help.codibu.com/blog/kb/how-does-subscriptions-handle-staging-sites-and-migrations/#section-2">site URL check</a>. Once active, it will block scheduled events. As a result, it can also be used on a live site to temporarily disable renewals payments and other scheduled events.</div>
<h2 id="section-8">Enabling Subscriptions Emails on a Staging Site</h2>
<p>If you would like to enable subscription-related emails on a staging site, you can define the <code>WCS_FORCE_EMAIL</code> constant.</p>
<p>In order to enable this constant:</p>
<ol>
<li>Go to your site’s <code>wp-config.php</code> file</li>
<li>Above the line that says <code>/* That's all, stop editing! Happy blogging. */</code>, add:
<p>&nbsp;</p>
<pre>if ( ! defined( ‘WCS_FORCE_EMAIL’ ) {
      define( ‘WCS_FORCE_EMAIL’, true );
}</pre>
</li>
<li>Save file</li>
</ol>
<h2 id="section-9">FAQ</h2>
<h3 id="section-10">Why are renewal payments not processing on the live site?</h3>
<p>When a renewal is processed in Staging mode, the following note will be added to its order notes:</p>
<blockquote>
<p>Payment processing skipped – renewal order created on staging site under staging site lock. Live site is at https://example.com/</p>
</blockquote>
<p>On occasion, these notes may appear on renewal orders created on the live site. This means the live site is accessible via more than one URL. For example, the site may be accessible via both:</p>
<ul>
<li>https://www.example.com</li>
<li>https://example.com</li>
</ul>
<p>To process renewals correctly, <strong>Subscriptions requires your WordPress site to be accessible via only one URL</strong>.</p>
<p>To ensure your site is accessible via only one the URL, you can use <a href="https://help.codibu.com/blog/kb/editing-wp-config-php/">the WordPress Site URL constants</a> in your <code>wp-config.php</code> file to set the URL for the site. For example:</p>
<pre>define( 'WP_SITEURL', 'https://example.com' );
define( 'WP_HOME', 'https://example.com' );</pre>
<p>You should also make sure your web server software, like Apache, is configured to redirect any requests to other URLs to the canonical URL. WordPress has a guide on setting up <code>.htaccess</code> file correctly. If you need additional help, please contact your web host.</p>
<p>Serving your site under a single URL is good practice as it has other benefits, most notably for SEO. As Moz explains:</p>
<blockquote>
<p>Duplicate content is content that appears on the Internet in more than one place. That “one place” is defined as a location with a unique website address (URL)</p>
<p>While not technically a penalty, duplicate content can still sometimes impact search engine rankings. When there are multiple pieces of, as Google calls it, “appreciably similar” content in more than one location on the Internet, it can be difficult for search engines to decide which version is more relevant to a given search query.</p>
</blockquote>
<h3 id="section-11">Why are emails still being sent on my staging site?</h3>
<p>WooCommerce Subscriptions will only block <a href="https://help.codibu.com/blog/kb/subscriptions-store-manager-guide/#section-19">emails sent by it</a> when in staging mode. Emails sent or managed by WordPress, WooCommerce or another plugin may still be sent from your staging site.</p>
<p>To block all emails from your site, install a plugin like Disable Emails.</p><p>The post <a href="https://help.codibu.com/blog/how-does-subscriptions-handle-staging-sites-and-migrations/">How Does Subscriptions Handle Staging Sites and Migrations?</a> first appeared on <a href="https://help.codibu.com">CODIBU</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://help.codibu.com/blog/how-does-subscriptions-handle-staging-sites-and-migrations/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Subscriptions PayPal IPN Issues</title>
		<link>https://help.codibu.com/blog/subscriptions-paypal-ipn-issues/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=subscriptions-paypal-ipn-issues</link>
					<comments>https://help.codibu.com/blog/subscriptions-paypal-ipn-issues/#respond</comments>
		
		<dc:creator><![CDATA[JN C]]></dc:creator>
		<pubDate>Sun, 08 Nov 2020 15:15:18 +0000</pubDate>
				<guid isPermaLink="false">https://help.codibu.com/kb/subscriptions-paypal-ipn-issues/</guid>

					<description><![CDATA[<p>WooCommerce Subscriptions uses PayPal’s IPN (Instant Payment Notification) system to keep data in sync with PayPal. When PayPal processes a payment or other subscription event, like a cancellation,<span class="excerpt-hellip"> […]</span></p>
<p>The post <a href="https://help.codibu.com/blog/subscriptions-paypal-ipn-issues/">Subscriptions PayPal IPN Issues</a> first appeared on <a href="https://help.codibu.com">CODIBU</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>WooCommerce Subscriptions uses PayPal’s IPN (Instant Payment Notification) system to keep data in sync with PayPal.</p>
<p>When PayPal processes a payment or other subscription event, like a cancellation, it sends an IPN to the site. Subscriptions processes this IPN and performs the appropriate actions concerning the related orders and subscriptions.</p>
<p>For example, when a recurring payment is due, payment occurs via PayPal and an IPN is sent confirming that the payment was processed. The site receives this message, creates an order to record the transaction and sets the status of the corresponding order and subscription to reflect the processed payment.</p>
<p>On occasion, errors occur when processing an IPN. The reasons for the errors vary. A couple of the most common reasons include IPN’s for orders that don’t exist in the store and third-party plugin or custom code conflicts.</p>
<p>IPN issues also appear with varied symptoms, from a renewal order not getting generated even though PayPal charged a customer to multiple renewal orders being created when PayPal only charged once or PayPal and Subscriptions disagreeing on how much the customer was / should have been charged.</p>
<p>This guide explained how to find information used to debug issues with WooCommerce Subscriptions the PayPal Standard’s IPN system.</p>
<h2 id="section-1">IPN Processing Error Notice</h2>
<p>When an error occurs while processing an IPN, WooCommerce Subscriptions will display a notice such as the following at the top of your store’s WordPress administration dashboard.</p>
<div class="wp-block-image">
<figure class="aligncenter"><a href="https://help.codibu.com/wp-content/uploads/2020/11/subscription-paypal-ipn-error.png"><img loading="lazy" decoding="async" class="wp-image-1223239" src="https://help.codibu.com/wp-content/uploads/2020/11/subscription-paypal-ipn-error.png?w=950" sizes="(max-width: 1999px) 100vw, 1999px" srcset="https://help.codibu.com/wp-content/uploads/2020/11/subscription-paypal-ipn-error.png 1999w, https://help.codibu.com/wp-content/uploads/2020/11/subscription-paypal-ipn-error.png?resize=550,253 550w, https://help.codibu.com/wp-content/uploads/2020/11/subscription-paypal-ipn-error.png?resize=768,353 768w, https://help.codibu.com/wp-content/uploads/2020/11/subscription-paypal-ipn-error.png?resize=950,437 950w, https://help.codibu.com/wp-content/uploads/2020/11/subscription-paypal-ipn-error.png?resize=1536,706 1536w" alt="Subscriptions PayPal IPN Error screenshot" width="1999" height="919" /></a><figcaption>Subscriptions PayPal IPN Error</figcaption></figure>
</div>
<p>When this notice is displayed, it’s because the exact nature of the error cannot be automatically pinpointed. It will require further investigation by the support team to find the error and its causes. Additionally, to make sure it will not happen again, some form of intervention will likely be necessary to address the error.</p>
<p>When <a href="https://woocommerce.com/my-account/marketplace-ticket-form/">opening a ticket</a> to report this error, there are a few pieces of information that will help the support team provide a smoother experience.</p>
<p>Please make sure to include a copy of the <a href="https://help.codibu.com/blog/kb/understanding-the-woocommerce-system-status-report/#section-1">system status report</a>. The system status report provides a snapshot of the site’s code and data, such as WooCommerce version and which plugins are installed. This type of information helps the support team to better understand the context of the error.</p>
<p>Finally, if some of the information below can be included, that can help to diagnose the error.</p>
<h3 id="section-2">PayPal Subscription Details Page</h3>
<p>PayPal provides information about subscriptions via the Subscription Details Page.</p>
<p>This page will look something like the picture below – PayPal change their interface from time-to-time and display different interfaces for different countries and account types, your page may appear differently.</p>
<p>A screenshot of this screen for a problematic subscription on your site would be very helpful. You can match them up by the profile ID or the customer.</p>
<div class="wp-block-image">
<figure class="aligncenter"><a href="https://help.codibu.com/wp-content/uploads/2020/11/paypal-subscription-details-screenshot.png"><img loading="lazy" decoding="async" class="wp-image-166200" src="https://help.codibu.com/wp-content/uploads/2020/11/paypal-subscription-details-screenshot.png?w=950" sizes="(max-width: 995px) 100vw, 995px" srcset="https://help.codibu.com/wp-content/uploads/2020/11/paypal-subscription-details-screenshot.png 995w, https://help.codibu.com/wp-content/uploads/2020/11/paypal-subscription-details-screenshot.png?resize=550,438 550w, https://help.codibu.com/wp-content/uploads/2020/11/paypal-subscription-details-screenshot.png?resize=768,612 768w, https://help.codibu.com/wp-content/uploads/2020/11/paypal-subscription-details-screenshot.png?resize=950,757 950w" alt="PayPal Subscription Details Page Screenshot" width="995" height="793" /></a><figcaption>PayPal Subscription Details Page Screenshot</figcaption></figure>
</div>
<p>This page holds information about what PayPal knows about the subscription. If there are differences between these details and the ones WooCommerce and Subscriptions have then that’s a clue.</p>
<h3 id="section-3">PayPal Profile Status History page</h3>
<p>Found by clicking <strong>View History</strong> button on the subscription page (near the top, under Subscription details). It looks similar to this:</p>
<figure class="wp-block-image"><a href="https://help.codibu.com/wp-content/uploads/2020/11/paypalhistory.png" rel="prettyPhoto"><img loading="lazy" decoding="async" class="wp-image-160595" src="https://help.codibu.com/wp-content/uploads/2020/11/paypalhistory.png" sizes="(max-width: 792px) 100vw, 792px" srcset="https://help.codibu.com/wp-content/uploads/2020/11/paypalhistory.png 792w, https://help.codibu.com/wp-content/uploads/2020/11/paypalhistory.png?resize=550,251 550w, https://help.codibu.com/wp-content/uploads/2020/11/paypalhistory.png?resize=768,351 768w" alt="PayPal History" width="792" height="362" /></a></figure>
<p>When Subscriptions sends any data to PayPal, it will be recorded here. When it was created, when it was suspended or reactivated, when it was cancelled. If Subscriptions claims that it suspended the subscription, but PayPal did not register that change, that’s a clue.</p>
<h3 id="section-4">IPN History for Problematic Subscriptions</h3>
<p>PayPal keeps a record of IPN messages. These are also accessible via your PayPal account. These can be very valuable when diagnosing IPN errors. For example, if the was retried IPN, we’ll see that so we know the retries might cause multiple orders to be created, but something’s wrong because it had to retry.</p>
<p>To find the IPN history:</p>
<ul>
<li>Search by profile ID for the last payment transaction on this page (<strong>History &gt; Find a transaction</strong>):<a href="https://help.codibu.com/wp-content/uploads/2020/11/paypalfindtransaction.png" rel="prettyPhoto"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-160596" src="https://help.codibu.com/wp-content/uploads/2020/11/paypalfindtransaction.png" sizes="(max-width: 1024px) 100vw, 1024px" srcset="https://help.codibu.com/wp-content/uploads/2020/11/paypalfindtransaction.png 1026w, https://help.codibu.com/wp-content/uploads/2020/11/paypalfindtransaction.png?resize=550,380 550w, https://help.codibu.com/wp-content/uploads/2020/11/paypalfindtransaction.png?resize=768,531 768w, https://help.codibu.com/wp-content/uploads/2020/11/paypalfindtransaction.png?resize=950,656 950w" alt="paypalfindtransaction" width="1024" height="708" /></a></li>
<li>View the transaction details and get the ID from there: <a href="https://help.codibu.com/wp-content/uploads/2020/11/paypaltransactiondetails.png" rel="prettyPhoto"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-160597" src="https://help.codibu.com/wp-content/uploads/2020/11/paypaltransactiondetails.png" sizes="(max-width: 864px) 100vw, 864px" srcset="https://help.codibu.com/wp-content/uploads/2020/11/paypaltransactiondetails.png 864w, https://help.codibu.com/wp-content/uploads/2020/11/paypaltransactiondetails.png?resize=509,550 509w, https://help.codibu.com/wp-content/uploads/2020/11/paypaltransactiondetails.png?resize=768,830 768w" alt="paypaltransactiondetails" width="864" height="934" /></a></li>
<li>Put the ID into the IPN History screen to search: <a href="https://help.codibu.com/wp-content/uploads/2020/11/ipnhistory.png" rel="prettyPhoto"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-160598" src="https://help.codibu.com/wp-content/uploads/2020/11/ipnhistory.png" sizes="(max-width: 1024px) 100vw, 1024px" srcset="https://help.codibu.com/wp-content/uploads/2020/11/ipnhistory.png 1586w, https://help.codibu.com/wp-content/uploads/2020/11/ipnhistory.png?resize=550,422 550w, https://help.codibu.com/wp-content/uploads/2020/11/ipnhistory.png?resize=768,589 768w, https://help.codibu.com/wp-content/uploads/2020/11/ipnhistory.png?resize=950,728 950w, https://help.codibu.com/wp-content/uploads/2020/11/ipnhistory.png?resize=1536,1178 1536w" alt="ipnhistory" width="1024" height="785" /></a></li>
<li>Click on the message ID link, and grab that screenshot too:<a href="https://help.codibu.com/wp-content/uploads/2020/11/ipndetails.png" rel="prettyPhoto"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-160599" src="https://help.codibu.com/wp-content/uploads/2020/11/ipndetails.png" sizes="(max-width: 1024px) 100vw, 1024px" srcset="https://help.codibu.com/wp-content/uploads/2020/11/ipndetails.png 1610w, https://help.codibu.com/wp-content/uploads/2020/11/ipndetails.png?resize=550,448 550w, https://help.codibu.com/wp-content/uploads/2020/11/ipndetails.png?resize=768,625 768w, https://help.codibu.com/wp-content/uploads/2020/11/ipndetails.png?resize=950,773 950w, https://help.codibu.com/wp-content/uploads/2020/11/ipndetails.png?resize=1536,1250 1536w" alt="ipndetails" width="1024" height="833" /></a></li>
</ul>
<p>These are all information we’ll need alongside the usual WooCommerce ticket requirements: System Status Report, FTP details, and sometimes database access details.</p><p>The post <a href="https://help.codibu.com/blog/subscriptions-paypal-ipn-issues/">Subscriptions PayPal IPN Issues</a> first appeared on <a href="https://help.codibu.com">CODIBU</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://help.codibu.com/blog/subscriptions-paypal-ipn-issues/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Subscriptions 2.0 Deprecated Hooks &#038; Query Monitor Warning</title>
		<link>https://help.codibu.com/blog/subscriptions-2-0-deprecated-hooks-query-monitor-warning/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=subscriptions-2-0-deprecated-hooks-query-monitor-warning</link>
					<comments>https://help.codibu.com/blog/subscriptions-2-0-deprecated-hooks-query-monitor-warning/#respond</comments>
		
		<dc:creator><![CDATA[JN C]]></dc:creator>
		<pubDate>Sun, 08 Nov 2020 15:14:37 +0000</pubDate>
				<guid isPermaLink="false">https://help.codibu.com/kb/subscriptions-2-0-deprecated-hooks-query-monitor-warning/</guid>

					<description><![CDATA[<p>Subscriptions 2.0 changed the way data was stored and instantiated. Because of this, it needed to deprecate a large number of existing hooks. Some of these hooks had dynamic<span class="excerpt-hellip"> […]</span></p>
<p>The post <a href="https://help.codibu.com/blog/subscriptions-2-0-deprecated-hooks-query-monitor-warning/">Subscriptions 2.0 Deprecated Hooks & Query Monitor Warning</a> first appeared on <a href="https://help.codibu.com">CODIBU</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Subscriptions 2.0 changed the way data was stored and instantiated. Because of this, it needed to deprecate a large number of existing hooks.</p>
<p>Some of these hooks had dynamic names, i.e. actions/filters where we don’t know what the hook actually is at run-time because it includes a payment gateway ID or another piece of dynamic data we don’t know in advance. Because of this, there was no choice but to either break backwards compatibility completely for those hooks (which would be severe in the case of scheduled subscription payment hooks) or add a small function to the <code>'all'</code> hook to check if it’s a hook we have deprecated and maintain backwards compatibility.</p>
<p>The latter option was chosen as far better, but it may cause performance issues on some sites. We have, however, attempted to mitigate performance issues and also made sure there is a way to remove this code if your site is negatively affected and you know you have no deprecated code running on your site.</p>
<div class="woo-sc-box note   "><strong>Note:</strong> Deprecation handlers are no longer loaded by default with <a href="https://help.codibu.com/blog/kb/whats-new-in-subscriptions-2-1/#deprecated-hooks-are-no-longer-called">Subscriptions 2.1 and newer</a>. If you need to continue to call deprecated hooks, install WooCommerce Subscriptions Load Deprecation Handlers.</div>
<h2 id="section-1">Mitigating performance issues</h2>
<p>Functions attached to <code>'all'</code>, while running many times each request, are minor. They simply check the name of the hook to see if they start with 13 known hook prefixes.</p>
<p>This was done to mitigate any major performance impact on your site. However, depending on the number of plugins running on your site, you may find that running this tiny piece of logic on all hooks markedly reduces site performance. If this is the case, consider removing deprecated handling as outlined below.</p>
<h2 id="section-2">Removing deprecated hook handling</h2>
<p>If you know your site is not running outdated code, you can avoid having to load both this and other depreciation handling code to improve performance with Subscriptions 2.0.</p>
<p>The snippet below tells Subscriptions not to load deprecated handlers, including classes that attach to the <code>'all'</code> hook to handle dynamic hooks:</p>
<div id="gist26964114" class="gist">
<div class="gist-file">
<div class="gist-data">
<div class="js-gist-file-update-container js-task-list-container file-box">
<div id="file-wcs-remove-deprecated-handlers-php" class="file my-2">
<div class="Box-body p-0 blob-wrapper data type-php  ">
<table class="highlight tab-size js-file-line-container" data-tab-size="8" data-paste-markdown-skip="">
<tbody>
<tr>
<td id="file-wcs-remove-deprecated-handlers-php-L1" class="blob-num js-line-number" data-line-number="1"> </td>
<td id="file-wcs-remove-deprecated-handlers-php-LC1" class="blob-code blob-code-inner js-file-line"><span class="pl-ent">&lt;?php</span></td>
</tr>
<tr>
<td id="file-wcs-remove-deprecated-handlers-php-L2" class="blob-num js-line-number" data-line-number="2"> </td>
<td id="file-wcs-remove-deprecated-handlers-php-LC2" class="blob-code blob-code-inner js-file-line"><span class="pl-c">/**</span></td>
</tr>
<tr>
<td id="file-wcs-remove-deprecated-handlers-php-L3" class="blob-num js-line-number" data-line-number="3"> </td>
<td id="file-wcs-remove-deprecated-handlers-php-LC3" class="blob-code blob-code-inner js-file-line"><span class="pl-c"> * Plugin Name: WooCommerce Subscriptions Remove Deprecation Handlers</span></td>
</tr>
<tr>
<td id="file-wcs-remove-deprecated-handlers-php-L4" class="blob-num js-line-number" data-line-number="4"> </td>
<td id="file-wcs-remove-deprecated-handlers-php-LC4" class="blob-code blob-code-inner js-file-line"><span class="pl-c"> * Plugin URI: https://support.woothemes.com/hc/en-us/articles/205214466</span></td>
</tr>
<tr>
<td id="file-wcs-remove-deprecated-handlers-php-L5" class="blob-num js-line-number" data-line-number="5"> </td>
<td id="file-wcs-remove-deprecated-handlers-php-LC5" class="blob-code blob-code-inner js-file-line"><span class="pl-c"> * Description: Do not load backward compatibility support in Subscriptions 2.0.</span></td>
</tr>
<tr>
<td id="file-wcs-remove-deprecated-handlers-php-L6" class="blob-num js-line-number" data-line-number="6"> </td>
<td id="file-wcs-remove-deprecated-handlers-php-LC6" class="blob-code blob-code-inner js-file-line"><span class="pl-c"> * Author: Prospress Inc.</span></td>
</tr>
<tr>
<td id="file-wcs-remove-deprecated-handlers-php-L7" class="blob-num js-line-number" data-line-number="7"> </td>
<td id="file-wcs-remove-deprecated-handlers-php-LC7" class="blob-code blob-code-inner js-file-line"><span class="pl-c"> * Version: 1.0</span></td>
</tr>
<tr>
<td id="file-wcs-remove-deprecated-handlers-php-L8" class="blob-num js-line-number" data-line-number="8"> </td>
<td id="file-wcs-remove-deprecated-handlers-php-LC8" class="blob-code blob-code-inner js-file-line"><span class="pl-c"> * Author URI: http://prospress.com</span></td>
</tr>
<tr>
<td id="file-wcs-remove-deprecated-handlers-php-L9" class="blob-num js-line-number" data-line-number="9"> </td>
<td id="file-wcs-remove-deprecated-handlers-php-LC9" class="blob-code blob-code-inner js-file-line"><span class="pl-c"> */</span></td>
</tr>
<tr>
<td id="file-wcs-remove-deprecated-handlers-php-L10" class="blob-num js-line-number" data-line-number="10"> </td>
<td id="file-wcs-remove-deprecated-handlers-php-LC10" class="blob-code blob-code-inner js-file-line"> </td>
</tr>
<tr>
<td id="file-wcs-remove-deprecated-handlers-php-L11" class="blob-num js-line-number" data-line-number="11"> </td>
<td id="file-wcs-remove-deprecated-handlers-php-LC11" class="blob-code blob-code-inner js-file-line"><span class="pl-k">function</span> <span class="pl-en">wcs_remove_deprecation_handlers</span>() {</td>
</tr>
<tr>
<td id="file-wcs-remove-deprecated-handlers-php-L12" class="blob-num js-line-number" data-line-number="12"> </td>
<td id="file-wcs-remove-deprecated-handlers-php-LC12" class="blob-code blob-code-inner js-file-line"><span class="pl-en">add_filter</span>( <span class="pl-s">&#8216;woocommerce_subscriptions_load_deprecation_handlers&#8217;</span>, <span class="pl-s">&#8216;__return_false&#8217;</span> );</td>
</tr>
<tr>
<td id="file-wcs-remove-deprecated-handlers-php-L13" class="blob-num js-line-number" data-line-number="13"> </td>
<td id="file-wcs-remove-deprecated-handlers-php-LC13" class="blob-code blob-code-inner js-file-line">}</td>
</tr>
<tr>
<td id="file-wcs-remove-deprecated-handlers-php-L14" class="blob-num js-line-number" data-line-number="14"> </td>
<td id="file-wcs-remove-deprecated-handlers-php-LC14" class="blob-code blob-code-inner js-file-line"><span class="pl-en">add_action</span>( <span class="pl-s">&#8216;plugins_loaded&#8217;</span>, <span class="pl-s">&#8216;wcs_remove_deprecation_handlers&#8217;</span>, <span class="pl-c1">0</span> );</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<p>&nbsp;</p>
</div>
</div>
<p>This snippet can also be downloaded and installed as a plugin.</p>
<div class="woo-sc-box note   "><strong>Note:</strong> Deprecation handlers are no longer loaded by default with <a href="https://help.codibu.com/blog/kb/whats-new-in-subscriptions-2-1/#deprecated-hooks-are-no-longer-called">Subscriptions 2.1 and newer</a>. If you need to continue to call deprecated hooks, install WooCommerce Subscriptions Load Deprecation Handlers.</div>
<h2 id="section-3">Warning</h2>
<p>You must be certain that no third-party or custom code is running on your site that is dependent on deprecated hooks before disabling this deprecated hook handling. Disabling will break backwards compatibility with all old hooks and can, among other things:</p>
<ul>
<li>Prevent recurring payments being processed</li>
<li>Break synchronization of subscription status between the payment gateway and store</li>
<li>Break updating of a failing payment method</li>
</ul>
<h2 id="section-4">List of Deprecated Hooks</h2>
<p>This gist provides a complete list of deprecated hooks, and their new counterpart, formatted as PHP arrays. The new hook is listed as the array key, and the deprecated hook as the value or values.</p>
<div id="gist40368083" class="gist">
<div class="gist-file">
<div class="gist-data">
<div class="js-gist-file-update-container js-task-list-container file-box">
<div id="file-wcs-deprecated-hook-list-php" class="file my-2">
<div class="Box-body p-0 blob-wrapper data type-php  ">
<table class="highlight tab-size js-file-line-container" data-tab-size="8" data-paste-markdown-skip="">
<tbody>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L1" class="blob-num js-line-number" data-line-number="1"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC1" class="blob-code blob-code-inner js-file-line"><span class="pl-ent">&lt;?php</span></td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L2" class="blob-num js-line-number" data-line-number="2"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC2" class="blob-code blob-code-inner js-file-line"> </td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L3" class="blob-num js-line-number" data-line-number="3"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC3" class="blob-code blob-code-inner js-file-line"><span class="pl-s1"><span class="pl-c1">$</span>deprecated_actions</span> = <span class="pl-en">array</span>(</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L4" class="blob-num js-line-number" data-line-number="4"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC4" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_scheduled_subscription_payment&#8217;</span> =&gt; <span class="pl-s">&#8216;scheduled_subscription_payment&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L5" class="blob-num js-line-number" data-line-number="5"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC5" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_payment_complete&#8217;</span> =&gt; <span class="pl-s">&#8216;processed_subscription_payment&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L6" class="blob-num js-line-number" data-line-number="6"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC6" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_renewal_payment_complete&#8217;</span> =&gt; <span class="pl-s">&#8216;processed_subscription_renewal_payment&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L7" class="blob-num js-line-number" data-line-number="7"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC7" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscriptions_paid_for_failed_renewal_order&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscriptions_processed_failed_renewal_order_payment&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L8" class="blob-num js-line-number" data-line-number="8"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC8" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscriptions_pre_update_payment_method&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscriptions_pre_update_recurring_payment_method&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L9" class="blob-num js-line-number" data-line-number="9"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC9" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_payment_method_updated&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscriptions_updated_recurring_payment_method&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L10" class="blob-num js-line-number" data-line-number="10"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC10" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_failing_payment_method_updated&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscriptions_changed_failing_payment_method&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L11" class="blob-num js-line-number" data-line-number="11"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC11" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_payment_failed&#8217;</span> =&gt; <span class="pl-s">&#8216;processed_subscription_payment_failure&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L12" class="blob-num js-line-number" data-line-number="12"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC12" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_change_payment_method_via_pay_shortcode&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscriptions_change_payment_method_via_pay_shortcode&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L13" class="blob-num js-line-number" data-line-number="13"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC13" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;subscriptions_put_on_hold_for_order&#8217;</span> =&gt; <span class="pl-s">&#8216;subscriptions_suspended_for_order&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L14" class="blob-num js-line-number" data-line-number="14"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC14" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_status_active&#8217;</span> =&gt; <span class="pl-s">&#8216;activated_subscription&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L15" class="blob-num js-line-number" data-line-number="15"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC15" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_status_on-hold&#8217;</span> =&gt; <span class="pl-en">array</span>( <span class="pl-s">&#8216;suspended_subscription&#8217;</span>, <span class="pl-s">&#8216;subscription_put_on-hold&#8217;</span> ),</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L16" class="blob-num js-line-number" data-line-number="16"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC16" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_status_cancelled&#8217;</span> =&gt; <span class="pl-s">&#8216;cancelled_subscription&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L17" class="blob-num js-line-number" data-line-number="17"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC17" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_status_on-hold_to_active&#8217;</span> =&gt; <span class="pl-s">&#8216;reactivated_subscription&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L18" class="blob-num js-line-number" data-line-number="18"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC18" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_status_expired&#8217;</span> =&gt; <span class="pl-s">&#8216;subscription_expired&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L19" class="blob-num js-line-number" data-line-number="19"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC19" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_scheduled_subscription_trial_end&#8217;</span> =&gt; <span class="pl-s">&#8216;subscription_trial_end&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L20" class="blob-num js-line-number" data-line-number="20"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC20" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_scheduled_subscription_end_of_prepaid_term&#8217;</span> =&gt; <span class="pl-s">&#8216;subscription_end_of_prepaid_term&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L21" class="blob-num js-line-number" data-line-number="21"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC21" class="blob-code blob-code-inner js-file-line">);</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L22" class="blob-num js-line-number" data-line-number="22"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC22" class="blob-code blob-code-inner js-file-line"> </td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L23" class="blob-num js-line-number" data-line-number="23"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC23" class="blob-code blob-code-inner js-file-line"><span class="pl-s1"><span class="pl-c1">$</span>deprecated_filters</span> = <span class="pl-en">array</span>(</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L24" class="blob-num js-line-number" data-line-number="24"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC24" class="blob-code blob-code-inner js-file-line"> </td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L25" class="blob-num js-line-number" data-line-number="25"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC25" class="blob-code blob-code-inner js-file-line"><span class="pl-c">// Subscription Meta Filters</span></td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L26" class="blob-num js-line-number" data-line-number="26"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC26" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_payment_failed_count&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscription_failed_payment_count&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L27" class="blob-num js-line-number" data-line-number="27"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC27" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_payment_completed_count&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscription_completed_payment_count&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L28" class="blob-num js-line-number" data-line-number="28"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC28" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_get_end_date&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscription_expiration_date&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L29" class="blob-num js-line-number" data-line-number="29"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC29" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_get_trial_end_date&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscription_trial_expiration_date&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L30" class="blob-num js-line-number" data-line-number="30"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC30" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_date_updated&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscriptions_set_expiration_date&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L31" class="blob-num js-line-number" data-line-number="31"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC31" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscriptions_product_expiration_date&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscription_calculated_expiration_date&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L32" class="blob-num js-line-number" data-line-number="32"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC32" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_date_updated&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscription_set_next_payment_date&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L33" class="blob-num js-line-number" data-line-number="33"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC33" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_get_last_payment_date&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscription_last_payment_date&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L34" class="blob-num js-line-number" data-line-number="34"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC34" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_calculated_next_payment_date&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscriptions_calculated_next_payment_date&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L35" class="blob-num js-line-number" data-line-number="35"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC35" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_date_updated&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscriptions_set_trial_expiration_date&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L36" class="blob-num js-line-number" data-line-number="36"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC36" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;wcs_subscription_statuses&#8217;</span> =&gt; <span class="pl-en">array</span>(</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L37" class="blob-num js-line-number" data-line-number="37"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC37" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscriptions_custom_status_string&#8217;</span>, <span class="pl-c">//no replacement as Subscriptions now uses wcs_get_subscription_statuses() for everything (the deprecator could use &#8216;wc_subscription_statuses&#8217; and loop over all statuses to set it in the returned value)</span></td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L38" class="blob-num js-line-number" data-line-number="38"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC38" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscriptions_status_string&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L39" class="blob-num js-line-number" data-line-number="39"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC39" class="blob-code blob-code-inner js-file-line">),</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L40" class="blob-num js-line-number" data-line-number="40"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC40" class="blob-code blob-code-inner js-file-line"> </td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L41" class="blob-num js-line-number" data-line-number="41"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC41" class="blob-code blob-code-inner js-file-line"><span class="pl-c">// Renewal Filters</span></td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L42" class="blob-num js-line-number" data-line-number="42"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC42" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;wcs_renewal_order_items&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscriptions_renewal_order_items&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L43" class="blob-num js-line-number" data-line-number="43"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC43" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;wcs_renewal_order_meta_query&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscriptions_renewal_order_meta_query&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L44" class="blob-num js-line-number" data-line-number="44"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC44" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;wcs_renewal_order_meta&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscriptions_renewal_order_meta&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L45" class="blob-num js-line-number" data-line-number="45"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC45" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;wcs_renewal_order_item_name&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscriptions_renewal_order_item_name&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L46" class="blob-num js-line-number" data-line-number="46"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC46" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;wcs_users_resubscribe_link&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscriptions_users_renewal_link&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L47" class="blob-num js-line-number" data-line-number="47"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC47" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;wcs_can_user_resubscribe_to_subscription&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_can_subscription_be_renewed&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L48" class="blob-num js-line-number" data-line-number="48"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC48" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;wcs_renewal_order_created&#8217;</span> =&gt; <span class="pl-en">array</span>(</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L49" class="blob-num js-line-number" data-line-number="49"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC49" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscriptions_renewal_order_created&#8217;</span>, <span class="pl-c">// Even though &#8216;woocommerce_subscriptions_renewal_order_created&#8217; is an action, as it is attached to a filter, we need to handle it in here</span></td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L50" class="blob-num js-line-number" data-line-number="50"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC50" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscriptions_renewal_order_id&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L51" class="blob-num js-line-number" data-line-number="51"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC51" class="blob-code blob-code-inner js-file-line">),</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L52" class="blob-num js-line-number" data-line-number="52"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC52" class="blob-code blob-code-inner js-file-line"> </td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L53" class="blob-num js-line-number" data-line-number="53"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC53" class="blob-code blob-code-inner js-file-line"><span class="pl-c">// List Table Filters</span></td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L54" class="blob-num js-line-number" data-line-number="54"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC54" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_list_table_actions&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscriptions_list_table_actions&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L55" class="blob-num js-line-number" data-line-number="55"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC55" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_list_table_column_status_content&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscriptions_list_table_column_status_content&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L56" class="blob-num js-line-number" data-line-number="56"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC56" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_list_table_column_content&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscriptions_list_table_column_content&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L57" class="blob-num js-line-number" data-line-number="57"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC57" class="blob-code blob-code-inner js-file-line"> </td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L58" class="blob-num js-line-number" data-line-number="58"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC58" class="blob-code blob-code-inner js-file-line"><span class="pl-c">// User Filters</span></td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L59" class="blob-num js-line-number" data-line-number="59"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC59" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;wcs_can_user_put_subscription_on_hold&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscriptions_can_current_user_suspend&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L60" class="blob-num js-line-number" data-line-number="60"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC60" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;wcs_view_subscription_actions&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_my_account_my_subscriptions_actions&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L61" class="blob-num js-line-number" data-line-number="61"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC61" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;wcs_get_users_subscriptions&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_users_subscriptions&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L62" class="blob-num js-line-number" data-line-number="62"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC62" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;wcs_users_change_status_link&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscriptions_users_action_link&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L63" class="blob-num js-line-number" data-line-number="63"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC63" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;wcs_user_has_subscription&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_user_has_subscription&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L64" class="blob-num js-line-number" data-line-number="64"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC64" class="blob-code blob-code-inner js-file-line"> </td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L65" class="blob-num js-line-number" data-line-number="65"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC65" class="blob-code blob-code-inner js-file-line"><span class="pl-c">// Misc Filters</span></td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L66" class="blob-num js-line-number" data-line-number="66"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC66" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_max_failed_payments_exceeded&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscriptions_max_failed_payments_exceeded&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L67" class="blob-num js-line-number" data-line-number="67"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC67" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_my_subscriptions_payment_method&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_my_subscriptions_recurring_payment_method&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L68" class="blob-num js-line-number" data-line-number="68"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC68" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscriptions_update_payment_via_pay_shortcode&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscriptions_update_recurring_payment_via_pay_shortcode&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L69" class="blob-num js-line-number" data-line-number="69"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC69" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_can_subscription_be_updated_to&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_can_subscription_be_changed_to&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L70" class="blob-num js-line-number" data-line-number="70"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC70" class="blob-code blob-code-inner js-file-line">);</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L71" class="blob-num js-line-number" data-line-number="71"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC71" class="blob-code blob-code-inner js-file-line"> </td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L72" class="blob-num js-line-number" data-line-number="72"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC72" class="blob-code blob-code-inner js-file-line"><span class="pl-c">/**</span></td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L73" class="blob-num js-line-number" data-line-number="73"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC73" class="blob-code blob-code-inner js-file-line"><span class="pl-c"> * The following hooks are prefixes only, the are used a deprecated hooks. Refer to the source code for the suffix on these hooks.</span></td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L74" class="blob-num js-line-number" data-line-number="74"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC74" class="blob-code blob-code-inner js-file-line"><span class="pl-c"> */</span></td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L75" class="blob-num js-line-number" data-line-number="75"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC75" class="blob-code blob-code-inner js-file-line"> </td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L76" class="blob-num js-line-number" data-line-number="76"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC76" class="blob-code blob-code-inner js-file-line"><span class="pl-s1"><span class="pl-c1">$</span>deprecated_hook_prefixes</span> = <span class="pl-en">array</span>(</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L77" class="blob-num js-line-number" data-line-number="77"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC77" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_admin_changed_subscription_to_&#8217;</span> =&gt; <span class="pl-s">&#8216;admin_changed_subscription_to_&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L78" class="blob-num js-line-number" data-line-number="78"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC78" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_scheduled_subscription_payment_&#8217;</span> =&gt; <span class="pl-s">&#8216;scheduled_subscription_payment_&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L79" class="blob-num js-line-number" data-line-number="79"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC79" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_customer_changed_subscription_to_&#8217;</span> =&gt; <span class="pl-s">&#8216;customer_changed_subscription_to_&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L80" class="blob-num js-line-number" data-line-number="80"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC80" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_payment_method_updated_to_&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscriptions_updated_recurring_payment_method_to_&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L81" class="blob-num js-line-number" data-line-number="81"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC81" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_payment_method_updated_from_&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscriptions_updated_recurring_payment_method_from_&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L82" class="blob-num js-line-number" data-line-number="82"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC82" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_failing_payment_method_updated_&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscriptions_changed_failing_payment_method_&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L83" class="blob-num js-line-number" data-line-number="83"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC83" class="blob-code blob-code-inner js-file-line"> </td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L84" class="blob-num js-line-number" data-line-number="84"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC84" class="blob-code blob-code-inner js-file-line"><span class="pl-c">// Gateway status change hooks</span></td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L85" class="blob-num js-line-number" data-line-number="85"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC85" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_activated_&#8217;</span> =&gt; <span class="pl-en">array</span>(</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L86" class="blob-num js-line-number" data-line-number="86"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC86" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;activated_subscription_&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L87" class="blob-num js-line-number" data-line-number="87"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC87" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;reactivated_subscription_&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L88" class="blob-num js-line-number" data-line-number="88"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC88" class="blob-code blob-code-inner js-file-line">),</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L89" class="blob-num js-line-number" data-line-number="89"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC89" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_on-hold_&#8217;</span> =&gt; <span class="pl-s">&#8216;subscription_put_on-hold_&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L90" class="blob-num js-line-number" data-line-number="90"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC90" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_cancelled_&#8217;</span> =&gt; <span class="pl-s">&#8216;cancelled_subscription_&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L91" class="blob-num js-line-number" data-line-number="91"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC91" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_subscription_expired_&#8217;</span> =&gt; <span class="pl-s">&#8216;subscription_expired_&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L92" class="blob-num js-line-number" data-line-number="92"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC92" class="blob-code blob-code-inner js-file-line"> </td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L93" class="blob-num js-line-number" data-line-number="93"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC93" class="blob-code blob-code-inner js-file-line"><span class="pl-c">// This is a filter, not an action</span></td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L94" class="blob-num js-line-number" data-line-number="94"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC94" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&#8216;woocommerce_can_subscription_be_updated_to_&#8217;</span> =&gt; <span class="pl-s">&#8216;woocommerce_subscription_can_be_changed_to_&#8217;</span>,</td>
</tr>
<tr>
<td id="file-wcs-deprecated-hook-list-php-L95" class="blob-num js-line-number" data-line-number="95"> </td>
<td id="file-wcs-deprecated-hook-list-php-LC95" class="blob-code blob-code-inner js-file-line">);</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="woo-sc-box note   ">In almost all cases, the new hooks pass different parameters to callbacks and expect a different return value. Therefore, to update your code, you cannot simply replace the old hook with the new one.</div><p>The post <a href="https://help.codibu.com/blog/subscriptions-2-0-deprecated-hooks-query-monitor-warning/">Subscriptions 2.0 Deprecated Hooks & Query Monitor Warning</a> first appeared on <a href="https://help.codibu.com">CODIBU</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://help.codibu.com/blog/subscriptions-2-0-deprecated-hooks-query-monitor-warning/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Subscriptions v2.0: Payment Gateway Upgrade Guide</title>
		<link>https://help.codibu.com/blog/subscriptions-v2-0-payment-gateway-upgrade-guide/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=subscriptions-v2-0-payment-gateway-upgrade-guide</link>
					<comments>https://help.codibu.com/blog/subscriptions-v2-0-payment-gateway-upgrade-guide/#respond</comments>
		
		<dc:creator><![CDATA[JN C]]></dc:creator>
		<pubDate>Sun, 08 Nov 2020 15:13:55 +0000</pubDate>
				<guid isPermaLink="false">https://help.codibu.com/kb/subscriptions-v2-0-payment-gateway-upgrade-guide/</guid>

					<description><![CDATA[<p>Although backward compatibility has been preserved for payment gateway APIs, Subscriptions v2.0 introduces a number of changes that relate to payment related meta data and how<span class="excerpt-hellip"> […]</span></p>
<p>The post <a href="https://help.codibu.com/blog/subscriptions-v2-0-payment-gateway-upgrade-guide/">Subscriptions v2.0: Payment Gateway Upgrade Guide</a> first appeared on <a href="https://help.codibu.com">CODIBU</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Although backward compatibility has been preserved for payment gateway APIs, Subscriptions v2.0 introduces a number of changes that relate to payment related meta data and how recurring payments are handled.</p>
<p>&nbsp;</p>
<p>There are a number of updates you can make to your gateway extension’s code to support these changes and avoid deprecated notices on your customer’s sites.</p>
<p>If you have not already, you should read the <a href="https://help.codibu.com/blog/kb/whats-new-in-woocommerce-subscriptions-v2-0/">What’s New in Subscriptions v2.0</a> document and <a href="https://help.codibu.com/blog/kb/subscriptions-v2-0-architectural-changes/">Overview of Subscriptions v2.0 Architectural Changes</a> before continuing with this document.</p>
<h2 id="section-1">Items to Update</h2>
<p>To be fully compatible with Subscriptions v2.0, you need to:</p>
<ul>
<li>update use of deprecated hooks</li>
<li>update the location of your meta data</li>
<li>add support for multiple subscriptions</li>
<li>add support for admin payment method changes</li>
<li>update customer facing change payment method support (if you already support it)</li>
<li>use renewal orders for processing renewal payments</li>
<li>make sure relevant meta data is copied from the original order to the subscription for existing orders/subscriptions on upgrade. All post meta on the original order will be copied by default by the <a href="https://help.codibu.com/blog/kb/subscriptions-v2-0-database-upgrade-process-for-v1-5-to-v2-0/">Subscriptions upgrader</a>, so you only need to copy meta data stored elsewhere or <a href="https://help.codibu.com/blog/kb/subscriptions-v2-0-database-upgrade-process-for-v1-5-to-v2-0/#section-1">exclude post meta data you do not want copied</a>, if any</li>
</ul>
<h2 id="section-2">Example Code: Simplify Commerce</h2>
<p>For example code of the patches required to make a token based payment gateway fully compatible with Subscriptions v2.0, see the Simplify Commerce Subscriptions v2.0 Pull Request for WooCommerce Core.</p>
<p>This pull request includes annotated commits for all of the patches required by a token based payment gateway to be fully compatible with Subscriptions v2.0.</p>
<h2 id="section-3">Store Meta Data on the Subscription not the Original Order</h2>
<p>As discussed in the <a href="https://help.codibu.com/blog/kb/subscriptions-v2-0-architectural-changes/">overview of Subscriptions v2.0’s Architectural Changes</a>, a subscription’s meta data is no longer stored against the order created to record the purchase of that subscription. It is now stored on a separate <code>'shop_subscription'</code> post type.</p>
<p>As a result, if your gateway stores payment related meta data, like credit card or customer tokens, it should store this against the subscription or subscriptions created during checkout and not the original order (as was previously the case).</p>
<p>This is also essential for adding support for the new <a href="https://help.codibu.com/blog/kb/admin-change-payment-method-integration-guide/">Admin Payment Method Changes</a> feature.</p>
<p>As Subscriptions will copy all post meta data stored against the <code>'shop_subscription'</code> post to renewal orders (i.e. <code>'shop_order'</code> posts), your gateway’s meta data will be copied to renewal orders and you can then access it on the renewal order to process the renewal payments via the <code>'woocommerce_scheduled_subscription_payment_{$gateway_id}'</code> hook.</p>
<p>A note on upgrading: as mentioned above, all post meta on the original order will be copied by default by the <a href="https://help.codibu.com/blog/kb/subscriptions-v2-0-database-upgrade-process-for-v1-5-to-v2-0/">Subscriptions upgrader</a>. So migrating your code to use post meta on the subscription will work for both old and new subscriptions.</p>
<h2 id="section-4">Update Deprecated Hooks</h2>
<p>A number of hooks have been deprecated in Subscriptions v2.0, mainly due to the <a href="https://help.codibu.com/blog/kb/subscriptions-v2-0-architectural-changes/">architectural changes</a>.</p>
<p>Specifically, the following hooks have been changed in order to change the parameters passed to callbacks:</p>
<ul>
<li><code>'scheduled_subscription_payment_{$gateway_id}</code> has been replaced with <code>'woocommerce_scheduled_subscription_payment_{$gateway_id}'</code></li>
<li><code>'woocommerce_my_subscriptions_recurring_payment_method'</code> has been replaced with <code>'woocommerce_my_subscriptions_payment_method'</code></li>
<li><code>'woocommerce_subscriptions_renewal_order_meta_query'</code> has been replaced with <code>'wcs_resubscribe_order_created'</code> in the case of what were previously called “parent” renewal orders and <code>'wcs_renewal_order_created'</code> for orders that were previously called “child” renewal orders; and</li>
<li><code>'woocommerce_subscriptions_changed_failing_payment_method_{$gateway_id}'</code> has been replaced with <code>'woocommerce_subscription_failing_payment_method_updated_{$gateway_id}'</code></li>
</ul>
<p>You should update your use of these deprecated hooks to avoid notices and also take advantage of the extra features provided by receiving a <a href="https://help.codibu.com/blog/kb/subscriptions-v2-0-architectural-changes/#the-wc_subscription-object"><code>WC_Subscription</code> as a parameter</a>.</p>
<h3 id="section-5">Hook for Recurring Payment Method Display</h3>
<p>By default, Subscriptions displays your payment gateway extension’s name as the payment method for a subscription; however, Subscriptions also provides an API for displaying a custom label. This can be used to provide a gateway specific and more descriptive label on the payment method. For example, the Stripe extension uses it to display the last 4 digits of the credit card used for recurring payments instead of simply <em>Credit Card</em>.</p>
<p>In Subscriptions v1.5, the filter for displaying a custom label was: <code>'woocommerce_my_subscriptions_recurring_payment_method'</code>.</p>
<p>In Subscriptions v2.0, this has been changed to <code>'woocommerce_my_subscriptions_payment_method'</code>.</p>
<p>The new filter passes the string displayed to describe the payment method (the same as the old filter), and then an instance of a <code>WC_Subscription</code> for which the string relates. This can be used to access meta data specific to that subscription.</p>
<h2 id="section-6">Support for Multiple Subscriptions</h2>
<p>Most modern payment gateways should be able to support Subscriptions v2.0’s new multiple subscriptions feature.</p>
<p>Specifically, if your payment gateway uses customer or credit card tokens for processing renewals, you will be able to support multiple subscriptions. Furthermore, if your payment gateway stores the meta data it uses to process automatic payments in post meta and/or user meta, adding support will be as simple as adding a <code>'multiple_subscriptions'</code> value to your extension’s <code>$supports</code> property.</p>
<p>To learn more about how multiple subscriptions is implemented in Subscriptions v2.0 and to understand whether your payment gateway will be able to support it, refer to the <a href="https://help.codibu.com/blog/kb/store-manager-guide-to-multiple-subscriptions/">overview of multiple subscriptions</a>.</p>
<h2 id="section-7">Support Admin Payment Method Changes</h2>
<p>Subscriptions v2.0 introduces a new feature to allow store managers to change the payment method used on a subscription. To learn how to add support for this feature in your extension, refer to the <a href="https://help.codibu.com/blog/kb/admin-change-payment-method-integration-guide/">Admin Change Payment Method Integration Guide</a>.</p>
<h2 id="section-8">Update Customer Facing Change Payment Method Support</h2>
<p>Subscriptions v1.5 provided a customer facing process for <a href="https://help.codibu.com/blog/kb/subscriptions-payment-gateway-integration-guide/#section-5)%20for%20a%20subscription%20(especially%20useful%20for%20updating%20a%20failing%20payment%20method">changing the payment method</a>.</p>
<p>Because it is now possible to <a href="https://help.codibu.com/blog/kb/subscriptions-v2-0-architectural-changes/">store a subscription’s payment method meta data on the subscription</a> instead of the original order, this process has been updated for v2.0.</p>
<p>To update your process, you need to:</p>
<ol>
<li>declare support for the new feature, which is <code>'subscription_payment_method_change_customer'</code>: a new feature name has been chosen to both require an update and to differentiate between the new admin payment method change feature and the customer facing feature.</li>
<li>update your payment method’s meta data using the new <code>'woocommerce_subscription_failing_payment_method_updated_{$gateway_id}'</code> hook, which passes your gateway the <code>WC_Subscription</code> object, instead of the old <code>'woocommerce_subscriptions_changed_failing_payment_method_{$gateway_id}'</code> hook, which passed the <code>WC_Order</code> of the original purchase.</li>
</ol>
<p>The code required to update Simplify Commerce can be seen in this commit to WooCommerce core on GitHub.</p>
<h2 id="section-9">Use Renewal Order for Processing Scheduled Payment</h2>
<p>As discussed in the <a href="https://help.codibu.com/blog/kb/subscriptions-v2-0-architectural-changes//#renewal-order-creation">overview of renewal order creation changes</a>, Subscriptions v2.0 now creates the renewal order for recurring payment <em>before</em> triggering the scheduled subscription payment hook.</p>
<p>This makes it possible to use the same code for processing an initial payment as for processing a recurring payment (as the renewal order contains all essential information about the payment). It also makes it possible to record the transaction ID of the recurring payment on the renewal order by calling <code>$renewal_order-&gt;payment_complete( $transaction_id )</code>.</p>
<p>To use the renewal order for processing scheduled payments, update the code attached to the deprecated <code>'scheduled_subscription_payment_{$gateway_id}'</code> action to use the new hook <code>'woocommerce_scheduled_subscription_renewal_{$gateway_id}'</code> instead.</p>
<p>This hook will pass callbacks:</p>
<ol>
<li>the amount to charge (the same as the first parameter in Subscriptions v1.5)</li>
<li>an instance of a <code>WC_Order</code>, which represents the pending renewal order for this payment</li>
</ol>
<p>You can also process the renewal payment without having to worry about the associated subscription by calling <code>$order-&gt;payment_complete( $transaction_id )</code> where <code>$order</code> is the renewal order, just as you would with a normal payment.</p>
<h3 id="section-10">A Note on Tokens and Renewal Order Meta Data</h3>
<p>You may be wondering why the <code>'woocommerce_scheduled_subscription_payment_{$gateway_id}'</code> only passes callbacks the amount and a single order as a parameter, but not the <code>WC_Subscription</code> for which the order relates. This is to lay the foundation for batch processing renewal payments for multiple subscriptions in a single order. More generally, it also helps provide APIs that only require an understanding of WooCommerce primatives, like <code>WC_Order</code>, instead of Subscriptions specific objects, like <code>WC_Subscription</code>.</p>
<p>When a renewal order is generated, via <code>wcs_create_renewal_order()</code>, Subscriptions copies all post meta data rows stored against the <code>'shop_subscription'</code> object to the new renewal order object. It is possible for extensions to opt-out their data from this process using the <code>'wcs_renewal_order_meta'</code> or <code>'wcs_renewal_order_meta_query'</code> hook, but it is recommended that you let your payment gateway’s token data be copied to renewal orders. This makes it possible to use only the parameters passed along with <code>'woocommerce_scheduled_subscription_payment_{$gateway_id}'</code>, instead of also having to use <code>wcs_get_subscription_for_renewal_order()</code> to access the data on the subscription.</p>
<h2 id="section-11">Handling $0 Renewals</h2>
<p>You may also (optionally) remove any code your gateway has to process $0 renewal orders/payments. Subscriptions v1.5 still called the payment gateway hook if a $0 amount was due; however, in v2.0, it no longer involves the payment gateway, and instead generates the order and processes it internally.</p>
<h2 id="section-12">Test Cases</h2>
<p>After you have updated your integration, you can confirm everything is working by running through all of the following test cases using your payment gateway as the payment method.</p>
<h3 id="section-13">Tests for Subscriptions v1.5 and v2.0</h3>
<ul>
<li>checkout with only a simple product in the cart</li>
<li>checkout with only a simple subscription product in the cart</li>
<li>checkout with only a simple subscription product with a sign-up fee in the cart</li>
<li>checkout with only a simple subscription product with a free trial in the cart</li>
<li>checkout with only a simple subscription product with a sign-up fee and free trial in the cart</li>
<li>checkout with only a simple subscription product <a href="https://help.codibu.com/blog/kb/subscription-renewal-synchronization-guide/">synchronized</a> to a day in the future in the cart</li>
<li>checkout with only a simple subscription product with a sign-up fee and <a href="https://help.codibu.com/blog/kb/subscription-renewal-synchronization-guide/">synchronized</a> to a day in the future in the cart</li>
<li>checkout with a simple product <em>and</em> simple subscription product in the cart</li>
<li><a href="https://help.codibu.com/blog/kb/testing-subscription-renewal-payments/">trigger an automatic renewal</a> for a subscription with valid payment gateway meta data to test automatic payment success</li>
<li><a href="https://help.codibu.com/blog/kb/testing-subscription-renewal-payments/">trigger an automatic renewal</a> for a subscription with invalid payment gateway meta data to test automatic payment failure</li>
<li>complete the <a href="https://help.codibu.com/blog/kb/subscribers-view/#section-3">manual payment process for the failed renewal</a> and confirm that payment gateway meta data is updated correctly. Then trigger an automatic renewal after changing the payment method to ensure future renewals use the new payment gateway meta data</li>
<li>test the <strong><a href="https://help.codibu.com/blog/kb/subscribers-view/#section-5">Change Payment Method</a></strong> process on a subscription and confirm that payment gateway meta data is updated correctly. Then trigger an automatic renewal to ensure future renewals use the new payment gateway meta data.</li>
</ul>
<h3 id="section-14">Test for Subscriptions v2.0 Specific Functionality</h3>
<ul>
<li>checkout with <a href="https://help.codibu.com/blog/kb/store-manager-guide-to-multiple-subscriptions/">multiple simple subscription products</a> with different billing periods in the cart (e.g. one subscription product renewing weekly and another renewing monthly)</li>
<li>trigger an automatic renewal with working payment gateway meta data for a subscription with multiple simple subscription product line items</li>
<li>checkout with a simple product <em>and</em> multiple simple subscription products in the cart</li>
<li>(optional) if you added support for <a href="https://help.codibu.com/blog/kb/admin-change-payment-method-integration-guide/">administrator payment method changes</a>, change payment method on a subscription from the admin then trigger an automatic renewal to ensure future renewals use the new payment gateway meta data.</li>
</ul><p>The post <a href="https://help.codibu.com/blog/subscriptions-v2-0-payment-gateway-upgrade-guide/">Subscriptions v2.0: Payment Gateway Upgrade Guide</a> first appeared on <a href="https://help.codibu.com">CODIBU</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://help.codibu.com/blog/subscriptions-v2-0-payment-gateway-upgrade-guide/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
