Skip to content
Merged

Dev #369

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CHANGELOG.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
== Changelog ==
= 7.0.9 - Aug 8, 2026 =
- **WordPress 7.0 compatibility.** The new WordPress version is released. The Ecwid ecommerce shopping cart plugin is ready for the new release — everything works well in your WordPress admin and storefront pages. Feel free to upgrade your site to WordPress 7.0.
- **Plugin code improvements for better security. Ecwid ecommerce shopping cart plugin update recommended.** Thanks to Alexander Jurkschat for responsibly reporting the issue.

= 7.0.8 - Feb 13, 2026 =
- **Plugin code improvements for better security. Ecwid ecommerce shopping cart plugin update recommended.**

= 7.0.7 - Jan 29, 2026 =
- **Plugin code improvements for better security. Ecwid ecommerce shopping cart plugin update recommended.**

Expand Down
4 changes: 2 additions & 2 deletions ecwid-shopping-cart.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
Description: Ecwid by Lightspeed is a full-featured shopping cart. It can be easily integrated with any Wordpress blog and takes less than 5 minutes to set up.
Text Domain: ecwid-shopping-cart
Author: Ecwid Ecommerce
Version: 7.0.7
Version: 7.0.10
Author URI: https://go.lightspeedhq.com/ecwid-site
License: GPLv2 or later
*/
Expand Down Expand Up @@ -2297,7 +2297,7 @@ function ecwid_admin_post_connect()
} else if (!isset($_GET['reconnect'])) {
wp_safe_redirect(Ecwid_Admin::get_dashboard_url() . '&oauth=no');
} else {
wp_safe_redirect(Ecwid_Admin::get_dashboard_url() . '&reconnect&connection_error');
wp_safe_redirect( Ecwid_Admin_Main_Page::get_forced_reconnect_url( '&connection_error' ) );
}
exit();
}
Expand Down
4 changes: 4 additions & 0 deletions includes/class-ec-store-admin-access.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@ public function save_custom_user_profile_fields( $user_id ) {
return;
}

if ( ! $this->can_grant_access() ) {
return;
}

$user = new WP_User( $user_id );

if ( ! empty( $_POST['ec_store_admin_access'] ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.NonceVerification.Missing
Expand Down
39 changes: 38 additions & 1 deletion includes/class-ecwid-admin-main-page.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@ class Ecwid_Admin_Main_Page {
const PAGE_HASH_UPGRADE = 'billing:feature=sso&plan=ecwid_venture';
const PAGE_HASH_COMPLETE_REGISTRATION = 'complete-registration';

const NONCE_RECONNECT = 'ec_forced_reconnect';

public function do_page() {
if ( self::is_forced_reconnect() ) {
if ( self::is_forced_reconnect() && self::is_verified_reconnect_request() ) {
ecwid_update_store_id( ecwid_get_demo_store_id() );
}

Expand Down Expand Up @@ -175,6 +177,41 @@ public static function is_forced_reconnect() {
return isset( $_GET['reconnect'] );
}

/**
* Tells whether the current forced reconnect request is allowed to reset
* the store to the demo one. Guards the destructive part of the flow
* against CSRF: displaying the connect page stays nonce-free, resetting
* the store id does not.
*/
public static function is_verified_reconnect_request() {
if ( ! current_user_can( Ecwid_Admin::get_capability() ) ) {
return false;
}

if ( ! isset( $_GET['_wpnonce'] ) ) {
return false;
}

return (bool) wp_verify_nonce(
sanitize_text_field( wp_unslash( $_GET['_wpnonce'] ) ),
self::NONCE_RECONNECT
);
}

/**
* Builds a nonce-signed url that forces the reconnect flow.
*
* Returns a raw (unescaped) url, so it is safe to pass to wp_safe_redirect()
* and to javascript. Escape it with esc_url() when printing into markup.
*
* @param string $extra_args optional query string appended to the url, e.g. '&connection_error'.
*/
public static function get_forced_reconnect_url( $extra_args = '' ) {
return Ecwid_Admin::get_dashboard_url()
. '&reconnect' . $extra_args
. '&_wpnonce=' . wp_create_nonce( self::NONCE_RECONNECT );
}

protected static function _get_upgrade_page_hash() {
return 'billing:feature=sso&plan=ecwid_venture';
}
Expand Down
40 changes: 38 additions & 2 deletions includes/class-ecwid-oauth.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ class Ecwid_OAuth {

const OPTION_JUST_CONNECTED = 'ecwid_just_connected';

const NONCE_DISCONNECT = 'ec_disconnect';

const SCOPE_READ_CATALOG = 'read_catalog';
const SCOPE_READ_STORE_PROFILE = 'read_store_profile';
const SCOPE_UPDATE_STORE_PROFILE = 'update_store_profile';
Expand Down Expand Up @@ -78,6 +80,13 @@ public function get_sso_reconnect_dialog_url() {
}

public function process_authorization() {
if ( ! current_user_can( Ecwid_Admin::get_capability() ) ) {
wp_die(
esc_html__( 'You do not have sufficient permissions to connect the store.', 'ecwid-shopping-cart' ),
403
);
}

$reconnect = isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'ec_oauth_reconnect';

if ( isset( $_REQUEST['error'] ) || ! isset( $_REQUEST['code'] ) ) {
Expand All @@ -97,7 +106,11 @@ public function process_authorization() {
);
}

wp_safe_redirect( Ecwid_Admin::get_dashboard_url() . '&connection_error' . ( $reconnect ? '&reconnect' : '' ) );
if ( $reconnect ) {
wp_safe_redirect( Ecwid_Admin_Main_Page::get_forced_reconnect_url( '&connection_error' ) );
} else {
wp_safe_redirect( Ecwid_Admin::get_dashboard_url() . '&connection_error' );
}
exit;
}

Expand Down Expand Up @@ -180,13 +193,32 @@ public function process_authorization() {
}

public function disconnect_store() {
if ( ! current_user_can( Ecwid_Admin::get_capability() ) ) {
wp_die(
esc_html__( 'You do not have sufficient permissions to disconnect the store.', 'ecwid-shopping-cart' ),
403
);
}

check_admin_referer( self::NONCE_DISCONNECT );

update_option( 'ecwid_store_id', ecwid_get_demo_store_id() );
$this->api->save_token( '' );

wp_safe_redirect( Ecwid_Admin::get_dashboard_url() );
exit;
}

/**
* Builds a nonce-signed store disconnect url.
*
* Returns a raw (unescaped) url. Escape it with esc_url() when printing into markup.
*/
public static function get_disconnect_url() {
return admin_url( 'admin-post.php?action=ec_disconnect' )
. '&_wpnonce=' . wp_create_nonce( self::NONCE_DISCONNECT );
}

public function get_safe_scopes_array( $scopes ) {
if ( ! isset( $scopes ) || empty( $scopes ) ) {
return $this->_get_default_scopes_array();
Expand Down Expand Up @@ -280,7 +312,11 @@ protected function trigger_auth_error( $mode = 'default' ) {
EcwidPlatform::report_error( $last_error );
}

wp_safe_redirect( Ecwid_Admin::get_dashboard_url() . '&connection_error' . ( $mode == self::MODE_RECONNECT ? '&reconnect' : '' ) );
if ( $mode == self::MODE_RECONNECT ) {
wp_safe_redirect( Ecwid_Admin_Main_Page::get_forced_reconnect_url( '&connection_error' ) );
} else {
wp_safe_redirect( Ecwid_Admin::get_dashboard_url() . '&connection_error' );
}
exit();
}

Expand Down
2 changes: 2 additions & 0 deletions includes/class-ecwid-product-popup.php
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,8 @@ public function add_scripts() {
'lastPage' => __( 'Last Page', 'ecwid-shopping-cart' ),
);

$data['reconnect_url'] = Ecwid_Admin_Main_Page::get_forced_reconnect_url( '&reason=spw' );

wp_localize_script( 'ecwid-product-popup', 'ecwidSpwParams', $data );
}

Expand Down
7 changes: 4 additions & 3 deletions includes/importer/class-ecwid-import-page.php
Original file line number Diff line number Diff line change
Expand Up @@ -156,9 +156,10 @@ public function do_reconnect() {
}

wp_safe_redirect(
'admin.php?page=' . Ecwid_Admin::ADMIN_SLUG
. '&reconnect&return-url=' . rawurlencode( $url )
. '&scope=create_catalog+update_catalog&do_reconnect=1'
Ecwid_Admin_Main_Page::get_forced_reconnect_url(
'&return-url=' . rawurlencode( $url )
. '&scope=create_catalog+update_catalog&do_reconnect=1'
)
);
}

Expand Down
2 changes: 1 addition & 1 deletion js/product-popup.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jQuery(document).ready(function () {

openPopup = function () {
if (ecwidSpwParams && typeof ecwidSpwParams.no_token != 'undefined') {
location.href = 'admin.php?page=ec-store&reconnect&reason=spw';
location.href = ecwidSpwParams.reconnect_url;
return false;
}

Expand Down
11 changes: 9 additions & 2 deletions readme.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ Tags: ecommerce, e-commerce, storefront, shopping cart, online store
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Requires at least: 4.4
Tested up to: 6.9
Stable tag: 7.0.7
Tested up to: 7.0
Stable tag: 7.0.9

Powerful, easy to use ecommerce shopping cart for WordPress. Sell on Facebook and Instagram. iPhone & Android apps. Superb support.

Expand Down Expand Up @@ -152,6 +152,13 @@ You can use Ecwid’s built-in import tools to copy your store products from any
* [Ecwid Help Center](http://help.ecwid.com "Ecwid Help")

== Changelog ==
= 7.0.9 - Aug 8, 2026 =
- **WordPress 7.0 compatibility.** The new WordPress version is released. The Ecwid ecommerce shopping cart plugin is ready for the new release — everything works well in your WordPress admin and storefront pages. Feel free to upgrade your site to WordPress 7.0.
- **Plugin code improvements for better security. Ecwid ecommerce shopping cart plugin update recommended.** Thanks to Alexander Jurkschat for responsibly reporting the issue.

= 7.0.8 - Feb 13, 2026 =
- **Plugin code improvements for better security. Ecwid ecommerce shopping cart plugin update recommended.**

= 7.0.7 - Jan 29, 2026 =
- **Plugin code improvements for better security. Ecwid ecommerce shopping cart plugin update recommended.**

Expand Down
2 changes: 1 addition & 1 deletion templates/admin-footer.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<h4 class="ecwid-admin-footer-title"><?php echo __( 'Store ID', 'ecwid-shopping-cart' ); ?> <?php echo esc_html( get_ecwid_store_id() ); ?></h4>
<div class="ecwid-admin-footer-text">
<?php echo esc_html( sprintf( __( 'Want to connect another %s store?', 'ecwid-shopping-cart' ), Ecwid_Config::get_brand() ) ); ?>
<?php echo wp_kses_post( sprintf( __( '<a %s>Reconnect</a>', 'ecwid-shopping-cart' ), 'href="' . Ecwid_Admin::get_dashboard_url() . '&reconnect"' ) ); ?>
<?php echo wp_kses_post( sprintf( __( '<a %s>Reconnect</a>', 'ecwid-shopping-cart' ), 'href="' . esc_url( Ecwid_Admin_Main_Page::get_forced_reconnect_url() ) . '"' ) ); ?>
</div>
</div>
<?php } ?>
Expand Down
50 changes: 0 additions & 50 deletions templates/admin/developers.php
Original file line number Diff line number Diff line change
Expand Up @@ -368,32 +368,6 @@
<div class="named-area__additional"></div>
</div>
<div class="named-area__body">
<div class="a-card a-card--normal">
<div class="a-card__paddings">
<div class="iconable-block">
<div class="iconable-block__infographics">
<span class="iconable-block__icon">
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 56 56"><defs><style>.affiliate-cls-2{fill:#fbd88e}.affiliate-cls-3{fill:#6d839b}</style></defs><circle cx="28" cy="28" r="21" fill="#ecf5fe"/><path class="affiliate-cls-2" d="M28 12a7.31 7.31 0 0 1 7 7.57v2.16c0 4.19-3.13 8.69-7 8.69s-7-4.42-7-8.68v-2.16A7.3 7.3 0 0 1 28 12"/><path class="affiliate-cls-3" d="M28 31.44c-4.58 0-8-5.12-8-9.7v-2.16A8.31 8.31 0 0 1 28 11a8.31 8.31 0 0 1 8 8.57v2.17c0 4.58-3.42 9.7-8 9.7ZM28 13a6.31 6.31 0 0 0-6 6.57v2.17c0 3.56 2.62 7.7 6 7.7s6-4.14 6-7.7v-2.16A6.32 6.32 0 0 0 28 13Z"/><path class="affiliate-cls-2" d="M43.38 42.27v-2.5a5.55 5.55 0 0 0-3.5-5.15l-6.08-2.17h-.06a8.34 8.34 0 0 1-5.74 2 8.39 8.39 0 0 1-5.72-2l-.08-.07-6.08 2.17a5.55 5.55 0 0 0-3.5 5.15v2.5A20.94 20.94 0 0 0 28 49a20.94 20.94 0 0 0 15.38-6.73Z"/><path class="affiliate-cls-3" d="M28 50a22.06 22.06 0 0 1-16.11-7l-.27-.29v-2.94a6.51 6.51 0 0 1 4.13-6.08l6.71-2.4.45.45A7.42 7.42 0 0 0 28 33.49a7.41 7.41 0 0 0 5-1.71l.53-.53.56.26 6.08 2.17a6.52 6.52 0 0 1 4.16 6.09v2.89l-.27.29A22.06 22.06 0 0 1 28 50Zm-14.38-8.13a19.93 19.93 0 0 0 28.76 0v-2.1a4.53 4.53 0 0 0-2.86-4.22l-5.5-2a9.54 9.54 0 0 1-6 1.9 9.64 9.64 0 0 1-6-1.9l-5.53 2a4.52 4.52 0 0 0-2.83 4.21Z"/><path class="affiliate-cls-3" d="M51 46a5 5 0 0 0-2.75.83l-4-4a22 22 0 0 0 0-29.66l4-4a5 5 0 1 0-1.42-1.42l-4 4a22 22 0 0 0-29.66 0l-4-4a5 5 0 1 0-1.42 1.42l4 4a22 22 0 0 0 0 29.66l-4 4a5 5 0 1 0 1.42 1.42l4-4a22 22 0 0 0 29.66 0l4 4A5 5 0 1 0 51 46Zm-15.66.59-.21.08c-.49.18-1 .36-1.49.51l-.51.13c-.42.11-.85.23-1.28.31s-.62.1-.93.14-.63.11-1 .14c-.65.06-1.31.1-2 .1s-1.32 0-2-.1c-.32 0-.63-.09-1-.14s-.62-.08-.93-.14-.86-.2-1.28-.31l-.51-.13c-.51-.15-1-.33-1.49-.51l-.21-.08A20 20 0 0 1 9.41 35.34c0-.07-.05-.14-.08-.2-.18-.5-.36-1-.51-1.5l-.13-.5c-.11-.43-.23-.86-.31-1.29s-.1-.62-.14-.93-.11-.63-.14-1C8 29.32 8 28.66 8 28s0-1.32.1-2c0-.32.09-.63.14-1s.08-.62.14-.93.2-.86.31-1.29l.13-.5c.15-.51.33-1 .51-1.5 0-.06.05-.13.08-.2A20 20 0 0 1 20.66 9.41l.21-.08c.49-.18 1-.36 1.49-.51l.51-.13c.42-.11.85-.23 1.28-.31s.62-.1.93-.14.63-.11 1-.14C26.68 8 27.34 8 28 8s1.32 0 2 .1c.32 0 .63.09 1 .14s.62.08.93.14.86.2 1.28.31l.51.13c.51.15 1 .33 1.49.51l.21.08a20 20 0 0 1 11.17 11.25c0 .07 0 .14.08.2.18.5.36 1 .51 1.5 0 .16.08.34.13.5.11.43.23.86.31 1.29s.1.62.14.93.11.63.14 1c.06.65.1 1.31.1 2s0 1.32-.1 2c0 .32-.09.63-.14 1s-.08.62-.14.93-.2.86-.31 1.29l-.13.5c-.15.51-.33 1-.51 1.5 0 .06-.05.13-.08.2a20 20 0 0 1-11.25 11.09Z"/></svg>
</span>
</div>
<div class="iconable-block__content">
<div class="cta-block">
<div class="cta-block__central">
<div class="cta-block__title">
<?php echo esc_html__( 'Become an Ecwid Referral Partner', 'ecwid-shopping-cart' ); ?>
</div>
<div class="cta-block__content">
<?php echo esc_html__( 'Recommend Ecwid within your network and get a 20% lifetime commission for every referral that creates an account through your link.', 'ecwid-shopping-cart' ); ?>
</div>
</div>
<div class="cta-block__cta">
<a href="https://www.ecwid.com/partners/referral?utm_source=wp-plugin" target="_blank" type="button" class="btn btn-default btn-medium"> <span><?php echo esc_html__( 'Learn More', 'ecwid-shopping-cart' ); ?></span> </a>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="a-card a-card--normal">
<div class="a-card__paddings">
<div class="iconable-block">
Expand Down Expand Up @@ -486,30 +460,6 @@
</div>
</div>
</div>
<div class="a-card a-card--normal">
<div class="a-card__paddings">
<div class="iconable-block">
<div class="iconable-block__infographics"> <span class="iconable-block__icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 80 80"><path fill="#FFF" d="M11 37.11v33.4c0 1.93 1.44 3.49 3.22 3.49h52.56c1.78 0 3.22-1.56 3.22-3.49V37"/><path fill-rule="evenodd" clip-rule="evenodd" fill="#FBD88E" d="M46 49.34c0-2.4 2.02-4.34 4.5-4.34h9.02c2.49 0 4.5 1.95 4.5 4.34v20.32c0 2.4-2.02 4.34-4.5 4.34H50.5c-2.49 0-4.5-1.95-4.5-4.34V49.34z"/><path fill="#FE948D" d="M8 28l4.64-14c0-2.22 2.14-2 2.79-2h8.12L21 28"/><path fill="#FBD88E" d="M21 28l2.54-16h11.39L34 28"/><path fill="#CBE87C" d="M34 28l.93-16h11.14L47 28"/><path fill="#BCDEFA" d="M47 28l-.93-16h11.39L60 28"/><path fill="#FE948D" d="M60 28l-2.54-16h8.12c.64 0 2.79-.22 2.79 2L73 28"/><path fill="#ECF5FE" d="M17 49.72c0-2.61 1.92-4.72 4.33-4.72h14.35c2.39 0 4.33 2.11 4.33 4.72v12.56c0 2.61-1.92 4.72-4.33 4.72H21.33C18.94 67 17 64.89 17 62.28V49.72z"/><path fill="#7E94AA" d="M35.67 68H21.33C18.39 68 16 65.43 16 62.28V49.72c0-3.15 2.39-5.72 5.33-5.72h14.35c2.94 0 5.33 2.57 5.33 5.72v12.56C41 65.43 38.61 68 35.67 68zM21.33 46C19.49 46 18 47.67 18 49.72v12.56c0 2.05 1.49 3.72 3.33 3.72h14.35c1.83 0 3.33-1.67 3.33-3.72V49.72c0-2.05-1.49-3.72-3.33-3.72H21.33z"/><path fill-rule="evenodd" clip-rule="evenodd" fill="#ECF5FE" d="M17 49.72c0-2.61 1.92-4.72 4.33-4.72h14.35c2.39 0 4.33 2.11 4.33 4.72v12.56c0 2.61-1.92 4.72-4.33 4.72H21.33C18.94 67 17 64.89 17 62.28V49.72z"/><path fill="#7E94AA" d="M52.61 61h-3.23c-.76 0-1.38-.67-1.38-1.5s.62-1.5 1.39-1.5h3.23c.76 0 1.39.67 1.39 1.5-.01.83-.63 1.5-1.4 1.5z"/><path fill="#FE948D" d="M14.5 40.01c-3.58 0-6.5-2.92-6.5-6.5v-4.33c0-.64.53-1.17 1.17-1.17h10.66c.64 0 1.17.53 1.17 1.17v4.33c0 3.57-2.92 6.5-6.5 6.5z"/><path fill="#FBD88E" d="M27.5 40.01c-3.58 0-6.5-2.92-6.5-6.5v-4.33c0-.64.53-1.17 1.17-1.17h10.66c.64 0 1.17.53 1.17 1.17v4.33c0 3.57-2.92 6.5-6.5 6.5z"/><path fill="#CBE87C" d="M40.5 40.01c-3.58 0-6.5-2.92-6.5-6.5v-4.33c0-.64.53-1.17 1.17-1.17h10.66c.64 0 1.17.53 1.17 1.17v4.33c0 3.57-2.92 6.5-6.5 6.5z"/><path fill="#BCDEFA" d="M53.5 40.01c-3.58 0-6.5-2.92-6.5-6.5v-4.33c0-.64.53-1.17 1.17-1.17h10.66c.64 0 1.17.53 1.17 1.17v4.33c0 3.57-2.92 6.5-6.5 6.5z"/><path fill="#FE948D" d="M66.5 40.01c-3.58 0-6.5-2.92-6.5-6.5v-4.33c0-.64.53-1.17 1.17-1.17h10.66c.64 0 1.17.53 1.17 1.17v4.33c0 3.57-2.92 6.5-6.5 6.5z"/><path fill="#BCDEFA" d="M14.98 63.86c0-.47 2.26-.86 5.08-.86H36.9c2.81 0 5.08.38 5.08.86v2.28c0 .47-2.26.86-5.08.86H20.06c-2.81 0-5.08-.38-5.08-.86v-2.28z"/><path fill="#7E94AA" d="M36.9 68H20.06c-6.08 0-6.08-1.3-6.08-1.86v-2.28c0-.56 0-1.86 6.08-1.86H36.9c6.08 0 6.08 1.3 6.08 1.86v2.28c0 .56 0 1.86-6.08 1.86zm-20.92-2.38c.59.16 1.95.38 4.08.38H36.9c2.13 0 3.49-.21 4.08-.37v-1.25c-.59-.17-1.95-.38-4.08-.38H20.06c-2.13 0-3.49.21-4.08.37v1.25z"/><path fill-rule="evenodd" clip-rule="evenodd" fill="#CBE87C" d="M14.98 63.86c0-.47-.37-.86 2.46-.86h22.1c2.81 0 2.46.38 2.46.86v2.28c0 .47.37.86-2.46.86h-22.1c-2.81 0-2.46-.38-2.46-.86v-2.28z"/><path fill="#7E94AA" d="M78 73h-7.71c.45-.71.71-1.57.71-2.49V39.49a7.48 7.48 0 003-5.99s.04-5.55-.05-5.82l-4.59-13.86c-.9-2.79-3.02-2.85-3.64-2.83H15.29c-.62-.02-2.62.04-3.64 2.83l-4.6 13.86c-.09.28-.05 5.83-.05 5.83a7.48 7.48 0 003 5.99v31.02c0 .92.26 1.78.71 2.49H2c-.55 0-1 .45-1 1s.45 1 1 1h76c.55 0 1-.45 1-1S78.55 73 78 73zm-6-39.49c0 3.03-2.47 5.5-5.5 5.5s-5.5-2.47-5.5-5.5v-4.33c0-.09.08-.17.17-.17h10.66c.09 0 .17.08.17.17v4.33zm-50-4.33c0-.09.08-.17.17-.17h10.66c.09 0 .17.08.17.17v4.33c0 3.03-2.47 5.5-5.5 5.5s-5.5-2.47-5.5-5.5v-4.33zm23.94-2.16c-.04 0-.07-.01-.11-.01H35.17c-.04 0-.07.01-.11.01L35.87 13h9.26l.81 14.02zM35 29.18c0-.09.08-.17.17-.17h10.66c.09 0 .17.08.17.17v4.33c0 3.03-2.47 5.5-5.5 5.5s-5.5-2.47-5.5-5.5v-4.33zm13 0c0-.09.08-.17.17-.17h10.66c.09 0 .17.08.17.17v4.33c0 3.03-2.47 5.5-5.5 5.5s-5.5-2.47-5.5-5.5v-4.33zM65.57 13h.18c.35-.01 1.09-.02 1.39.28.14.14.21.38.21.73 0 .11.02.21.05.31l4.21 12.69H61.17c-.11 0-.21.02-.31.03L58.63 13h6.94zm-8.97 0l2.23 14.01H48.17c-.08 0-.15.01-.22.02L47.13 13h9.47zM33.05 27.03c-.07-.01-.15-.02-.22-.02H22.17L24.4 13h9.47l-.82 14.03zM13.59 14.31c.03-.1.05-.21.05-.31 0-.34.07-.59.21-.73.3-.3 1.04-.29 1.39-.28h7.13l-2.23 14.04c-.1-.01-.2-.03-.31-.03H9.38l4.21-12.69zM9 33.51v-4.33c0-.09.08-.17.17-.17h10.66c.09 0 .17.08.17.17v4.33c0 3.03-2.47 5.5-5.5 5.5S9 36.54 9 33.51zM50.5 73c-1.93 0-3.5-1.5-3.5-3.34V49.34C47 47.5 48.57 46 50.5 46h9.02c1.93 0 3.5 1.5 3.5 3.34v20.32c0 1.84-1.57 3.34-3.5 3.34H50.5zm13.31 0a5.23 5.23 0 001.22-3.34V49.34c0-2.95-2.47-5.34-5.5-5.34H50.5c-3.03 0-5.5 2.4-5.5 5.34v20.32c0 1.26.46 2.43 1.22 3.34h-32C13 73 12 71.88 12 70.51V40.57c.78.28 1.62.44 2.5.44 2.78 0 5.2-1.52 6.5-3.77 1.3 2.25 3.72 3.77 6.5 3.77s5.2-1.52 6.5-3.77c1.3 2.25 3.72 3.77 6.5 3.77s5.2-1.52 6.5-3.77c1.3 2.25 3.72 3.77 6.5 3.77s5.2-1.52 6.5-3.77c1.3 2.25 3.72 3.77 6.5 3.77.88 0 1.72-.16 2.5-.44v29.94c0 1.37-1 2.49-2.22 2.49h-2.97z"/><path fill="#7E94AA" d="M42.99 63.79c.02-.21.06-.71-.34-1.14-.31-.34-.78-.52-1.65-.6V49.72c0-3.15-2.39-5.72-5.33-5.72H21.33C18.39 44 16 46.57 16 49.72v12.33c-.9.08-1.37.26-1.69.6-.4.43-.35.93-.33 1.21v2.35c-.02.21-.06.71.34 1.14.46.49 1.21.65 3.12.65h22.1c1.91 0 2.67-.16 3.12-.65.4-.43.36-.93.33-1.21v-2.35zM21.33 46h14.35c1.83 0 3.33 1.67 3.33 3.72V62H18V49.72c0-2.05 1.49-3.72 3.33-3.72zm19.65 19.94c-.26.03-.7.06-1.45.06h-22.1c-.75 0-1.19-.03-1.46-.06v-1.88c.26-.03.71-.06 1.46-.06h22.1c.75 0 1.19.03 1.46.06v1.88z"/></svg>
</span> </div>
<div class="iconable-block__content">
<div class="cta-block">
<div class="cta-block__central">
<div class="cta-block__title">
<?php echo esc_html__( 'Request custom development', 'ecwid-shopping-cart' ); ?>
</div>
<div class="cta-block__content">
<?php echo esc_html__( 'The Ecwid team can help you build the desired features and options that Ecwid does not have out of the box — from integrations with other tools to your own mobile app. Custom development is a paid service, the price depends on the complexity of the request.', 'ecwid-shopping-cart' ); ?>
</div>
</div>
<div class="cta-block__cta">
<a href="https://support.ecwid.com/hc/en-us/articles/115005821245?utm_source=wp-plugin" target="_blank" type="button" class="btn btn-default btn-medium"> <span><?php echo esc_html__( 'Submit Request', 'ecwid-shopping-cart' ); ?></span> </a>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="a-card a-card--normal">
<div class="a-card__paddings">
<div class="iconable-block">
Expand Down
Loading
Loading