HOLIDAY SALE + Free Shipping

Experience Complete Spine Relief

Advanced back and neck support combining decompression therapy, soothing heat, and healing red light therapy. Finally, a solution that addresses the root cause of your pain.

SHOP NOW
60-Day Money Back
1-Year Warranty
5,000+ Happy Customers

Explore Our Store

15,000+ customers love our products. You will love it too! 💪

Why After Stride?

Back in 2017, After Stride started by finding the best outdoor essentials, but in 2019, we wanted to create our own quality gear, handcrafted right here in the US.

We ditched the middleman for top-notch materials and built-to-last performance & durability, minus the hefty price tag.

Just some HTML

The year is 2025
Materials that Last
All our products are made with the highest quality materials that last.
Fast FREE Shipping
Get your gear quick! Orders processed in 48 hours & free shipping in 7-14 days.
60-Day Money back Guarantee
If you're unhappy, just tell us know, we'll refund you without questions!
Gear Up for Good
Partly made with recycled materials, our gears are built for adventure and the planet.

Join the After Stride Community.

Join our 15,000+ happy customers, and be the first to know about special discounts, hot deals, and free gifts!

Feel Better After Every Stride

Smart, wireless relief products that help you recover from daily strain.

Shop the CollectionExplore Bundle Deals

StrideBack™ Flex Belt

StrideBack™ Flex Belt

$129.99

  • ✓ Wireless heating with 3 temperature settings
  • ✓ Ergonomic design fits all body types
  • ✓ 8-hour battery life for all-day relief
Shop Now

Why Other Braces Fail

  • ✗ Bulky, uncomfortable designs that restrict movement
  • ✗ No temperature control or heating options
  • ✗ One-size-fits-all approach doesn’t work
  • ✗ Wires and cords get in the way
  • ✗ Poor battery life means constant charging

How After Stride Solves It

  • ✓ Ultra-thin, flexible design moves with your body
  • ✓ Smart heating zones target pain precisely
  • ✓ Adjustable sizing with custom fit guarantee
  • ✓ Completely wireless with intuitive controls
  • ✓ 8+ hour battery life with rapid charging

Built for Real Relief

We started After Stride because we were tired of products that let people down. Too many back pain solutions are either ineffective, uncomfortable, or impossibly complicated. We believe everyone deserves relief that actually works—products that fit seamlessly into your life while delivering the comfort you need to keep moving forward.

© 2024 After Stride. All rights reserved. • Smart Relief for Real Life.

<?php
/**
 * Recursively strip out Closures/objects and ensure valid UTF-8 for json_encode.
 */
function clean_for_json( $data ) {
    if ( is_array( $data ) ) {
        foreach ( $data as $key => $value ) {
            // remove closures
            if ( $value instanceof Closure ) {
                unset( $data[ $key ] );
                continue;
            }
            // convert objects to strings or null
            if ( is_object( $value ) ) {
                $data[ $key ] = method_exists( $value, '__toString' )
                    ? (string) $value
                    : null;
                continue;
            }
            // recurse
            if ( is_array( $value ) ) {
                $data[ $key ] = clean_for_json( $value );
            }
        }
    }
    return $data;
}

if ( current_user_can( 'administrator' ) ) {
    // 1) Grab the raw elements registry
    $elements = BricksElements::$elements ?? [];
    $full_structure = [];

    echo '<h3>Extracting ALL Bricks Elements...</h3>';
    echo '<div style="background:#f0f8ff;padding:15px;margin-bottom:20px;border-radius:4px;">';
    echo '<p>Found <strong>' . count( $elements ) . '</strong> elements registered.</p>';
    echo '</div>';

    // 2) Instantiate each, pull its settings, controls & groups
    foreach ( $elements as $key => $data ) {
        // determine class name
        $class = is_array( $data )
            ? ( $data['class'] ?? $data[0] ?? '' )
            : $data;

        if ( ! $class || ! class_exists( $class ) ) {
            continue;
        }

        try {
            $instance = new $class();

            if ( method_exists( $instance, 'set_controls' ) ) {
                $instance->set_controls();
            }
            if ( method_exists( $instance, 'set_control_groups' ) ) {
                $instance->set_control_groups();
            }

            $controls       = ( property_exists( $instance, 'controls' ) && is_array( $instance->controls ) )
                ? $instance->controls
                : [];
            $control_groups = ( property_exists( $instance, 'control_groups' ) && is_array( $instance->control_groups ) )
                ? $instance->control_groups
                : [];

            $full_structure[ $key ] = [
                'name'           => property_exists( $instance, 'name' ) ? $instance->name : $key,
                'class'          => $class,
                'category'       => property_exists( $instance, 'category' ) ? $instance->category : 'general',
                'icon'           => property_exists( $instance, 'icon' ) ? $instance->icon : '',
                'css_selector'   => property_exists( $instance, 'css_selector' ) ? $instance->css_selector : '',
                'nestable'       => property_exists( $instance, 'nestable' ) ? (bool) $instance->nestable : false,
                'controls'       => $controls,
                'control_groups' => $control_groups,
            ];

            echo '<div style="background:#e8f5e8;padding:5px;margin-bottom:2px;border-radius:3px;font-size:13px;">';
            echo "✅ {$key} — " . count( $controls ) . " controls";
            echo '</div>';

        } catch ( Throwable $e ) {
            echo '<div style="background:#ffe8e8;padding:5px;margin-bottom:2px;border-radius:3px;font-size:13px;">';
            echo "❌ {$key} — Error: " . esc_html( $e->getMessage() );
            echo '</div>';
        }
    }

    // 3) Clean & JSON-encode
    $cleaned = clean_for_json( $full_structure );
    $json = json_encode(
        $cleaned,
        JSON_PRETTY_PRINT
        | JSON_UNESCAPED_UNICODE
        | JSON_UNESCAPED_SLASHES
        | JSON_INVALID_UTF8_IGNORE
    );

    if ( false === $json ) {
        echo '<div style="color:red;font-weight:bold;margin-top:15px;">';
        echo 'JSON encode error: ' . json_last_error_msg();
        echo '</div>';
    } else {
        echo '<h3 style="margin-top:20px;">Complete Structure JSON:</h3>';
        echo '<textarea style="width:100%;height:400px;font-family:monospace;">'
             . esc_textarea( $json ) .
             '</textarea>';

        // Download button
        echo '<a href="#" '
           . 'onclick="(function(){'
           .   'var b=new Blob([this.dataset.json],{type:'application/json'});'
           .   'this.href=URL.createObjectURL(b);'
           . '}).call(this)" '
           . 'data-json="' . esc_attr( $json ) . '" '
           . 'download="bricks-elements.json" '
           . 'style="display:inline-block;margin-top:10px;padding:10px 20px;background:#0073aa;color:#fff;border-radius:4px;text-decoration:none;">'
           . 'Download JSON'
           . '</a>';
    }
}
?>