'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();
}
}