Skip to content

Instantly share code, notes, and snippets.

@JarrydLong
Forked from ideadude/pmpro-australia-gst.php
Last active January 19, 2023 09:28
Show Gist options
  • Save JarrydLong/68f2d0f5e9fc1a2c5669cd462f1c4646 to your computer and use it in GitHub Desktop.
Save JarrydLong/68f2d0f5e9fc1a2c5669cd462f1c4646 to your computer and use it in GitHub Desktop.
Paid Memberships Pro - Australia GST
<?php
/*
Plugin Name: Paid Memberships Pro - Australia GST
Plugin URI: http://www.paidmembershipspro.com/wp/pmpro-australia-gst/
Description: Apply Australia GST to Checkouts with PMPro
Version: .1
Author: Stranger Studios
Author URI: http://www.strangerstudios.com
*/
/*
Tax solution for Australia
This solution assume the GST tax rate of 10% from March 15th, 2017. Ask your accountant how much tax you must charge.
More info: https://www.business.gov.au/info/run/tax/register-for-goods-and-services-tax-gst
Edit as needed, then save this file in your plugins folder and activate it through the plugins page in the WP dashboard.
*/
//add tax info to cost text. this is enabled if the Australia checkbox is checked.
function agst_pmpro_tax($tax, $values, $order)
{
$tax = round((float)$values['price'] * 0.1, 2);
return $tax;
}
function agst_pmpro_level_cost_text($cost, $level)
{
//only applicable for levels > 1
$cost .= __(" Customers in Australia will be charged a 10% GST.", 'pmpro-australia-gst');
return $cost;
}
add_filter("pmpro_level_cost_text", "agst_pmpro_level_cost_text", 10, 2);
//set the default country to Australia
function agst_pmpro_default_country($country) {
return 'AU';
}
add_filter('pmpro_default_country', 'agst_pmpro_default_country');
//add AU checkbox to the checkout page
function agst_pmpro_checkout_boxes()
{
?>
<table id="pmpro_pricing_fields" class="pmpro_checkout" width="100%" cellpadding="0" cellspacing="0" border="0">
<thead>
<tr>
<th>
<?php _e('Australian Residents', 'pmpro-australia-gst');?>
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<div>
<input id="taxregion" name="taxregion" type="checkbox" value="1" <?php if(!empty($_REQUEST['taxregion']) || !empty($_SESSION['taxregion'])) {?>checked="checked"<?php } ?> /> <label for="taxregion" class="pmpro_normal pmpro_label-inline pmpro_clickable"><?php _e('Check this box if your billing address is in Australia.', 'pmpro-australia-gst');?></label>
</div>
</td>
</tr>
</tbody>
</table>
<?php
}
add_action("pmpro_checkout_boxes", "agst_pmpro_checkout_boxes");
//update tax calculation if buyer is Australian
function agst_region_tax_check()
{
//check request and session
if(isset($_REQUEST['taxregion']))
{
//update the session var
$_SESSION['taxregion'] = $_REQUEST['taxregion'];
//not empty? setup the tax function
if(!empty($_REQUEST['taxregion']))
add_filter("pmpro_tax", "agst_pmpro_tax", 10, 3);
}
elseif(!empty($_SESSION['taxregion']))
{
//add the filter
add_filter("pmpro_tax", "agst_pmpro_tax", 10, 3);
}
else
{
//check state and country
if(!empty($_REQUEST['bcountry']))
{
$bcountry = trim(strtolower($_REQUEST['bcountry']));
if($bcountry == "au")
{
//billing address is in AU
add_filter("pmpro_tax", "agst_pmpro_tax", 10, 3);
}
}
}
}
add_action("init", "agst_region_tax_check");
//remove the taxregion session var on checkout
/**
* Read in session vars and add in tax.
*/
function band_my_pmpro_add_general_tax() {
if ( isset( $_REQUEST['taxregion'] ) ) {
$_SESSION['taxregion'] = $_REQUEST['taxregion'];
}
}
add_action( 'pmpro_checkout_before_processing', 'band_my_pmpro_add_general_tax' );
add_action( 'pmpro_after_checkout', 'band_my_pmpro_general_tax_after_checkout' );
function band_my_pmpro_general_tax_session_vars() {
if ( isset( $_REQUEST['taxregion'] ) ) {
$_SESSION['taxregion'] = $_REQUEST['taxregion'];
}
}
add_action( 'pmpro_paypalexpress_session_vars', 'band_my_pmpro_general_tax_session_vars' );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment