'product', 'label' => 'SureCart Product Permalinks', /* translators: %s: Home URL */ 'description' => sprintf( 'If you like, you may enter custom structures for your product page URLs here. For example, using products would make your product buy links like %sproducts/sample-product/.', esc_url( home_url( '/' ) ) ), 'options' => [ [ 'value' => 'products', 'label' => 'Default', ], [ 'value' => 'shop', 'label' => 'Shop', ], [ 'value' => 'shop/%sc_collection%', 'display' => 'shop/product-collection/', 'label' => 'Shop base with collection', ], ], ] ); }; $container['surecart.settings.permalinks.buy'] = function () { return new PermalinkSettingService( [ 'slug' => 'buy', 'label' => 'SureCart Instant Checkout Permalinks', /* translators: %s: Home URL */ 'description' => sprintf( 'If you like, you may enter custom structures for your instant checkout URLs here. For example, using buy would make your product buy links like %sbuy/sample-product/.', esc_url( home_url( '/' ) ) ), 'options' => [ [ 'value' => 'buy', 'label' => 'Default', ], [ 'value' => 'purchase', 'label' => 'Purchase', ], ], ] ); }; $container['surecart.settings.permalinks.collection'] = function () { return new PermalinkSettingService( [ 'slug' => 'collection', 'label' => 'SureCart Product Collection Permalinks', /* translators: %s: Home URL */ 'description' => sprintf( 'If you like, you may enter custom structures for your product page URLs here. For example, using collections would make your product collection links like %scollections/sample-collection/.', esc_url( home_url( '/' ) ) ), 'options' => [ [ 'value' => 'collections', 'label' => 'Default', ], [ 'value' => 'product-collections', 'label' => 'Product Collections', ], ], 'sample_preview_text' => 'sample-collection', ] ); }; $container['surecart.settings.permalinks.upsell'] = function () { return new PermalinkSettingService( [ 'slug' => 'upsell', 'label' => 'SureCart Upsell Permalinks', /* translators: %s: Home URL */ 'description' => sprintf( 'If you like, you may enter custom structures for your upsell URLs here. For example, using offers would make your upsell\'s links like %soffers/upsell-id/.', esc_url( home_url( '/' ) ) ), 'options' => [ [ 'value' => 'offer', 'label' => 'Default', ], [ 'value' => 'special-offer', 'label' => 'Special Offer', ], ], ] ); }; } /** * Bootstrap any services if needed. * * @param \Pimple\Container $container Service container. * @return void */ public function bootstrap( $container ) { $container['surecart.settings.permalinks.product']->bootstrap(); $product_base = \SureCart::settings()->permalinks()->getBase( 'product_page' ); // Handle product page with collection support. $permalink = new PermalinkService(); $permalink->url( untrailingslashit( $product_base ) . '/([a-z0-9-]+)[/]?$' ) ->query( 'index.php?sc_product=$matches[1]' ); // We need to make sure WordPress does not try to go to a collection page. if ( preg_match( '`/(.+)(/%sc_collection%)`', $product_base, $matches ) ) { $permalink->removeRules( '`^' . preg_quote( $matches[1], '`' ) . '/([^/]+)$`', '/^(index\.php\?sc_collection)(?!(.*product))/' ); } // Get clean product base without collection. $clean_product_base = preg_replace( '/%sc_collection%\/?/', '', $product_base ); // Rule for default product base. $permalink->addRule( '^' . preg_quote( trim( $clean_product_base, '/' ), '^' ) . '/([^/]+)/?$', 'index.php?sc_product=$matches[1]', 'top' ); // Add default product route. $permalink->create(); $container['surecart.settings.permalinks.buy']->bootstrap(); ( new PermalinkService() ) ->params( [ 'sc_checkout_product_id' ] ) ->url( untrailingslashit( \SureCart::settings()->permalinks()->getBase( 'buy_page' ) ) . '/([a-z0-9-]+)[/]?$' ) ->query( 'index.php?sc_checkout_product_id=$matches[1]' ) ->create(); // Upsell. $container['surecart.settings.permalinks.upsell']->bootstrap(); ( new PermalinkService() ) ->params( [ 'sc_upsell_id' ] ) ->url( untrailingslashit( \SureCart::settings()->permalinks()->getBase( 'upsell_page' ) ) . '/([a-z0-9-]+)[/]?$' ) ->query( 'index.php?sc_upsell_id=$matches[1]' ) ->create(); // Checkout change mode redirection. ( new PermalinkService() ) ->params( [ 'sc_checkout_change_mode', 'sc_checkout_post' ] ) ->url( 'surecart/change-checkout-mode' ) ->query( 'index.php?sc_checkout_change_mode=1&sc_checkout_post=1' ) ->create(); // Redirect. ( new PermalinkService() ) ->params( [ 'sc_redirect' ] ) ->url( 'surecart/redirect' ) ->query( 'index.php?sc_redirect=1' ) ->create(); } }