WordPress/WooCommerce integration

WordPress Integration

Add the following code to your theme's functions.php file or use a code snippets plugin:

<?php
add_action('wp_footer', 'add_staysignal_widget_script');

function add_staysignal_widget_script() {
    $site_id = 'YOUR_SITE_ID_HERE'; // Your Site ID will appear here once subscribed
    // Use site_url() for potentially better results than relying on widgetUrl prop
    // $widget_base_url = site_url(); 
    $script_src = 'https://app.staysignal.com/api/widget/script/YOUR_SITE_ID_HERE'; // Escape URL just in case

    // Only output script tag if site_id is valid
    if (!empty($site_id) && $site_id !== 'YOUR_SITE_ID_HERE') { 
?>
<script src="<?php echo esc_url('https://app.staysignal.com/api/widget/script/YOUR_SITE_ID_HERE'); ?>" async></script>
<?php 
    } else {
        // Maybe log an error server-side if ID is missing
        error_log("StaySignal Error: Site ID not configured for script loading.");
        return; // Don't output init script if main script won't load
    }
?>
<script type="text/javascript">
    document.addEventListener('DOMContentLoaded', function() {
        var checkStaySignal = setInterval(function() {
            if (typeof StaySignal !== 'undefined' && StaySignal.init) {
                clearInterval(checkStaySignal);
                StaySignal.init({
                    onComplete: function(payload) { /* Handle completion */ },
                    onError: function(error) { console.error('StaySignal Error:', error); }
                }); // Escape backticks just in case
            }
        }, 100);
    });
</script>
<?php
}

add_shortcode('staysignal_cancel_button', 'staysignal_cancel_button_shortcode');

function staysignal_cancel_button_shortcode($atts) {
    $atts = shortcode_atts(array('sub_id' => '', 'text' => 'Cancel Subscription', 'class' => 'staysignal-cancel-button'), $atts, 'staysignal_cancel_button');
    if (empty($atts['sub_id'])) { return '<!-- StaySignal Button: Missing subscription ID -->'; }
    return '<button class="staysignal-cancel ' . esc_attr($atts['class']) . '" data-subscription_id="' . esc_attr($atts['sub_id']) . '">' . esc_html($atts['text']) . '</button>';
}
?>

Add Cancel Buttons

You can add cancel buttons to your WordPress templates or use shortcodes:

Option 1: Direct HTML in Templates

<!-- In your template file -->
<button class="staysignal-cancel" data-subscription_id="<?php echo esc_attr($subscription_id); ?>">
    Cancel Subscription
</button>

Option 2: Create a Shortcode

<?php
// Add this to your functions.php
function staysignal_cancel_button_shortcode($atts) {
    $atts = shortcode_atts(array(
        'subscription_id' => '',
        'text' => 'Cancel Subscription'
    ), $atts);

    return sprintf(
        '<button class="staysignal-cancel" data-subscription_id="%s">%s</button>',
        esc_attr($atts['subscription_id']),
        esc_html($atts['text'])
    );
}
add_shortcode('staysignal_cancel', 'staysignal_cancel_button_shortcode');

// Usage in posts/pages:
// [staysignal_cancel subscription_id="sub_123456" text="Cancel Your Subscription"]

See more examples for finding Stripe subscription IDs

WooCommerce

<?php
// Getting subscription ID from WooCommerce Subscriptions plugin
function get_subscription_id_for_staysignal($subscription) {
    $stripe_sub_id = get_post_meta($subscription->get_id(), '_stripe_subscription_id', true);
    return $stripe_sub_id;
}

// Usage in template
$subscription_id = get_subscription_id_for_staysignal($subscription);
?>

WordPress - Paid Memberships Pro

<?php
// For Paid Memberships Pro
function get_pmpro_stripe_subscription_id($user_id = null) {
    if (empty($user_id)) {
        $user_id = get_current_user_id();
    }
    
    global $wpdb;
    $subscription_id = $wpdb->get_var(
        $wpdb->prepare(
            "SELECT subscr_id FROM {$wpdb->pmpro_membership_orders} 
             WHERE user_id = %d AND gateway = 'stripe' 
             ORDER BY id DESC LIMIT 1",
            $user_id
        )
    );
    
    return $subscription_id;
}
?>

Need Help?

If you encounter any issues with the integration, please contact our support team.

Last updated