This is an extension to the WordPress Simple Paypal Shopping Cart by Ruhul Amin
Building on the extreme simplicity and ease of use given by Tips and tricks HQ I needed to add support for multiple currencies for checkout and display.
The approach taken is to extend the plugin to have an extra layer that simply converts the default currency into an alternative currency for display and payments (when required).
The rates are automatically taken from the ECB (http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml) every 24 hours and cached.
Changes to support multi currency.
Modified the handling of the title to suppress multiple display of the title and to allow merging of the two widgets into the sidebar to allow the currency selection widget to appear as part of the cart widget.
The amounts always remain in the default currency on the pages and in the cart. The amount requested from paypal can either be in the selected currency or the default currency depending on the configuration option.
Local currency conversions
The currency conversion is for display, the prices stored in the original posts are unchanged. However to make things more fluid for the customer using an alternative currency there is an option to allow the amount requested for payment from PayPal to be specified in the currency selected by the customer.
When this option is selected it will have the spread applied to it before requesting from PayPal.
When this option is not in use the amounts requested from PayPal will be in the default currency and the customer will pay for the currency conversion.
Exchange rate spreads.
Exchange rate spreads are used by currency changers such as paypal, your bank, and bureau de change to make a small percentage profit on the exchange of currency by adjusting the rates upwards or downwards in their favour.
To allow the site owner to cover this adjustment I have provided a similar facility in the plugin to allow the conversion used to be adjusted in a similar manner.
Automatic rate updates.
To keep with the spirit of the original plugin the exchange rates are automatically collected, every 24hr from the ECB. This is not configurable and will happen behind the scenes using the rates published by the ECB.
Currency symbols are used when available, when not available the currency code will be used.
To cater for the display of the price in different currencies it is necessary to add the showprice: option to the [wp_cart:] shortcode. This is output unstyled into a div with the class wp-cart-item-price to allow styling.
The multiple currency extension has various configuration options;
Convert currencies locally and request payment in selected currency from Paypal
This option will convert the currencies when requesting payment from Paypal. If this is not selected then the amount requested from PayPal will be in the base (default) currency.
Using this option allows specification of a spread when requesting payments from Paypal.
Currency exchange rate spread %
This allows an extra percentage to be applied to amounts converted from the base currency. This can be used to offset the spread (i.e. charges) applied by Paypal to currency conversion. Paypal allows accounts to be have multi-currency sub-account balances.
Show Currency Selection in Shopping Cart
When set the currency selection will be shown in the shopping cart above the Paypal button. When using the Currency Selector widget directly above the shopping cart widget it is possible to merge these by an automatic facility that will hide the tities.
Currency Selector Title
This will be shown as the title of the widget. If blank the main title of the shopping cart will be used.
Currency Selector List Prompt
Prompt to display in front of the drop down currency selection list. This may be blank.
List of available currencies that are to be shown in the drop down list. The currency symbols are built into the plugin and should be automatically displayed when known.
Screenshot of the configuration.
Below is the new area of the configuration; the existing area is dimmed to highlight the changes as described above: