{"id":260095,"date":"2026-01-04T16:18:58","date_gmt":"2026-01-04T16:18:58","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/course-flow\/"},"modified":"2026-01-06T16:43:43","modified_gmt":"2026-01-06T16:43:43","slug":"course-flow","status":"publish","type":"plugin","link":"https:\/\/ta.wordpress.org\/plugins\/course-flow\/","author":23386396,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.0","stable_tag":"1.0.0","tested":"6.9.4","requires":"6.7","requires_php":"7.4","requires_plugins":null,"header_name":"Course Flow \u2013 Sell Courses with Stripe (No WooCommerce)","header_author":"Pawel Borowiec","header_description":"Accept Stripe payments in Tutor LMS, LearnPress and LearnDash without WooCommerce.","assets_banners_color":"5758ed","last_updated":"2026-01-06 16:43:43","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/pawelborowiec.com\/course-flow","header_author_uri":"https:\/\/pawelborowiec.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":170,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"pawelborowiec","date":"2026-01-06 16:43:43"}},"upgrade_notice":{"1.0.0":"<p>First stable release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.gif":{"filename":"icon-128x128.gif","revision":3435406,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.gif":{"filename":"icon-256x256.gif","revision":3435406,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3434611,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3434611,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.gif":{"filename":"screenshot-1.gif","revision":3432163,"resolution":"1","location":"assets","locale":""},"screenshot-2.gif":{"filename":"screenshot-2.gif","revision":3432163,"resolution":"2","location":"assets","locale":""},"screenshot-3.gif":{"filename":"screenshot-3.gif","revision":3432163,"resolution":"3","location":"assets","locale":""},"screenshot-4.gif":{"filename":"screenshot-4.gif","revision":3432163,"resolution":"4","location":"assets","locale":""},"screenshot-5.gif":{"filename":"screenshot-5.gif","revision":3432163,"resolution":"5","location":"assets","locale":""},"screenshot-6.gif":{"filename":"screenshot-6.gif","revision":3432163,"resolution":"6","location":"assets","locale":""}},"screenshots":{"1":"Course Flow settings page for Stripe configuration.","2":"Button settings page with visual customization options.","3":"Example course page using a Course Flow purchase shortcode.","4":"Image-based purchase button configuration.","5":"Courses admin listing with generated shortcodes.","6":"Stripe Checkout success \/ confirmation page."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[10796,40048,2195,5349,21983],"plugin_category":[45],"plugin_contributors":[253268],"plugin_business_model":[],"class_list":["post-260095","plugin","type-plugin","status-publish","hentry","plugin_tags-learndash","plugin_tags-learnpress","plugin_tags-lms","plugin_tags-stripe","plugin_tags-tutor","plugin_category-ecommerce","plugin_contributors-pawelborowiec","plugin_committers-pawelborowiec"],"banners":{"banner":"https:\/\/ps.w.org\/course-flow\/assets\/banner-772x250.png?rev=3434611","banner_2x":"https:\/\/ps.w.org\/course-flow\/assets\/banner-1544x500.png?rev=3434611","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/course-flow\/assets\/icon-128x128.gif?rev=3435406","icon_2x":"https:\/\/ps.w.org\/course-flow\/assets\/icon-256x256.gif?rev=3435406","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/course-flow\/assets\/screenshot-1.gif?rev=3432163","caption":"Course Flow settings page for Stripe configuration."},{"src":"https:\/\/ps.w.org\/course-flow\/assets\/screenshot-2.gif?rev=3432163","caption":"Button settings page with visual customization options."},{"src":"https:\/\/ps.w.org\/course-flow\/assets\/screenshot-3.gif?rev=3432163","caption":"Example course page using a Course Flow purchase shortcode."},{"src":"https:\/\/ps.w.org\/course-flow\/assets\/screenshot-4.gif?rev=3432163","caption":"Image-based purchase button configuration."},{"src":"https:\/\/ps.w.org\/course-flow\/assets\/screenshot-5.gif?rev=3432163","caption":"Courses admin listing with generated shortcodes."},{"src":"https:\/\/ps.w.org\/course-flow\/assets\/screenshot-6.gif?rev=3432163","caption":"Stripe Checkout success \/ confirmation page."}],"raw_content":"<!--section=description-->\n<p><strong>Course Flow<\/strong> is a free and lightweight WordPress plugin that lets you sell your online courses directly with <strong>Stripe Checkout<\/strong> \u2014 without the need for WooCommerce. It integrates seamlessly with <strong>Tutor LMS<\/strong>, <strong>LearnPress<\/strong>, and <strong>LearnDash<\/strong> to offer a simple and fast checkout experience for course creators.<\/p>\n\n<p>If you\u2019re tired of slow or complicated WooCommerce setups, <strong>Course Flow<\/strong> gives you a direct and conflict-free way to start selling your courses online.<br \/>\nNo extra plugins. No conflicts. No slow checkouts. Just fast, secure payments with Stripe.<\/p>\n\n<h3>\ud83d\udca1 Why course creators choose Course Flow<\/h3>\n\n<ul>\n<li><strong>No WooCommerce required<\/strong> \u2014 avoids unnecessary complexity and plugin conflicts.<\/li>\n<li><strong>Fast setup<\/strong> \u2014 configure Stripe keys and add a shortcode to start accepting payments.<\/li>\n<li><strong>Direct Stripe Checkout<\/strong> \u2014 secure, hosted checkout handled entirely by Stripe.<\/li>\n<li><strong>Automatic course enrollment<\/strong> after successful payment.<\/li>\n<li><strong>Optional WordPress user account creation<\/strong> for new customers.<\/li>\n<li><strong>Fully customizable buttons<\/strong> \u2014 text, colors, and even image-based purchase buttons.<\/li>\n<li><strong>Lightweight architecture<\/strong> \u2014 minimal frontend and admin assets.<\/li>\n<li><strong>Translation-ready<\/strong> with included <code>.pot<\/code> file.<\/li>\n<\/ul>\n\n<h3>\ud83e\udde9 Key Features<\/h3>\n\n<ul>\n<li>Direct <strong>Stripe Checkout<\/strong> integration (no WooCommerce dependency).<\/li>\n<li>Supports <strong>Tutor LMS<\/strong>, <strong>LearnPress<\/strong>, and <strong>LearnDash<\/strong> (requires one active LMS).<\/li>\n<li>One-time payments via Stripe Checkout.<\/li>\n<li>Automatic course enrollment after successful payment.<\/li>\n<li>Optional automatic WordPress user account creation.<\/li>\n<li>Secure Stripe webhook handling (<code>checkout.session.completed<\/code>).<\/li>\n<li>Test mode and live mode support.<\/li>\n<li>Shortcodes for easy setup:\n\n<ul>\n<li><code>[courseflow_buycourse id=\"123\"]<\/code><\/li>\n<li><code>[courseflow_course id=\"123\"]<\/code><\/li>\n<li><code>[courseflow_imagebuycourse id=\"123\"]<\/code><\/li>\n<\/ul><\/li>\n<li>Visual button customization (text, colors, hover effects, layout).<\/li>\n<li>Image-based purchase buttons.<\/li>\n<li>Admin course list with ready-to-copy shortcodes.<\/li>\n<li>Secure REST API (<code>course-flow\/v1<\/code>) with capability and nonce validation.<\/li>\n<li>Optional plugin telemetry (disabled by default).<\/li>\n<li>Fully translatable (<code>.pot<\/code> file included).<\/li>\n<\/ul>\n\n<p>\u26a1 Performance &amp; Security\nCourse Flow is built for speed. It loads only minimal scripts, uses secure REST API calls, and relies on Stripe\u2019s own hosted checkout page for PCI compliance.<br \/>\nAll webhook events are validated via <code>checkout.session.completed<\/code>, ensuring that course enrollments are always secure and verified.<\/p>\n\n<h3>Requirements<\/h3>\n\n<ul>\n<li>WordPress 6.7 or newer<\/li>\n<li>PHP 7.4 or newer<\/li>\n<li>One active LMS plugin:\n\n<ul>\n<li>Tutor LMS<\/li>\n<li>LearnPress<\/li>\n<li>LearnDash<\/li>\n<\/ul><\/li>\n<li>Stripe account (Publishable Key, Secret Key, Webhook Secret)<\/li>\n<li>HTTPS enabled<\/li>\n<\/ul>\n\n<h3>Configuring Stripe Webhooks<\/h3>\n\n<p>To enable automatic enrollment after payment:<\/p>\n\n<ol>\n<li>Open Stripe Dashboard \u2192 Developers \u2192 Webhooks.<\/li>\n<li>Add endpoint:<br \/>\n   https:\/\/your-site.com\/wp-json\/course-flow\/v1\/webhook<\/li>\n<li>Select event: <code>checkout.session.completed<\/code><\/li>\n<li>Copy the webhook secret and paste it into plugin settings.<\/li>\n<li>Use the <strong>TEST CONNECTION<\/strong> button in admin to validate configuration.<\/li>\n<\/ol>\n\n<h3>Shortcodes<\/h3>\n\n<ul>\n<li><code>[courseflow_buycourse id=\"123\"]<\/code> \u2014 standard buy button<\/li>\n<li><code>[courseflow_course id=\"123\"]<\/code> \u2014 alternative purchase button<\/li>\n<li><code>[courseflow_imagebuycourse id=\"123\"]<\/code> \u2014 image-based buy button<\/li>\n<\/ul>\n\n<h3>REST API<\/h3>\n\n<p>Namespace: <code>course-flow\/v1<\/code><\/p>\n\n<ul>\n<li><code>POST \/create-checkout<\/code><\/li>\n<li><code>POST \/webhook<\/code><\/li>\n<li><code>POST \/test-connection<\/code> (admin only)<\/li>\n<li><code>POST \/save-settings<\/code> (admin only)<\/li>\n<\/ul>\n\n<p>Protected endpoints validate user capabilities and nonces.<\/p>\n\n<h3>Admin Pages<\/h3>\n\n<p>Settings \u2014 Configuration of Stripe API keys, currency, success page, account creation behavior and optional plugin telemetry.<br \/>\nCourses \u2014 List of detected LMS courses with IDs and available purchase shortcodes.<br \/>\nButton Settings \u2014 Visual customization of purchase buttons.<br \/>\nImage Button Settings \u2014 Management of image-based purchase buttons.<\/p>\n\n<h3>Data Privacy<\/h3>\n\n<p>Course Flow includes an optional plugin telemetry feature.<\/p>\n\n<p>When explicitly enabled by an administrator, the plugin may transmit limited, non-personal plugin metadata (such as site URL and plugin version) to the plugin author for diagnostic and compatibility purposes.<\/p>\n\n<p>This feature is:\n- Disabled by default\n- Explicitly opt-in\n- Does not collect personal or user-identifiable data<\/p>\n\n<p>The plugin functions fully without enabling this option.<\/p>\n\n<p>More information can be found in the author\u2019s privacy policy:<br \/>\nhttps:\/\/dev.pawelborowiec.com\/course-flow\/privacy-policy.html<\/p>\n\n<h3>External Services<\/h3>\n\n<h4>Stripe<\/h4>\n\n<p>Stripe is used to process payments via Stripe Checkout.<\/p>\n\n<ul>\n<li>Stripe JavaScript library is loaded from https:\/\/js.stripe.com\/v3\/<\/li>\n<li>Stripe API is used for checkout session creation and webhook handling.<\/li>\n<li>Payment data is transmitted directly to Stripe during checkout.<\/li>\n<\/ul>\n\n<p>Service Provider: Stripe, Inc.<br \/>\nTerms: https:\/\/stripe.com\/legal<br \/>\nPrivacy: https:\/\/stripe.com\/privacy<\/p>\n\n<h3>Localization<\/h3>\n\n<ul>\n<li>Translation-ready with included <code>.pot<\/code> file.<\/li>\n<li>Translation files should be placed in the <code>\/languages\/<\/code> directory.<\/li>\n<li>Default language: English.<\/li>\n<\/ul>\n\n<h3>Included Libraries<\/h3>\n\n<ul>\n<li>Stripe PHP SDK (MIT)<\/li>\n<li>Select2 (MIT)<\/li>\n<li>Bundled local fonts (OFL)<\/li>\n<\/ul>\n\n<h3>License<\/h3>\n\n<p>GPLv2 or later<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload and activate the plugin.<\/li>\n<li>Go to <strong>Dashboard \u2192 Course Flow \u2192 Settings<\/strong>.<\/li>\n<li>Enter your Stripe Publishable Key, Secret Key, and Webhook Secret.<\/li>\n<li>Configure a Stripe webhook pointing to:<br \/>\n   https:\/\/your-site.com\/wp-json\/course-flow\/v1\/webhook<\/li>\n<li>Optionally customize buttons in <strong>Button Settings<\/strong> or <strong>Image Button Settings<\/strong>.<\/li>\n<li>Place a purchase shortcode on a course page.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id='do%20i%20need%20woocommerce%3F'><h3>Do I need WooCommerce?<\/h3><\/dt>\n<dd><p>No.<\/p><\/dd>\n<dt id='%F0%9F%92%B3%20can%20i%20use%20course%20flow%20without%20woocommerce%3F'><h3>\ud83d\udcb3 Can I use Course Flow without WooCommerce?<\/h3><\/dt>\n<dd><p>Yes! <strong>Course Flow<\/strong> is designed specifically to sell courses without WooCommerce. It connects directly to Stripe Checkout for a simple, fast, and conflict-free experience.<\/p><\/dd>\n<dt id='%F0%9F%8E%93%20which%20lms%20plugins%20are%20supported%3F'><h3>\ud83c\udf93 Which LMS plugins are supported?<\/h3><\/dt>\n<dd><p>Course Flow supports <strong>Tutor LMS<\/strong>, <strong>LearnPress<\/strong>, and <strong>LearnDash<\/strong>. Only one needs to be active for the plugin to work.<\/p><\/dd>\n<dt id='%F0%9F%94%92%20is%20course%20flow%20secure%3F'><h3>\ud83d\udd12 Is Course Flow secure?<\/h3><\/dt>\n<dd><p>Absolutely. All transactions are handled securely by <strong>Stripe Checkout<\/strong> and verified through Stripe webhooks before course enrollment.<\/p><\/dd>\n<dt id='%F0%9F%A7%A0%20how%20do%20i%20install%20course%20flow%3F'><h3>\ud83e\udde0 How do I install Course Flow?<\/h3><\/dt>\n<dd><p>Simply install it from your WordPress dashboard \u2192 Plugins \u2192 Add New \u2192 search for \u201cCourse Flow\u201d.<\/p><\/dd>\n<dt id='%F0%9F%8C%8D%20is%20course%20flow%20translatable%3F'><h3>\ud83c\udf0d Is Course Flow translatable?<\/h3><\/dt>\n<dd><p>Yes, a <code>.pot<\/code> file is included so you can translate it into any language.<\/p><\/dd>\n<dt id='%F0%9F%9A%80%20what%20makes%20course%20flow%20different%20from%20other%20stripe%20plugins%3F'><h3>\ud83d\ude80 What makes Course Flow different from other Stripe plugins?<\/h3><\/dt>\n<dd><p>It\u2019s <strong>WooCommerce-free<\/strong>, <strong>lightweight<\/strong>, and built specifically for course creators who want fast, secure payments without bloat.<\/p><\/dd>\n<dt id='%F0%9F%93%8D%20where%20can%20i%20find%20course%20flow%20plugin%3F'><h3>\ud83d\udccd Where can I find Course Flow plugin?<\/h3><\/dt>\n<dd><p>You can find and download <strong>Course Flow WordPress plugin<\/strong> from the official WordPress.org repository or directly from your dashboard by searching for \u201cCourse Flow\u201d.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<p>Initial release.<\/p>","raw_excerpt":"Sell online courses with Stripe using Course Flow \u2014 the fastest, lightweight WordPress plugin for Stripe Checkout integration with Tutor LMS, LearnPre &hellip;","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/260095","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=260095"}],"author":[{"embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/pawelborowiec"}],"wp:attachment":[{"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=260095"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=260095"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=260095"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=260095"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=260095"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=260095"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}