{"id":393455,"date":"2026-10-31T08:26:02","date_gmt":"2026-10-31T08:26:02","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/donations-for-planetstudio-payment-gateway\/"},"modified":"2026-10-31T08:25:51","modified_gmt":"2026-10-31T08:25:51","slug":"joedavtian-donations-for-planetstudio-payment-gateway","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/joedavtian-donations-for-planetstudio-payment-gateway\/","author":23593917,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.3","stable_tag":"1.0.3","tested":"7.1.4","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"Joedavtian Donations for PlanetStudio Payment Gateway","header_author":"Joe Davtian","header_description":"Donation form, campaigns with goals and deadlines, and recurring donations on saved cards, paid through PlanetStudio Payment Gateway.","assets_banners_color":"788ec6","last_updated":"2026-10-31 08:25:51","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":128,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.3":{"tag":"1.0.3","author":"joedavtian","date":"2026-10-31 08:25:51","revision":3776482}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3776482,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3776482,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3776482,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3776482,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3776482,"resolution":"1","location":"assets","locale":"","width":700,"height":1770},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3776482,"resolution":"2","location":"assets","locale":"","width":806,"height":488},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3776482,"resolution":"3","location":"assets","locale":"","width":640,"height":656},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3776482,"resolution":"4","location":"assets","locale":"","width":1440,"height":1100},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3776482,"resolution":"5","location":"assets","locale":"","width":1440,"height":394},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3776482,"resolution":"6","location":"assets","locale":"","width":1280,"height":1250},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3776482,"resolution":"7","location":"assets","locale":"","width":1280,"height":825}},"screenshots":{"1":"A campaign page: progress towards the goal across currencies, the campaign's story, the three-step donation form and the supporters list.","2":"The payment result screen a donor sees after paying, in your colours.","3":"A receipt email, in the donor's language, with your logo and colours.","4":"The donation log: the figures at a glance, filters, search and CSV export.","5":"Recurring donations, with each saved card's status and the next payment date.","6":"A campaign's goal and end date, set beside the editor.","7":"Form settings: bank, currencies, test mode and recurring giving."}},"plugin_section":[],"plugin_tags":[197008,7644,5800,5801,126532],"plugin_category":[45],"plugin_contributors":[289891],"plugin_business_model":[],"class_list":["post-393455","plugin","type-plugin","status-publish","hentry","plugin_tags-armenian-banks","plugin_tags-campaigns","plugin_tags-donations","plugin_tags-fundraising","plugin_tags-recurring-donations","plugin_category-ecommerce","plugin_contributors-joedavtian","plugin_committers-joedavtian"],"banners":{"banner":"https:\/\/ps.w.org\/joedavtian-donations-for-planetstudio-payment-gateway\/assets\/banner-772x250.png?rev=3776482","banner_2x":"https:\/\/ps.w.org\/joedavtian-donations-for-planetstudio-payment-gateway\/assets\/banner-1544x500.png?rev=3776482","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/joedavtian-donations-for-planetstudio-payment-gateway\/assets\/icon-128x128.png?rev=3776482","icon_2x":"https:\/\/ps.w.org\/joedavtian-donations-for-planetstudio-payment-gateway\/assets\/icon-256x256.png?rev=3776482","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/joedavtian-donations-for-planetstudio-payment-gateway\/assets\/screenshot-1.png?rev=3776482","caption":"A campaign page: progress towards the goal across currencies, the campaign's story, the three-step donation form and the supporters list."},{"src":"https:\/\/ps.w.org\/joedavtian-donations-for-planetstudio-payment-gateway\/assets\/screenshot-2.png?rev=3776482","caption":"The payment result screen a donor sees after paying, in your colours."},{"src":"https:\/\/ps.w.org\/joedavtian-donations-for-planetstudio-payment-gateway\/assets\/screenshot-3.png?rev=3776482","caption":"A receipt email, in the donor's language, with your logo and colours."},{"src":"https:\/\/ps.w.org\/joedavtian-donations-for-planetstudio-payment-gateway\/assets\/screenshot-4.png?rev=3776482","caption":"The donation log: the figures at a glance, filters, search and CSV export."},{"src":"https:\/\/ps.w.org\/joedavtian-donations-for-planetstudio-payment-gateway\/assets\/screenshot-5.png?rev=3776482","caption":"Recurring donations, with each saved card's status and the next payment date."},{"src":"https:\/\/ps.w.org\/joedavtian-donations-for-planetstudio-payment-gateway\/assets\/screenshot-6.png?rev=3776482","caption":"A campaign's goal and end date, set beside the editor."},{"src":"https:\/\/ps.w.org\/joedavtian-donations-for-planetstudio-payment-gateway\/assets\/screenshot-7.png?rev=3776482","caption":"Form settings: bank, currencies, test mode and recurring giving."}],"raw_content":"<!--section=description-->\n<p>Joedavtian Donations for PlanetStudio Payment Gateway adds a three-step donation form, fundraising campaigns and monthly or weekly recurring donations to any WordPress site. Payments go through <a href=\"https:\/\/www.planetstudio.am\">PlanetStudio Payment Gateway<\/a> (PSPG) and whichever bank you have configured there. It keeps its own donor, donation and recurring-donation records, so it does not need GiveWP or WooCommerce.<\/p>\n\n<p>This is an independent add-on. It is not made or supported by PlanetStudio.<\/p>\n\n<p><strong>Donation form<\/strong><\/p>\n\n<ul>\n<li>Three steps: amount, details, review. One-time, monthly and weekly giving (each can be switched off).<\/li>\n<li>Suggested amounts, minimums and maximums per currency, checked again on the server.<\/li>\n<li>Donors pay in the currency they choose. Nothing is converted at payment time.<\/li>\n<li>Works behind page caches and CDNs: the security tokens are fetched when the page is on screen, not printed into it.<\/li>\n<li>Honeypot, minimum fill time and a per-address throttle stop scripted submissions before any bank order is created. Optional Cloudflare Turnstile check, using the keys you already saved in PSPG.<\/li>\n<li>Errors send the donor back to the form, in their own language, with everything they typed still filled in.<\/li>\n<li>Its script and stylesheet load only on pages that show the form or a campaign.<\/li>\n<\/ul>\n\n<p><strong>Campaigns<\/strong><\/p>\n\n<ul>\n<li>A Campaign post type with a goal, an end date, a progress bar and an optional supporters list.<\/li>\n<li>Optionally, donations in several currencies are combined into one progress figure using a daily exchange rate. Visitors can switch the figure between currencies.<\/li>\n<li>A campaign closes when its end date passes. Tick \"Stop taking donations when the goal is reached\" on a campaign to also close it at its goal; otherwise it keeps taking donations past 100%.<\/li>\n<li>When a campaign closes, its recurring donations are ended, the bank is asked to release the saved cards, and the donors are emailed.<\/li>\n<\/ul>\n\n<p><strong>Recurring donations<\/strong><\/p>\n\n<ul>\n<li>Offered through ArCa-network banks in PSPG, the saved-card path that has been proven in production. Other banks take one-time donations.<\/li>\n<li>Charged hourly on the donor's sign-up anniversary, with retries after 3, 7 and 14 days before cancelling. A declined charge is retried and the donor told; a charge the bank never confirms is checked again rather than counted.<\/li>\n<li>A run charges for 20 seconds at a time; if charges are still due, it continues a minute later, so a busy sign-up day is not charged late every month.<\/li>\n<li>Every email carries a cancel link that stays valid for the life of the donation.<\/li>\n<li>Payments the bank never reported back are re-checked every 15 minutes, so a donor who closes the tab still gets a receipt.<\/li>\n<\/ul>\n\n<p><strong>Payments you can trust in the totals<\/strong><\/p>\n\n<ul>\n<li>A donation counts as paid only when the bank says paid, for the order it was registered under.<\/li>\n<li>A payment the bank reports for a different amount or currency is held for review: left out of every total, no receipt sent, staff alerted.<\/li>\n<li>A full refund or a void made in PSPG &gt; Orders marks the donation refunded, so totals stay right. A partial refund is logged and the donation stays paid.<\/li>\n<\/ul>\n\n<p><strong>Emails<\/strong><\/p>\n\n<ul>\n<li>Receipts, recurring activation, failed-payment, cancellation and campaign-ended emails.<\/li>\n<li>Editable subject, heading and body per language, with placeholders, plus your logo, colours and social links.<\/li>\n<li>Written in the language the donor gave in, even when sent later from a scheduled job.<\/li>\n<li>Optional short note to staff addresses for each new donation.<\/li>\n<\/ul>\n\n<p><strong>Admin<\/strong><\/p>\n\n<ul>\n<li>Donation log with filters, search, CSV export and a row of headline figures.<\/li>\n<li>Recurring donations list with cancel.<\/li>\n<li>A <code>pspgd_manage_donations<\/code> capability: every administrator has it, and a role editor can give it to staff who should see donations but not change the bank or the settings.<\/li>\n<li>Test mode that never contacts the bank and keeps test donations out of every total.<\/li>\n<li>WordPress privacy export and erase support.<\/li>\n<\/ul>\n\n<h3>Shortcode<\/h3>\n\n<pre><code>[pspgd_donation_form]\n<\/code><\/pre>\n\n<p>Attributes:<\/p>\n\n<ul>\n<li><code>campaign_id<\/code> -- attach donations to a campaign. Campaign pages add the form themselves, so this is only needed to place a campaign's form somewhere else.<\/li>\n<li><code>privacy_policy_url<\/code> -- the link beside the consent checkbox. Defaults to the site's privacy policy page.<\/li>\n<\/ul>\n\n<h3>Customising<\/h3>\n\n<p><strong>Appearance.<\/strong> Colours, font and corner radius are set in Form Settings and apply to the form, campaign pages, the payment result screen and every email. The stylesheet reads them as CSS custom properties, so a theme can override them:<\/p>\n\n<pre><code>body .pspgd-donation-form, body .pspgd-campaign { --pspgd-primary: #0a7d4f; --pspgd-radius: 0; }\n<\/code><\/pre>\n\n<p>Available properties: <code>--pspgd-primary<\/code>, <code>--pspgd-accent<\/code>, <code>--pspgd-ink<\/code>, <code>--pspgd-font<\/code>, <code>--pspgd-radius<\/code>.<\/p>\n\n<p><strong>Languages.<\/strong> Donor-facing wording (form labels, error messages and email templates) can be edited per language on the settings screens. Donor languages follow Polylang when it is installed, otherwise the site language, or the list you enter in Form Settings. English and Armenian are built in. To add another language, copy <code>includes\/locales\/hy.php<\/code> to e.g. <code>includes\/locales\/de.php<\/code> and translate it, or supply the same array from your own plugin with the <code>pspgd_locale_pack<\/code> filter. Admin screens are translated the usual way with the <code>joedavtian-donations-for-planetstudio-payment-gateway<\/code> text domain. WPML is not supported directly; list your languages under Donor languages instead.<\/p>\n\n<p><strong>Actions.<\/strong><\/p>\n\n<ul>\n<li><code>pspgd_donation_paid<\/code> -- a donation became paid (one-time, first recurring payment, or a scheduled charge). Receives the donation row; check <code>is_test<\/code>.<\/li>\n<li><code>pspgd_newsletter_optin<\/code> -- a donor ticked the newsletter box. Receives their email, name, language, campaign and donation id, for any newsletter or CRM plugin. Mailchimp for WordPress also picks the box up by itself.<\/li>\n<li><code>pspgd_campaign_closed<\/code> -- a campaign closed and its recurring donations were ended. Receives the campaign id, the reason (<code>goal_reached<\/code> or <code>ended<\/code>) and the cancelled subscriptions, for example to invite those donors to give monthly to the organisation instead.<\/li>\n<\/ul>\n\n<p><strong>Filters.<\/strong><\/p>\n\n<ul>\n<li><code>pspgd_known_currencies<\/code> -- currencies that can be ticked in settings (default AMD, USD, EUR, RUB).<\/li>\n<li><code>pspgd_currency_symbols<\/code>, <code>pspgd_zero_decimal_currencies<\/code>, <code>pspgd_currency_defaults<\/code> -- how a currency is shown and its default presets and limits.<\/li>\n<li><code>pspgd_supported_locales<\/code>, <code>pspgd_locale_pack<\/code> -- donor languages and their wording.<\/li>\n<li><code>pspgd_campaign_slug<\/code> -- URL base for campaigns (default <code>campaigns<\/code>). Re-save permalinks after changing it.<\/li>\n<li><code>pspgd_supporter_name<\/code> -- how a supporter is named on a campaign page.<\/li>\n<li><code>pspgd_return_url<\/code> -- where the \"Return to site\" button on the payment result screen goes.<\/li>\n<li><code>pspgd_retry_days<\/code>, <code>pspgd_max_consecutive_failures<\/code> -- the retry schedule for failed recurring charges.<\/li>\n<li><code>pspgd_bank_supports_recurring<\/code> -- whether recurring donations are offered through a bank. Off for banks outside the ArCa network; switch one on to test it on staging.<\/li>\n<li><code>pspgd_rate_limit<\/code>, <code>pspgd_submit_limit<\/code>, <code>pspgd_rate_window<\/code> -- the throttle: donation attempts (default 5) and submissions of any kind (default 30) per address per window (default 10 minutes).<\/li>\n<li><code>pspgd_client_ip<\/code> -- the visitor address the throttle uses.<\/li>\n<li><code>pspgd_load_assets<\/code> -- whether the form's script and stylesheet load in the page head.<\/li>\n<li><code>pspgd_fetch_exchange_rates<\/code>, <code>pspgd_exchange_rate_sources<\/code>, <code>pspgd_exchange_rate_max_age<\/code> -- the exchange-rate source.<\/li>\n<li><code>pspgd_exchange_rate_max_change<\/code> -- how far a newly fetched rate may move from the last known one before it is refused and logged (default 0.25, a 25% move; 0 turns the check off).<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p><strong>Exchange rates.<\/strong> Off by default. When you tick <strong>Combine currencies with daily exchange rates<\/strong> in Form Settings and offer more than one currency, the plugin combines a campaign's donations in different currencies into one progress figure. To do that it downloads public exchange rates once a day from the free <a href=\"https:\/\/github.com\/fawazahmed0\/exchange-api\">currency-api<\/a> project, served from <code>cdn.jsdelivr.net<\/code> with <code>currency-api.pages.dev<\/code> as a fallback. The request is a plain download of a published JSON file. No donor, donation or site data is sent. See the <a href=\"https:\/\/www.jsdelivr.com\/terms\/privacy-policy-jsdelivr-net\">jsDelivr privacy policy<\/a> and <a href=\"https:\/\/www.cloudflare.com\/privacypolicy\/\">Cloudflare privacy policy<\/a>.<\/p>\n\n<p>Until you tick it, or on a site with one currency, nothing is downloaded and campaigns list each currency separately. The <code>pspgd_fetch_exchange_rates<\/code> filter can also switch it off.<\/p>\n\n<p><strong>Cloudflare Turnstile.<\/strong> Off by default. When you switch it on under Form Settings &gt; Spam protection, the donor's browser loads Cloudflare's Turnstile script from <code>challenges.cloudflare.com<\/code> on pages that show the form, and Cloudflare checks the browser to tell people from scripts. When the donor submits, your site sends Cloudflare the resulting token, your Turnstile secret key and the donor's IP address to confirm the check. No name, email or donation details are sent. See <a href=\"https:\/\/www.cloudflare.com\/turnstile-privacy-policy\/\">Cloudflare's Turnstile privacy addendum<\/a> and <a href=\"https:\/\/www.cloudflare.com\/website-terms\/\">website terms<\/a>.<\/p>\n\n<p><strong>Payments<\/strong> are sent to the bank you configured in PlanetStudio Payment Gateway, under that bank's own terms.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>The plugin stores each donor's name, email address and language, and each donation's amount, currency, date, status and bank reference. Card details never reach your site: donors enter them on the bank's own payment page.<\/p>\n\n<p>To throttle repeated attempts, the form counts submissions per visitor address for ten minutes. The address is stored only as a hash, in a temporary value that expires with the window. With Turnstile on, the address is also sent to Cloudflare as described above.<\/p>\n\n<p>Donor data is included in <strong>Tools &gt; Export Personal Data<\/strong> and <strong>Tools &gt; Erase Personal Data<\/strong>. Erasing anonymises the donor and keeps the donation amounts and dates, which are usually financial records you must keep. A donor with an active recurring donation cannot be erased until it is cancelled.<\/p>\n\n<p>Deleting the plugin keeps all donation data unless you tick <strong>Delete all donation data when the plugin is deleted<\/strong> in Form Settings.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate PlanetStudio Payment Gateway and set up your bank's credentials there.<\/li>\n<li>Install and activate this plugin.<\/li>\n<li>Go to <strong>Donations &gt; Form Settings<\/strong>:\n\n<ul>\n<li>choose the <strong>Bank<\/strong> donations go through, and tick the <strong>Currencies<\/strong> your bank accepts;<\/li>\n<li>under <strong>Spam protection<\/strong>, if the site is behind Cloudflare or another proxy, choose where the visitor's address comes from (the screen shows what each source holds for your own visit), and optionally switch on Turnstile;<\/li>\n<li>set your <strong>colours<\/strong>, <strong>font<\/strong> and optional <strong>payment methods image<\/strong> under Appearance;<\/li>\n<li>switch <strong>test mode<\/strong> on while you try things out.<\/li>\n<\/ul><\/li>\n<li>Go to <strong>Donations &gt; Emails<\/strong> and set the From address, Reply-to address, your logo, and any staff addresses to notify.<\/li>\n<li>Put <code>[pspgd_donation_form]<\/code> on a page, or create a campaign under <strong>Donations &gt; Campaigns<\/strong>.<\/li>\n<li>Make a test donation with test mode on, then a real one with test mode off, before announcing the page.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20work%20without%20planetstudio%20payment%20gateway%3F\"><h3>Does it work without PlanetStudio Payment Gateway?<\/h3><\/dt>\n<dd><p>Only in test mode. Every real payment goes through PSPG.<\/p><\/dd>\n<dt id=\"which%20banks%20can%20take%20recurring%20donations%3F\"><h3>Which banks can take recurring donations?<\/h3><\/dt>\n<dd><p>Banks on the ArCa network in PSPG. Ameriabank, Inecobank and AMIO take one-time donations; their saved-card payments have not been proven with this plugin, so recurring is off for them unless you switch it on with the <code>pspgd_bank_supports_recurring<\/code> filter to test on staging. Idram and Telcell cannot save cards.<\/p><\/dd>\n<dt id=\"can%20donors%20choose%20the%20currency%3F\"><h3>Can donors choose the currency?<\/h3><\/dt>\n<dd><p>Yes, if you tick more than one. Each donation is charged in the donor's chosen currency, so your bank must accept all of them.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20monthly%20donors%20when%20a%20campaign%20ends%3F\"><h3>What happens to monthly donors when a campaign ends?<\/h3><\/dt>\n<dd><p>Their recurring donation ends with the campaign: no further payments are taken, the bank is asked to release the saved card, and they are emailed. A gift to a campaign is earmarked, so it is not moved to general funds without asking. Use the <code>pspgd_campaign_closed<\/code> action if you want to invite them to give to the organisation instead.<\/p><\/dd>\n<dt id=\"how%20do%20i%20refund%20a%20donation%3F\"><h3>How do I refund a donation?<\/h3><\/dt>\n<dd><p>In PlanetStudio Payment Gateway &gt; Orders. After a full refund or a void the donation is marked refunded here automatically and leaves the totals. A partial refund is logged against the donation, which stays paid at its original amount.<\/p><\/dd>\n<dt id=\"where%20do%20the%20colours%20come%20from%3F\"><h3>Where do the colours come from?<\/h3><\/dt>\n<dd><p>Donations &gt; Form Settings &gt; Appearance. The defaults are a neutral blue.<\/p><\/dd>\n<dt id=\"do%20i%20need%20a%20server%20cron%20job%3F\"><h3>Do I need a server cron job?<\/h3><\/dt>\n<dd><p>It is recommended for recurring donations. WordPress only runs scheduled jobs when someone visits the site, so on a quiet site charges, follow-up runs and the 15-minute payment re-checks can start late. Set <code>define( 'DISABLE_WP_CRON', true );<\/code> in wp-config.php and have the server request <code>https:\/\/your-site\/wp-cron.php<\/code> every few minutes, or ask your host to do it.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20multisite%3F\"><h3>Does it work on multisite?<\/h3><\/dt>\n<dd><p>Yes, activated on one site or for the whole network. Each site has its own donations, settings, bank and scheduled jobs, and its own choice in Form Settings about whether its donation data is deleted with the plugin. PlanetStudio Payment Gateway has to be active on the same sites.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Renamed to Joedavtian Donations for PlanetStudio Payment Gateway, with the slug and text domain <code>joedavtian-donations-for-planetstudio-payment-gateway<\/code>, for the WordPress.org directory. Coming from an earlier zip, which used the folder <code>donations-for-planetstudio-payment-gateway<\/code>: install this one, deactivate and delete the old one (leave <strong>Delete all donation data when the plugin is deleted<\/strong> unticked), then activate this one. Settings and donations carry over.<\/li>\n<li>Exchange rates are now off until you tick <strong>Combine currencies with daily exchange rates<\/strong> in Form Settings. Until then nothing is downloaded and campaigns show each currency separately. Sites that offer more than one currency and want one combined progress figure should tick it after updating.<\/li>\n<li>A form label reworded with a percent sign in it (for example \"100% of gifts help\") no longer breaks the form or the campaign page.<\/li>\n<li>A font name in quotes in Form Settings now reaches the form's inputs and buttons.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Prepared for WordPress.org: screenshots in the readme, and every Plugin Check warning reviewed and explained in the code. No change in how the plugin behaves.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Recurring donations are no longer charged at most ten an hour. A run keeps charging for 20 seconds and, if charges are still due, continues a minute later, so a busy sign-up day is not charged days late every month.<\/li>\n<li>A donation whose confirmation was interrupted part-way (a crash or a lost database write) is now found within 15 minutes, checked with the bank again and confirmed and receipted if it was paid. It used to stay unconfirmed for good.<\/li>\n<li>Test mode now takes the same path as a real payment, so a test donation refreshes the figures on the donation log and closes a campaign at its goal straight away, as a real one does.<\/li>\n<li>A payment marked failed (the donor returning through the bank's fail page, a declined card) can no longer overwrite a confirmation that arrived at the same moment.<\/li>\n<li>A newly fetched exchange rate that moves more than 25% from the last one is refused and logged, so one bad rate cannot close a campaign at its goal early. Adjust or turn off with the <code>pspgd_exchange_rate_max_change<\/code> filter.<\/li>\n<li>The admin screens name any part of PlanetStudio Payment Gateway this plugin calls that the installed version lacks.<\/li>\n<li>Deactivating or deleting the plugin now clears all of its scheduled jobs; two were left behind before.<\/li>\n<li>Multisite: network activation, deactivation and deletion now reach every site, not only the main one.<\/li>\n<li>For developers: the <code>PSPGD_Admin::CAPABILITY<\/code> constant is now <code>PSPGD_Capability::MANAGE_DONATIONS<\/code>. The capability itself, <code>pspgd_manage_donations<\/code>, is unchanged.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First public version.<\/li>\n<\/ul>","raw_excerpt":"Donation form, fundraising campaigns and recurring donations on saved cards, paid through PlanetStudio Payment Gateway.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/393455","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=393455"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/joedavtian"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=393455"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=393455"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=393455"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=393455"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=393455"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=393455"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}