# WordPress/WooCommerce integration

### WordPress Integration

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

```php
<?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**

```php
<!-- 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
<?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](https://app.gitbook.com/o/L1J4IXndMOL7SI7HjRkS/s/vYa98TfDh2GiMvr5EyYo/~/changes/10/basics/integrations/finding-stripe-subscription-ids)

#### Integration with Popular Platforms

**WooCommerce**

```php
<?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
<?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.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://staysignal.gitbook.io/staysignal-docs/integration-guides/wordpress-woocommerce-integration.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
