Ecwid Ecommerce Shopping Cart - Version 6.4.12

Version Description

  • Mar 11, 2019 =
  • Improvement for the sharing buttons on the product pages. "Share to Facebook", "Tweet" and other share buttons now uses the actual product page URLs instead of a "proxy" Ecwid URL. This should make shared links look more appealing in social networks and improve the SEO of your ecommerce store.
  • Fixed an issue in the "Import products from WooCommerce" tool. In some cases, import failed and stopped importing products we fixed that, now it should work fine and you can import your products from WooCommerce to Ecwid when you need it.
  • Fixed a Javascript warning message in the browser console when the Recently viewed products widget is used.
  • Minor fixes and improvements for SEO, stability and performance.
  • Besides the changes in the plugin, Ecwid e-commerce functionality is constantly updated with new features and tools. One of the recent major updates is product filters you can now add product filtering panel to your store search page without dealing with custom code or an external plugin. Check it out in our blog.
Download this release

Release Info

Developer Ecwid
Plugin Icon 128x128 Ecwid Ecommerce Shopping Cart
Version 6.4.12
Comparing to
See all releases

Code changes from version 6.4.11 to 6.4.12

Files changed (62) hide show
  1. ecwid-shopping-cart.php +55 -6
  2. images/gutenberg-icons/aspect-ratio-1-1.svg +10 -0
  3. images/gutenberg-icons/aspect-ratio-16-9.svg +10 -0
  4. images/gutenberg-icons/aspect-ratio-3-4.svg +10 -0
  5. images/gutenberg-icons/aspect-ratio-4-3.svg +10 -0
  6. images/gutenberg-icons/aspect-ratio-9-16.svg +10 -0
  7. images/gutenberg-icons/ecwid.svg +21 -0
  8. images/gutenberg-icons/product.svg +13 -0
  9. images/gutenberg-icons/text-align-center.svg +14 -0
  10. images/gutenberg-icons/text-align-justify.svg +14 -0
  11. images/gutenberg-icons/text-align-left.svg +14 -0
  12. images/gutenberg-icons/text-align-right.svg +14 -0
  13. includes/class-ecwid-admin.php +10 -0
  14. includes/class-ecwid-floating-minicart.php +1 -1
  15. includes/class-ecwid-html-meta.php +2 -2
  16. includes/class-ecwid-nav-menus.php +0 -2
  17. includes/class-ecwid-products.php +2 -2
  18. includes/class-ecwid-seo-links.php +4 -8
  19. includes/class-ecwid-store-page.php +42 -1
  20. includes/importer/class-ecwid-import-page.php +1 -1
  21. includes/importer/class-ecwid-importer-task.php +25 -527
  22. includes/importer/class-ecwid-importer.php +36 -4
  23. includes/importer/importer.php +2 -0
  24. includes/importer/task/class-ecwid-importer-task-create-category.php +56 -0
  25. includes/importer/task/class-ecwid-importer-task-create-product-variation.php +79 -0
  26. includes/importer/task/class-ecwid-importer-task-create-product.php +140 -0
  27. includes/importer/task/class-ecwid-importer-task-delete-products.php +23 -0
  28. includes/importer/task/class-ecwid-importer-task-import-woo-categories.php +11 -3
  29. includes/importer/task/class-ecwid-importer-task-import-woo-product.php +19 -12
  30. includes/importer/task/class-ecwid-importer-task-import-woo-products-batch.php +1 -1
  31. includes/importer/task/class-ecwid-importer-task-import-woo-products.php +3 -8
  32. includes/importer/task/class-ecwid-importer-task-main.php +3 -3
  33. includes/importer/task/class-ecwid-importer-task-upload-category-image.php +41 -0
  34. includes/importer/task/class-ecwid-importer-task-upload-product-gallery-image.php +47 -0
  35. includes/importer/task/class-ecwid-importer-task-upload-product-image.php +37 -0
  36. includes/importer/task/class-ecwid-importer-task-upload-product-variation-image.php +49 -0
  37. includes/integrations/class-ecwid-integration-aiosp.php +16 -0
  38. includes/integrations/class-ecwid-integration-gutenberg.php +4 -1
  39. includes/integrations/class-ecwid-integration-wpseo.php +42 -0
  40. includes/widgets/class-ecwid-widget-products-base.php +9 -9
  41. includes/widgets/class-ecwid-widget-recently-viewed.php +2 -5
  42. index.php +4 -0
  43. js/dynamic-title.js +22 -0
  44. js/importer.js +8 -5
  45. js/store-editor-common.js +25 -0
  46. js/store-editor-mce.js +19 -4
  47. js/store-editor-page.js +11 -31
  48. languages/ecwid-shopping-cart-de_DE.mo +0 -0
  49. languages/ecwid-shopping-cart-de_DE.po +1 -1
  50. languages/ecwid-shopping-cart-pt_BR.mo +0 -0
  51. languages/ecwid-shopping-cart-pt_BR.po +1 -1
  52. languages/ecwid-shopping-cart-ru_RU.mo +0 -0
  53. languages/ecwid-shopping-cart-ru_RU.po +193 -586
  54. languages/ecwid-shopping-cart-tr_TR.mo +0 -0
  55. languages/ecwid-shopping-cart-tr_TR.po +1 -1
  56. lib/ecwid_api_v3.php +5 -5
  57. lib/ecwid_catalog_entry.php +5 -4
  58. lib/ecwid_platform.php +40 -10
  59. lib/ecwid_product.php +18 -32
  60. readme.txt +9 -2
  61. templates/admin-params.php +5 -1
  62. templates/importer/woo-main.tpl.php +3 -0
ecwid-shopping-cart.php CHANGED
@@ -1,11 +1,11 @@
1
  <?php
2
  /*
3
- Plugin Name: Ecwid Shopping Cart
4
  Plugin URI: http://www.ecwid.com?source=wporg
5
  Description: Ecwid is a free full-featured shopping cart. It can be easily integrated with any Wordpress blog and takes less than 5 minutes to set up.
6
  Text Domain: ecwid-shopping-cart
7
  Author: Ecwid Ecommerce
8
- Version: 6.4.11
9
  Author URI: https://ecwid.to/ecwid-site
10
  */
11
 
@@ -64,6 +64,7 @@ if ( is_admin() ){
64
  add_action('wp_ajax_ecwid_sync_products', 'ecwid_sync_products');
65
  add_action('admin_head', 'ecwid_ie8_fonts_inclusion');
66
  add_action('init', 'ecwid_apply_theme', 0);
 
67
  add_action('get_footer', 'ecwid_admin_get_footer');
68
  add_action('admin_post_ec_connect', 'ecwid_admin_post_connect');
69
  add_filter('tiny_mce_before_init', 'ecwid_tinymce_init');
@@ -130,7 +131,7 @@ require_once ECWID_PLUGIN_DIR . 'includes/class-ecwid-store-page.php';
130
  require_once ECWID_PLUGIN_DIR . 'lib/ecwid_product.php';
131
  require_once ECWID_PLUGIN_DIR . 'lib/ecwid_category.php';
132
 
133
- require_once ECWID_PLUGIN_DIR . 'includes/class-ecwid-nav-menus.php';
134
  require_once ECWID_PLUGIN_DIR . 'includes/class-ecwid-seo-links.php';
135
  require_once ECWID_PLUGIN_DIR . 'includes/class-ecwid-html-meta.php';
136
  require_once ECWID_PLUGIN_DIR . 'includes/class-ecwid-wp-dashboard-feed.php';
@@ -291,6 +292,13 @@ function ecwid_ie8_fonts_inclusion()
291
  HTML;
292
 
293
  }
 
 
 
 
 
 
 
294
 
295
  add_action('wp_ajax_ecwid_get_product_info', 'ecwid_ajax_get_product_info' );
296
  add_action('wp_ajax_nopriv_ecwid_get_product_info', 'ecwid_ajax_get_product_info' );
@@ -453,7 +461,6 @@ JS;
453
 
454
  function ecwid_load_textdomain() {
455
  load_plugin_textdomain( 'ecwid-shopping-cart', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
456
- // )
457
  }
458
 
459
  function ecwid_404_on_broken_escaped_fragment() {
@@ -688,8 +695,11 @@ function ecwid_check_version()
688
  // Since 6.4.8
689
  add_option( 'ecwid_hide_canonical', false );
690
 
691
- // Since 6.4.9+
692
  add_option( Ecwid_Theme_Base::OPTION_LEGACY_CUSTOM_SCROLLER, false );
 
 
 
693
 
694
  do_action( 'ecwid_on_plugin_update' );
695
 
@@ -1423,6 +1433,7 @@ function _ecwid_get_seo_title()
1423
  return "";
1424
  }
1425
 
 
1426
  add_filter('oembed_endpoint_url', 'ecwid_oembed_url', 10, 3);
1427
 
1428
  function ecwid_oembed_url( $url, $permalink, $format ) {
@@ -1853,6 +1864,16 @@ EOT;
1853
  Ecwid_Config::load_from_ini();
1854
  }
1855
 
 
 
 
 
 
 
 
 
 
 
1856
  add_action('in_admin_header', 'ecwid_disable_other_notices');
1857
  function ecwid_disable_other_notices() {
1858
 
@@ -1880,6 +1901,17 @@ function ecwid_disable_other_notices() {
1880
 
1881
  function ecwid_show_admin_messages() {
1882
  if (is_admin()) {
 
 
 
 
 
 
 
 
 
 
 
1883
  Ecwid_Message_Manager::show_messages();
1884
  }
1885
  }
@@ -2056,7 +2088,7 @@ function ecwid_update_plugin_params()
2056
  die();
2057
  }
2058
 
2059
- if ( !wp_verify_nonce(@$_POST['nonce'], 'ecwid-update-params' ) ) {
2060
  header('403 Access Denied');
2061
 
2062
  die();
@@ -2077,6 +2109,23 @@ function ecwid_update_plugin_params()
2077
  wp_redirect('admin.php?page=ec-params');
2078
  }
2079
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2080
  function ecwid_sync_do_page() {
2081
 
2082
  require_once ECWID_PLUGIN_DIR . 'includes/class-ecwid-products.php';
1
  <?php
2
  /*
3
+ Plugin Name: Ecwid Ecommerce Shopping Cart
4
  Plugin URI: http://www.ecwid.com?source=wporg
5
  Description: Ecwid is a free full-featured shopping cart. It can be easily integrated with any Wordpress blog and takes less than 5 minutes to set up.
6
  Text Domain: ecwid-shopping-cart
7
  Author: Ecwid Ecommerce
8
+ Version: 6.4.12
9
  Author URI: https://ecwid.to/ecwid-site
10
  */
11
 
64
  add_action('wp_ajax_ecwid_sync_products', 'ecwid_sync_products');
65
  add_action('admin_head', 'ecwid_ie8_fonts_inclusion');
66
  add_action('init', 'ecwid_apply_theme', 0);
67
+ add_action('init', 'ecwid_maybe_remove_emoji');
68
  add_action('get_footer', 'ecwid_admin_get_footer');
69
  add_action('admin_post_ec_connect', 'ecwid_admin_post_connect');
70
  add_filter('tiny_mce_before_init', 'ecwid_tinymce_init');
131
  require_once ECWID_PLUGIN_DIR . 'lib/ecwid_product.php';
132
  require_once ECWID_PLUGIN_DIR . 'lib/ecwid_category.php';
133
 
134
+
135
  require_once ECWID_PLUGIN_DIR . 'includes/class-ecwid-seo-links.php';
136
  require_once ECWID_PLUGIN_DIR . 'includes/class-ecwid-html-meta.php';
137
  require_once ECWID_PLUGIN_DIR . 'includes/class-ecwid-wp-dashboard-feed.php';
292
  HTML;
293
 
294
  }
295
+ add_action( 'wp_head', 'ecwid_maybe_remove_emoji', 0 );
296
+ function ecwid_maybe_remove_emoji() {
297
+
298
+ if ( Ecwid_Store_page::is_store_page() && get_option( 'ecwid_remove_emoji' ) == 'Y' && strpos($_SERVER['HTTP_USER_AGENT'], 'Trident/7.0; rv:11.0') !== false ) {
299
+ remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
300
+ }
301
+ }
302
 
303
  add_action('wp_ajax_ecwid_get_product_info', 'ecwid_ajax_get_product_info' );
304
  add_action('wp_ajax_nopriv_ecwid_get_product_info', 'ecwid_ajax_get_product_info' );
461
 
462
  function ecwid_load_textdomain() {
463
  load_plugin_textdomain( 'ecwid-shopping-cart', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
 
464
  }
465
 
466
  function ecwid_404_on_broken_escaped_fragment() {
695
  // Since 6.4.8
696
  add_option( 'ecwid_hide_canonical', false );
697
 
698
+ // Since 6.4.9
699
  add_option( Ecwid_Theme_Base::OPTION_LEGACY_CUSTOM_SCROLLER, false );
700
+
701
+ // Since 6.4.9+
702
+ add_option( 'ecwid_remove_emoji', 'Y' );
703
 
704
  do_action( 'ecwid_on_plugin_update' );
705
 
1433
  return "";
1434
  }
1435
 
1436
+
1437
  add_filter('oembed_endpoint_url', 'ecwid_oembed_url', 10, 3);
1438
 
1439
  function ecwid_oembed_url( $url, $permalink, $format ) {
1864
  Ecwid_Config::load_from_ini();
1865
  }
1866
 
1867
+ add_action( 'activated_plugin', 'ecwid_plugin_activation_redirect' );
1868
+ function ecwid_plugin_activation_redirect( $plugin ) {
1869
+ $is_newbie = ecwid_is_demo_store();
1870
+
1871
+ if( $is_newbie && $plugin == plugin_basename( __FILE__ ) ) {
1872
+ exit( wp_redirect( Ecwid_Admin::get_dashboard_url() ) );
1873
+ }
1874
+ }
1875
+
1876
+
1877
  add_action('in_admin_header', 'ecwid_disable_other_notices');
1878
  function ecwid_disable_other_notices() {
1879
 
1901
 
1902
  function ecwid_show_admin_messages() {
1903
  if (is_admin()) {
1904
+ global $wp_filter;
1905
+ if ( $wp_filter && isset($wp_filter['admin_notices']) && class_exists('WP_Hook') ){
1906
+ foreach ($wp_filter['admin_notices']->callbacks as $priority => $collection) {
1907
+ foreach ($collection as $name => $item) {
1908
+ if( is_object($item['function'][0]) && get_class($item['function'][0]) == 'Storefront_NUX_Admin' ){
1909
+ remove_action('admin_notices', $item['function'], $priority);
1910
+ }
1911
+ }
1912
+ }
1913
+ }
1914
+
1915
  Ecwid_Message_Manager::show_messages();
1916
  }
1917
  }
2088
  die();
2089
  }
2090
 
2091
+ if ( !wp_verify_nonce(@$_POST['nonce'], ecwid_get_update_params_action() ) ) {
2092
  header('403 Access Denied');
2093
 
2094
  die();
2109
  wp_redirect('admin.php?page=ec-params');
2110
  }
2111
 
2112
+ function ecwid_get_clear_all_cache_action() {
2113
+ return 'ec-clear-all-cache';
2114
+ }
2115
+
2116
+ add_action('plugins_loaded', 'ecwid_clear_all_cache');
2117
+
2118
+ function ecwid_clear_all_cache()
2119
+ {
2120
+ if ( array_key_exists( ecwid_get_clear_all_cache_action(), $_GET ) ) {
2121
+ ecwid_full_cache_reset();
2122
+
2123
+ if ( array_key_exists( 'redirect_back', $_GET ) ) {
2124
+ wp_redirect ( 'admin.php?page=ec-params' );
2125
+ }
2126
+ }
2127
+ }
2128
+
2129
  function ecwid_sync_do_page() {
2130
 
2131
  require_once ECWID_PLUGIN_DIR . 'includes/class-ecwid-products.php';
images/gutenberg-icons/aspect-ratio-1-1.svg ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <!-- Generator: Sketch 50.2 (55047) - http://www.bohemiancoding.com/sketch -->
4
+ <title>Aspect Ratio Thumbnail_1_1</title>
5
+ <desc>Created with Sketch.</desc>
6
+ <defs></defs>
7
+ <g id="Aspect-Ratio-Thumbnail_1_1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
8
+ <rect id="Rectangle-3" fill="#000000" x="12" y="12" width="16" height="16" rx="2"></rect>
9
+ </g>
10
+ </svg>
images/gutenberg-icons/aspect-ratio-16-9.svg ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <!-- Generator: Sketch 50.2 (55047) - http://www.bohemiancoding.com/sketch -->
4
+ <title>Aspect Ratio Thumbnail_16_9</title>
5
+ <desc>Created with Sketch.</desc>
6
+ <defs></defs>
7
+ <g id="Aspect-Ratio-Thumbnail_16_9" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
8
+ <rect id="Rectangle-33" fill="#000000" x="9" y="14" width="22" height="12" rx="2"></rect>
9
+ </g>
10
+ </svg>
images/gutenberg-icons/aspect-ratio-3-4.svg ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <!-- Generator: Sketch 50.2 (55047) - http://www.bohemiancoding.com/sketch -->
4
+ <title>Aspect Ratio Thumbnail_3_4</title>
5
+ <desc>Created with Sketch.</desc>
6
+ <defs></defs>
7
+ <g id="Aspect-Ratio-Thumbnail_3_4" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
8
+ <rect id="Rectangle-4" fill="#000000" x="12" y="10" width="16" height="20" rx="2"></rect>
9
+ </g>
10
+ </svg>
images/gutenberg-icons/aspect-ratio-4-3.svg ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <!-- Generator: Sketch 50.2 (55047) - http://www.bohemiancoding.com/sketch -->
4
+ <title>Aspect Ratio Thumbnail_4_3</title>
5
+ <desc>Created with Sketch.</desc>
6
+ <defs></defs>
7
+ <g id="Aspect-Ratio-Thumbnail_4_3" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
8
+ <rect id="Rectangle" fill="#000000" x="10" y="12" width="20" height="16" rx="2"></rect>
9
+ </g>
10
+ </svg>
images/gutenberg-icons/aspect-ratio-9-16.svg ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <!-- Generator: Sketch 50.2 (55047) - http://www.bohemiancoding.com/sketch -->
4
+ <title>Aspect Ratio Thumbnail_9_16</title>
5
+ <desc>Created with Sketch.</desc>
6
+ <defs></defs>
7
+ <g id="Aspect-Ratio-Thumbnail_9_16" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
8
+ <rect id="Rectangle-5" fill="#000000" x="14" y="9" width="12" height="22" rx="2"></rect>
9
+ </g>
10
+ </svg>
images/gutenberg-icons/ecwid.svg ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve">
6
+ <path fill="#555d66" d="M15.32,15.58c-0.37,0-0.66,0.3-0.66,0.67c0,0.37,0.3,0.67,0.66,0.67c0.37,0,0.67-0.3,0.67-0.67
7
+ C15.98,15.88,15.69,15.58,15.32,15.58z M15.45,0H4.55C2.04,0,0,2.04,0,4.55v10.91C0,17.97,2.04,20,4.55,20h10.91c2.51,0,4.55-2.04,4.55-4.55V4.55
8
+ C20,2.04,17.96,0,15.45,0z M12.97,4.94C13.54,4.94,14,5.4,14,5.96s-0.46,1.03-1.03,1.03c-0.57,0-1.03-0.46-1.03-1.03
9
+ C11.95,5.4,12.41,4.94,12.97,4.94z M12.97,8.02c0.57,0,1.03,0.46,1.03,1.03c0,0.57-0.46,1.03-1.03,1.03c-0.57,0-1.03-0.46-1.03-1.03
10
+ C11.95,8.48,12.41,8.02,12.97,8.02z M9.98,4.94c0.57,0,1.03,0.46,1.03,1.03s-0.46,1.03-1.03,1.03c-0.57,0-1.03-0.46-1.03-1.03
11
+ C8.95,5.4,9.41,4.94,9.98,4.94z M9.98,8.02c0.57,0,1.03,0.46,1.03,1.03s-0.46,1.03-1.03,1.03c-0.57,0-1.03-0.46-1.03-1.03
12
+ C8.95,8.48,9.41,8.02,9.98,8.02z M7.03,4.94c0.57,0,1.03,0.46,1.03,1.03S7.6,6.99,7.03,6.99C6.46,6.99,6,6.53,6,5.96
13
+ C6,5.4,6.46,4.94,7.03,4.94z M7.03,8.02c0.57,0,1.03,0.46,1.03,1.03s-0.46,1.03-1.03,1.03C6.46,10.08,6,9.62,6,9.05
14
+ C6,8.48,6.46,8.02,7.03,8.02z M4.6,18.02c-1.02,0-1.86-0.83-1.86-1.86c0-1.03,0.83-1.86,1.86-1.86c1.03,0,1.86,0.83,1.86,1.86
15
+ C6.45,17.19,5.62,18.02,4.6,18.02z M15.32,18.1c-1.02,0-1.86-0.83-1.86-1.86c0-1.03,0.83-1.86,1.86-1.86c1.03,0,1.86,0.83,1.86,1.86
16
+ C17.17,17.27,16.34,18.1,15.32,18.1z M18.48,2.79l-1.92,7.14c-0.51,1.91-2.03,3.1-4,3.1H7.2c-1.91,0-3.26-1.09-3.84-2.91L1.73,5
17
+ C1.7,4.9,1.72,4.79,1.78,4.71c0.06-0.09,0.16-0.14,0.27-0.14l0.31,0c0.75,0,1.41,0.49,1.64,1.2l1.2,3.76
18
+ c0.32,1.02,1.26,1.7,2.33,1.7h4.81c1.1,0,2.08-0.74,2.36-1.81l1.55-5.78c0.2-0.75,0.89-1.28,1.67-1.28h0.24
19
+ c0.1,0,0.2,0.05,0.26,0.13C18.48,2.58,18.5,2.68,18.48,2.79z M4.6,15.5c-0.37,0-0.66,0.3-0.66,0.67c0,0.37,0.3,0.67,0.66,0.67c0.37,0,0.67-0.3,0.67-0.67
20
+ S4.96,15.5,4.6,15.5z"/>
21
+ </svg>
images/gutenberg-icons/product.svg ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve">
6
+ <path fill="#231F20" d="M16.43,5.12c-0.13-1.19-0.15-1.19-1.35-1.33c-0.21-0.02-0.21-0.02-0.43-0.05c-0.01,0.06,0.06,0.78,0.14,1.13
7
+ c0.57,0.37,0.87,0.98,0.87,1.71c0,1.14-0.93,2.07-2.07,2.07s-2.07-0.93-2.07-2.07c0-0.54,0.09-0.97,0.55-1.4
8
+ c-0.06-0.61-0.19-1.54-0.18-1.64C10.14,3.46,8.72,3.46,8.58,3.6l-8.17,8.13c-0.56,0.55-0.56,1.43,0,1.97l5.54,5.93
9
+ c0.56,0.55,1.46,0.55,2.01,0l8.67-8.14C17.04,11.09,16.68,7.14,16.43,5.12z M16.06,0.04c-1.91,0-3.46,1.53-3.46,3.41c0,0.74,0.4,3.09,0.44,3.28c0.07,0.34,0.52,0.56,0.86,0.49
10
+ C14,7.19,14.07,7.15,14.12,7.1c0.24-0.11,0.32-0.39,0.25-0.68c-0.09-0.45-0.39-2.44-0.39-2.94c0-1.16,0.94-2.09,2.11-2.09
11
+ c1.24,0,2.11,0.96,2.11,2.34c0,2.43-0.31,4.23-0.32,4.26c-0.1,0.17-0.1,0.38-0.03,0.55c0.03,0.17,0.13,0.31,0.28,0.4
12
+ c0.1,0.06,0.22,0.09,0.33,0.09c0.21,0,0.42-0.1,0.54-0.3c0.06-0.09,0.52-2.17,0.52-5.03C19.52,1.61,18.04,0.04,16.06,0.04z"/>
13
+ </svg>
images/gutenberg-icons/text-align-center.svg ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <!-- Generator: Sketch 50.2 (55047) - http://www.bohemiancoding.com/sketch -->
4
+ <title>Text alignment_center</title>
5
+ <desc>Created with Sketch.</desc>
6
+ <defs></defs>
7
+ <g id="Text-alignment_center" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
8
+ <rect id="Rectangle-45" fill="#000000" x="13" y="13" width="14" height="2"></rect>
9
+ <rect id="Rectangle-46" fill="#000000" x="16" y="16" width="8" height="2"></rect>
10
+ <rect id="Rectangle-47" fill="#000000" x="14" y="19" width="12" height="2"></rect>
11
+ <rect id="Rectangle-48" fill="#000000" x="16" y="22" width="8" height="2"></rect>
12
+ <rect id="Rectangle-49" fill="#000000" x="13" y="25" width="14" height="2"></rect>
13
+ </g>
14
+ </svg>
images/gutenberg-icons/text-align-justify.svg ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <!-- Generator: Sketch 50.2 (55047) - http://www.bohemiancoding.com/sketch -->
4
+ <title>Text alignment_justify</title>
5
+ <desc>Created with Sketch.</desc>
6
+ <defs></defs>
7
+ <g id="Text-alignment_justify" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
8
+ <rect id="Rectangle-55" fill="#000000" x="13" y="13" width="14" height="2"></rect>
9
+ <rect id="Rectangle-56" fill="#000000" x="13" y="16" width="14" height="2"></rect>
10
+ <rect id="Rectangle-57" fill="#000000" x="13" y="19" width="14" height="2"></rect>
11
+ <rect id="Rectangle-58" fill="#000000" x="13" y="22" width="14" height="2"></rect>
12
+ <rect id="Rectangle-59" fill="#000000" x="13" y="25" width="14" height="2"></rect>
13
+ </g>
14
+ </svg>
images/gutenberg-icons/text-align-left.svg ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <!-- Generator: Sketch 50.2 (55047) - http://www.bohemiancoding.com/sketch -->
4
+ <title>Text alignment_left</title>
5
+ <desc>Created with Sketch.</desc>
6
+ <defs></defs>
7
+ <g id="Text-alignment_left" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
8
+ <rect id="Rectangle-40" fill="#000000" x="13" y="13" width="14" height="2"></rect>
9
+ <rect id="Rectangle-41" fill="#000000" x="13" y="16" width="9" height="2"></rect>
10
+ <rect id="Rectangle-42" fill="#000000" x="13" y="19" width="13" height="2"></rect>
11
+ <rect id="Rectangle-43" fill="#000000" x="13" y="22" width="9" height="2"></rect>
12
+ <rect id="Rectangle-44" fill="#000000" x="13" y="25" width="14" height="2"></rect>
13
+ </g>
14
+ </svg>
images/gutenberg-icons/text-align-right.svg ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <!-- Generator: Sketch 50.2 (55047) - http://www.bohemiancoding.com/sketch -->
4
+ <title>Text alignment_right</title>
5
+ <desc>Created with Sketch.</desc>
6
+ <defs></defs>
7
+ <g id="Text-alignment_right" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
8
+ <rect id="Rectangle-50" fill="#000000" x="13" y="13" width="14" height="2"></rect>
9
+ <rect id="Rectangle-51" fill="#000000" x="18" y="16" width="9" height="2"></rect>
10
+ <rect id="Rectangle-52" fill="#000000" x="14" y="19" width="13" height="2"></rect>
11
+ <rect id="Rectangle-53" fill="#000000" x="18" y="22" width="9" height="2"></rect>
12
+ <rect id="Rectangle-54" fill="#000000" x="13" y="25" width="14" height="2"></rect>
13
+ </g>
14
+ </svg>
includes/class-ecwid-admin.php CHANGED
@@ -125,6 +125,16 @@ class Ecwid_Admin {
125
  }
126
  }
127
  }
 
 
 
 
 
 
 
 
 
 
128
  }
129
 
130
  if ( !$is_newbie || ( isset($_GET['page']) && $_GET['page'] == 'ec-store-advanced' ) ) {
125
  }
126
  }
127
  }
128
+
129
+ if( !Ecwid_Config::is_wl() ) {
130
+ add_submenu_page(
131
+ 'plugins.php',
132
+ __('Online Store Apps', 'ecwid-shopping-cart'),
133
+ __('Online Store Apps', 'ecwid-shopping-cart'),
134
+ 'manage_options',
135
+ 'admin.php?page=ec-store-admin-appmarket'
136
+ );
137
+ }
138
  }
139
 
140
  if ( !$is_newbie || ( isset($_GET['page']) && $_GET['page'] == 'ec-store-advanced' ) ) {
includes/class-ecwid-floating-minicart.php CHANGED
@@ -29,7 +29,7 @@ if ( version_compare( get_bloginfo('version'), '4.0' ) >= 0 ) {
29
  {
30
  if ( post_password_required() ) return;
31
 
32
- $display = get_option(self::OPTION_WIDGET_DISPLAY);
33
 
34
  if (!array_key_exists($display, self::get_display_options())) {
35
  $display = self::DISPLAY_NONE;
29
  {
30
  if ( post_password_required() ) return;
31
 
32
+ $display = get_option(self::OPTION_WIDGET_DISPLAY, self::DISPLAY_STORE);
33
 
34
  if (!array_key_exists($display, self::get_display_options())) {
35
  $display = self::DISPLAY_NONE;
includes/class-ecwid-html-meta.php CHANGED
@@ -106,7 +106,7 @@ abstract class Ecwid_HTML_Meta_Catalog_Entry extends Ecwid_HTML_Meta {
106
  $twitter_tags = array(
107
  'card' => 'summary_large_image',
108
  'description' => $this->_get_description( ECWID_TRIMMED_DESCRIPTION_LENGTH ),
109
- 'title' => $this->_get_title() . ' - ' . $this->_get_site_name(),
110
  'image' => $this->_get_image_url()
111
  );
112
 
@@ -175,7 +175,7 @@ class Ecwid_HTML_Meta_Product extends Ecwid_HTML_Meta_Catalog_Entry {
175
 
176
  protected function _get_title()
177
  {
178
- return @$this->product->title;
179
  }
180
 
181
  protected function _get_raw_description()
106
  $twitter_tags = array(
107
  'card' => 'summary_large_image',
108
  'description' => $this->_get_description( ECWID_TRIMMED_DESCRIPTION_LENGTH ),
109
+ 'title' => $this->_get_title(),
110
  'image' => $this->_get_image_url()
111
  );
112
 
175
 
176
  protected function _get_title()
177
  {
178
+ return @$this->product->name;
179
  }
180
 
181
  protected function _get_raw_description()
includes/class-ecwid-nav-menus.php CHANGED
@@ -129,8 +129,6 @@ class Ecwid_Nav_Menus {
129
  }
130
 
131
  public function add_meta_box() {
132
- /*
133
- */
134
  add_meta_box('ecwid_nav_links', __('Store', 'ecwid-shopping-cart'), array( $this, 'create_menu_items'), 'nav-menus', 'side');
135
  }
136
 
129
  }
130
 
131
  public function add_meta_box() {
 
 
132
  add_meta_box('ecwid_nav_links', __('Store', 'ecwid-shopping-cart'), array( $this, 'create_menu_items'), 'nav-menus', 'side');
133
  }
134
 
includes/class-ecwid-products.php CHANGED
@@ -311,12 +311,12 @@ class Ecwid_Products {
311
  $result['last_update'] = $this->_status->get_last_sync_time();
312
 
313
  if ($updated->total > 0) {
314
- $result['updated_from'] = $updated->items[0]->updated - 1;
315
  $result['last_updated'] = Ecwid_Api_V3::format_time($this->_status->last_deleted_product_time);
316
  }
317
 
318
  if ($deleted->total > 0) {
319
- $result['deleted_from'] = $deleted->items[0]->date - 1;
320
  $result['last_deleted'] = Ecwid_Api_V3::format_time($this->_status->last_deleted_product_time);
321
  }
322
 
311
  $result['last_update'] = $this->_status->get_last_sync_time();
312
 
313
  if ($updated->total > 0) {
314
+ $result['updated_from'] = $updated->items[0]->updated;
315
  $result['last_updated'] = Ecwid_Api_V3::format_time($this->_status->last_deleted_product_time);
316
  }
317
 
318
  if ($deleted->total > 0) {
319
+ $result['deleted_from'] = $deleted->items[0]->date;
320
  $result['last_deleted'] = Ecwid_Api_V3::format_time($this->_status->last_deleted_product_time);
321
  }
322
 
includes/class-ecwid-seo-links.php CHANGED
@@ -152,11 +152,7 @@ class Ecwid_Seo_Links {
152
  '.*-p([0-9]+)(\/.*|\?.*)?',
153
  '.*-c([0-9]+)(\/.*|\?.*)?',
154
  'cart',
155
- 'checkout',
156
- 'checkout\/shipping',
157
- 'checkout\/payment',
158
- 'checkout\/place-order',
159
- 'checkout\/order-confirmation',
160
  'account',
161
  'account\/settings',
162
  'account\/orders',
@@ -174,8 +170,6 @@ class Ecwid_Seo_Links {
174
  'resetPassword.*',
175
  'checkoutAB.*',
176
  'downloadError.*',
177
- 'checkoutResult.*',
178
- 'checkoutWait.*',
179
  'orderFailure.*',
180
  'checkoutCC.*',
181
  'checkoutEC.*',
@@ -215,11 +209,13 @@ class Ecwid_Seo_Links {
215
  }
216
 
217
  $url = esc_js( get_permalink( $page_id ) );
218
-
219
  $result = <<<JS
220
  window.ec.config.storefrontUrls = window.ec.config.storefrontUrls || {};
221
  window.ec.config.storefrontUrls.cleanUrls = true;
222
  window.ec.config.baseUrl = '$url';
 
 
223
  JS;
224
  $config .= $result;
225
 
152
  '.*-p([0-9]+)(\/.*|\?.*)?',
153
  '.*-c([0-9]+)(\/.*|\?.*)?',
154
  'cart',
155
+ 'checkout.*',
 
 
 
 
156
  'account',
157
  'account\/settings',
158
  'account\/orders',
170
  'resetPassword.*',
171
  'checkoutAB.*',
172
  'downloadError.*',
 
 
173
  'orderFailure.*',
174
  'checkoutCC.*',
175
  'checkoutEC.*',
209
  }
210
 
211
  $url = esc_js( get_permalink( $page_id ) );
212
+
213
  $result = <<<JS
214
  window.ec.config.storefrontUrls = window.ec.config.storefrontUrls || {};
215
  window.ec.config.storefrontUrls.cleanUrls = true;
216
  window.ec.config.baseUrl = '$url';
217
+ window.ec.storefront = window.ec.storefront || {};
218
+ window.ec.storefront.sharing_button_link = "DIRECT_PAGE_URL";
219
  JS;
220
  $config .= $result;
221
 
includes/class-ecwid-store-page.php CHANGED
@@ -416,9 +416,50 @@ class Ecwid_Store_Page {
416
 
417
  $catalog->warmup_store_page(intval($category));
418
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
419
  }
420
 
421
  add_action( 'init', array( 'Ecwid_Store_Page', 'flush_rewrites' ) );
 
422
  add_action( 'save_post', array( 'Ecwid_Store_Page', 'on_save_post' ) );
423
  add_action( 'wp_ajax_' . Ecwid_Store_Page::WARMUP_ACTION, array( 'Ecwid_Store_Page', 'warmup_store' ) );
424
- add_action( 'update_option_page_on_front', array( 'Ecwid_Store_Page', 'schedule_flush_rewrites' ) );
 
 
416
 
417
  $catalog->warmup_store_page(intval($category));
418
  }
419
+
420
+ /* If you figure out a better place to put this the_title functionality, go ahead, move it =) */
421
+
422
+ static $original_title = '';
423
+ static public function enqueue_original_page_title( )
424
+ {
425
+ $script = 'dynamic-title';
426
+ EcwidPlatform::enqueue_script( $script, array( 'jquery' ), true );
427
+ wp_localize_script( EcwidPlatform::make_handle( $script ), 'ecwidOriginalTitle', array(
428
+ 'title' => get_the_title()
429
+ ) );
430
+ }
431
+
432
+ static public function the_title( $title )
433
+ {
434
+ if ( ! self::is_store_page() ) return $title;
435
+
436
+ $params = Ecwid_Seo_Links::maybe_extract_html_catalog_params();
437
+
438
+ if ( !@$params['mode'] ) {
439
+ return $title;
440
+ }
441
+
442
+ $ecwid_title = null;
443
+
444
+ if ( $params['mode'] == 'product' ) {
445
+ $p = Ecwid_Product::get_by_id( $params['id'] );
446
+ $ecwid_title = isset( $p->seoTitle ) ? $p->seoTitle : $p->name;
447
+ } else if ( $params['mode'] == 'category' ) {
448
+ $c = Ecwid_Category::get_by_id( $params['id'] );
449
+ $ecwid_title = $c->name;
450
+ }
451
+
452
+ if ( empty( $ecwid_title ) ) {
453
+ return $title;
454
+ }
455
+ return $ecwid_title;
456
+ }
457
  }
458
 
459
  add_action( 'init', array( 'Ecwid_Store_Page', 'flush_rewrites' ) );
460
+ //add_action( 'wp_enqueue_scripts', array( 'Ecwid_Store_Page', 'enqueue_original_page_title' ) );
461
  add_action( 'save_post', array( 'Ecwid_Store_Page', 'on_save_post' ) );
462
  add_action( 'wp_ajax_' . Ecwid_Store_Page::WARMUP_ACTION, array( 'Ecwid_Store_Page', 'warmup_store' ) );
463
+ add_action( 'update_option_page_on_front', array( 'Ecwid_Store_Page', 'schedule_flush_rewrites' ) );
464
+
465
+ //add_filter( 'the_title', array( 'Ecwid_Store_Page', 'the_title' ) );
includes/importer/class-ecwid-import-page.php CHANGED
@@ -103,7 +103,7 @@ class Ecwid_Import_Page
103
  {
104
  $importer = new Ecwid_Importer();
105
 
106
- if ( !$importer->has_begun() ) {
107
  $importer->initiate( @$_REQUEST['settings'] );
108
  }
109
 
103
  {
104
  $importer = new Ecwid_Importer();
105
 
106
+ if ( !$importer->has_begun() || isset( $_REQUEST['reset'] ) ) {
107
  $importer->initiate( @$_REQUEST['settings'] );
108
  }
109
 
includes/importer/class-ecwid-importer-task.php CHANGED
@@ -5,6 +5,9 @@ abstract class Ecwid_Importer_Task
5
 
6
  const WC_POST_TYPE_PRODUCT = 'product';
7
 
 
 
 
8
  public static $type;
9
 
10
  public static function build( array $data ) {
@@ -62,7 +65,7 @@ abstract class Ecwid_Importer_Task
62
  protected function _result_success()
63
  {
64
  return array(
65
- 'status' => 'success'
66
  );
67
 
68
  }
@@ -73,538 +76,33 @@ abstract class Ecwid_Importer_Task
73
 
74
  );
75
  }
76
- }
77
-
78
- class Ecwid_Importer_Task_Create_Product extends Ecwid_Importer_Task
79
- {
80
- public static $type = 'create_product';
81
-
82
- const WC_PRODUCT_TYPE_VARIABLE = 'variable';
83
-
84
- public function execute( Ecwid_Importer $exporter, array $product_data ) {
85
-
86
- $api = new Ecwid_Api_V3( );
87
-
88
- $woo_id = $product_data['woo_id'];
89
-
90
- $product = get_post( $woo_id );
91
-
92
- $data = array(
93
- 'name' => $product->post_title,
94
- 'price' => get_post_meta( $woo_id, '_regular_price', true ),
95
- 'description' => $product->post_content,
96
- 'isShippingRequired' => get_post_meta( $woo_id, '_virtual', true ) != 'yes',
97
- 'categoryIds' => array(),
98
- 'showOnFrontpage' => (int) ( get_post_meta( $woo_id, '_featured', true ) == 'yes' )
99
- );
100
-
101
- $meta = get_post_meta( $woo_id, '_sku', true );
102
- if ( !empty( $meta ) ) {
103
- $data['sku'] = get_post_meta( $woo_id, '_sku', true );
104
- }
105
-
106
- if ( get_post_meta( $woo_id, '_manage_stock', true ) == 'yes' ) {
107
- $data['unlimited'] = false;
108
- $data['quantity'] = intval( get_post_meta( $woo_id, '_stock', true ) );
109
- } else {
110
- $data['unlimited'] = true;
111
- }
112
-
113
- $product = wc_get_product( $woo_id );
114
- if ($product->get_type() == self::WC_PRODUCT_TYPE_VARIABLE ) {
115
- $data = array_merge( $data, $this->_get_variable_product_data( $woo_id ) );
116
- }
117
-
118
- $data['price'] = floatval( $data['price'] );
119
-
120
- $categories = get_the_terms( $woo_id, 'product_cat' );
121
-
122
- if ( $categories ) foreach ( $categories as $category ) {
123
- $category_id = $exporter->get_ecwid_category_id( $category->term_id );
124
-
125
- if ( $category_id ) {
126
- $data['categoryIds'][] = $category_id;
127
- }
128
- }
129
- if ( empty( $data['categoryIds'] ) ) {
130
- unset( $data['categoryIds'] );
131
- }
132
-
133
- $ecwid_product_id = null;
134
- $result = null;
135
- $ecwid_id = null;
136
-
137
- if ( $exporter->get_setting( Ecwid_Importer::SETTING_UPDATE_BY_SKU ) ) {
138
- $products = $api->get_products( array( 'sku' => $data['sku'] ) );
139
-
140
- if ( $products->total > 0 ) {
141
- $ecwid_id = $products->items[0]->id;
142
- $result = $api->update_product( $data, $ecwid_id );
143
- $exporter->save_ecwid_product_id( $woo_id, $ecwid_id );
144
- }
145
- }
146
-
147
- if ( !$result ) {
148
- $result = $api->create_product( $data );
149
- $result_object = json_decode( $result['body'] );
150
- $ecwid_product_id = $result_object->id;
151
- }
152
-
153
- $return = array(
154
- 'type' => self::$type
155
- );
156
-
157
- if ( $result['response']['code'] == '200' ) {
158
- $result_object = json_decode( $result['body'] );
159
-
160
- update_post_meta( $woo_id, '_ecwid_product_id', $ecwid_id ? $ecwid_id : $result_object->id );
161
- $exporter->save_ecwid_product_id( $woo_id, $ecwid_id ? $ecwid_id : $result_object->id );
162
-
163
- $return['status'] = 'success';
164
- $return['data'] = $result_object;
165
- } else {
166
- $return['status'] = 'error';
167
- $return['data'] = $result;
168
- $return['sent_data'] = $data;
169
- }
170
-
171
- return $return;
172
- }
173
-
174
- public function _get_variable_product_data( $id )
175
- {
176
- $result = array();
177
-
178
- $product = new WC_Product_Variable( $id );
179
- $result['price'] = $product->get_variation_price();
180
-
181
- $attributes = $product->get_variation_attributes();
182
- if ( $attributes && is_array( $attributes ) && count( $attributes ) > 0 ) {
183
-
184
- $default_attributes = $product->get_default_attributes();
185
- $result['options'] = array();
186
- foreach ( $attributes as $name => $attribute ) {
187
-
188
- $atts = $product->get_attributes();
189
- $tax_attribute = $atts[strtolower($name)]->get_taxonomy_object();
190
-
191
- if ($tax_attribute) {
192
- $name = $tax_attribute->attribute_label;
193
- }
194
-
195
- $option = array( 'type' => 'SELECT', 'name' => $name, 'required' => true, 'choices' => array() );
196
- foreach ( $attribute as $option_name ) {
197
- $choice = array( 'text' => $option_name, 'priceModifier' => 0, 'priceModifierType' => 'ABSOLUTE' );
198
- $option['choices'][] = $choice;
199
- }
200
- if ( @$default_attributes[$name] ) {
201
- $ind = array_search( $default_attributes[$name], $attribute );
202
-
203
- if ( $ind !== false ) {
204
- $option['defaultChoice'] = $ind;
205
- }
206
- }
207
-
208
- $result['options'][] = $option;
209
- }
210
- }
211
-
212
- return $result;
213
- }
214
-
215
- public static function build( array $data ) {
216
- return array(
217
- 'type' => self::$type,
218
- 'woo_id' => $data['woo_id']
219
- );
220
- }
221
- }
222
-
223
- class Ecwid_Importer_Task_Delete_Products extends Ecwid_Importer_Task
224
- {
225
- public static $type = 'delete_products';
226
-
227
- public function execute( Ecwid_Importer $exporter, array $data ) {
228
- $api = new Ecwid_Api_V3();
229
-
230
- $ids = $data['ids'];
231
-
232
- $result = $api->delete_products( $ids );
233
-
234
- $return = array(
235
- 'type' => self::$type
236
- );
237
-
238
- $return['status'] = 'success';
239
- $return['data'] = $result;
240
-
241
- return $return;
242
- }
243
-
244
- public static function build( array $ids ) {
245
- return array(
246
- 'type' => self::$type,
247
- 'ids' => $ids
248
- );
249
- }
250
- }
251
-
252
- class Ecwid_Importer_Task_Upload_Product_Variation_Image extends Ecwid_Importer_Task
253
- {
254
- public static $type = 'upload_product_variation_image';
255
-
256
- public function execute( Ecwid_Importer $exporter, array $data ) {
257
- $api = new Ecwid_Api_V3();
258
-
259
- $product_id = get_post_meta( $data['product_id'], '_ecwid_product_id', true );
260
- $variation_id = get_post_meta( $data['variation_id'], '_ecwid_variation_id', true );
261
-
262
- $file = get_attached_file ( get_post_thumbnail_id( $data['variation_id'] ) );
263
-
264
- if ( !$product_id ) {
265
- return array(
266
- 'status' => 'error',
267
- 'data' => 'skipped',
268
- 'message' => 'parent product was not imported. data:' . var_export($data, true)
269
- );
270
- }
271
-
272
- if ( !$variation_id ) {
273
- return array(
274
- 'status' => 'error',
275
- 'data' => 'skipped',
276
- 'message' => 'parent variation was not imported. data:' . var_export($data, true)
277
- );
278
- }
279
-
280
- $data = array(
281
- 'productId' => $product_id,
282
- 'variationId' => $variation_id,
283
- 'data' => file_get_contents( $file )
284
- );
285
-
286
- $result = $api->upload_product_variation_image( $data );
287
-
288
- $return = array(
289
- 'type' => self::$type
290
- );
291
- if ( $result['response']['code'] == '200' ) {
292
- $result_object = json_decode( $result['body'] );
293
-
294
- $return['status'] = 'success';
295
- $return['data'] = $result_object;
296
- } else {
297
- $return['status'] = 'error';
298
- $return['data'] = $result;
299
- }
300
-
301
- return $return;
302
- }
303
-
304
- public static function build( array $data ) {
305
- return array(
306
- 'type' => self::$type,
307
- 'product_id' => $data['product_id'],
308
- 'variation_id' => $data['variation_id']
309
- );
310
- }
311
- }
312
-
313
- class Ecwid_Importer_Task_Upload_Category_Image extends Ecwid_Importer_Task
314
- {
315
- public static $type = 'upload_category_image';
316
-
317
- public function execute( Ecwid_Importer $exporter, array $category_data ) {
318
- $api = new Ecwid_Api_V3();
319
-
320
- $woo_id = $category_data['woo_id'];
321
-
322
- // get the thumbnail id using the queried category term_id
323
- $thumbnail_id = get_term_meta( $woo_id, 'thumbnail_id', true );
324
- $file = get_attached_file ( $thumbnail_id );
325
-
326
- $category_id = $exporter->get_ecwid_category_id( $woo_id );
327
- if ( !$category_id ) {
328
- return array(
329
- 'status' => 'error',
330
- 'data' => 'skipped',
331
- 'message' => 'parent category was not imported'
332
- );
333
- }
334
-
335
- $data = array(
336
- 'categoryId' => $category_id,
337
- 'data' => file_get_contents( $file )
338
- );
339
-
340
- $result = $api->upload_category_image( $data );
341
-
342
- $return = array(
343
- 'type' => self::$type
344
- );
345
- if ( $result['response']['code'] == '200' ) {
346
- $result_object = json_decode( $result['body'] );
347
-
348
- $return['status'] = 'success';
349
- $return['data'] = $result_object;
350
- } else {
351
- $return['status'] = 'error';
352
- $return['data'] = $result;
353
- }
354
-
355
- return $return;
356
- }
357
-
358
- public static function build( array $data ) {
359
- return array(
360
- 'type' => self::$type,
361
- 'woo_id' => $data['woo_id']
362
- );
363
- }
364
- }
365
-
366
- class Ecwid_Importer_Task_Upload_Product_Image extends Ecwid_Importer_Task
367
- {
368
- public static $type = 'upload_product_image';
369
-
370
- public function execute( Ecwid_Importer $exporter, array $product_data ) {
371
- $api = new Ecwid_Api_V3();
372
-
373
- $file = get_attached_file ( get_post_thumbnail_id( $product_data['woo_id'] ) );
374
-
375
- $product_id = $exporter->get_ecwid_product_id( $product_data['woo_id'] );
376
- if ( !$product_id ) {
377
- return array(
378
- 'status' => 'error',
379
- 'data' => 'skipped',
380
- 'message' => 'Parent product was not imported for product #' . $product_data['woo_id']
381
- );
382
- }
383
-
384
- $data = array(
385
- 'productId' => $product_id,
386
- 'data' => file_get_contents( $file )
387
- );
388
-
389
- $result = $api->upload_product_image( $data );
390
-
391
- $return = array(
392
- 'type' => self::$type
393
- );
394
- if ( $result['response']['code'] == '200' ) {
395
- $result_object = json_decode( $result['body'] );
396
-
397
- $return['status'] = 'success';
398
- $return['data'] = $result_object;
399
- } else {
400
- $return['status'] = 'error';
401
- $return['data'] = $result;
402
- }
403
-
404
- return $return;
405
- }
406
-
407
- public static function build( array $data ) {
408
- return array(
409
- 'type' => self::$type,
410
- 'woo_id' => $data['woo_id']
411
- );
412
- }
413
- }
414
-
415
- class Ecwid_Importer_Task_Upload_Product_Gallery_Image extends Ecwid_Importer_Task
416
- {
417
- public static $type = 'upload_product_gallery_image';
418
-
419
- public function execute( Ecwid_Importer $exporter, array $product_data ) {
420
- $api = new Ecwid_Api_V3();
421
-
422
- $file = get_attached_file( $product_data['image_id'] );
423
-
424
- $product_id = get_post_meta( $product_data['product_id'], '_ecwid_product_id', true );
425
-
426
- if ( !$product_id ) {
427
- return array(
428
- 'status' => 'error',
429
- 'data' => 'skipped',
430
- 'message' => 'Parent product was not imported'
431
- );
432
- }
433
-
434
- if ( !$file || !file_exists( $file ) || !is_readable( $file ) ) {
435
- return array(
436
- 'status' => 'error',
437
- 'data' => 'skipped',
438
- 'message' => 'File not found for product#' . $product_data['product_id'] . ' image ' . $product_data['image_id']
439
- );
440
- }
441
-
442
- $data = array(
443
- 'productId' => $product_id,
444
- 'data' => file_get_contents( $file )
445
- );
446
-
447
- $result = $api->upload_product_gallery_image( $data );
448
-
449
- $return = array(
450
- 'type' => self::$type
451
- );
452
- if ( $result['response']['code'] == '200' ) {
453
- $result_object = json_decode( $result['body'] );
454
-
455
- $return['status'] = 'success';
456
- $return['data'] = $result_object;
457
- } else {
458
- $return['status'] = 'error';
459
- $return['data'] = $result;
460
- }
461
-
462
- return $return;
463
- }
464
-
465
- public static function build( array $data ) {
466
- return array(
467
- 'type' => self::$type,
468
- 'product_id' => $data['product_id'],
469
- 'image_id' => $data['image_id']
470
- );
471
- }
472
- }
473
-
474
- class Ecwid_Importer_Task_Create_Product_Variation extends Ecwid_Importer_Task
475
- {
476
- public static $type = 'create_variation';
477
-
478
- public function execute( Ecwid_Importer $exporter, array $data ) {
479
- $api = new Ecwid_Api_V3();
480
-
481
- $p = wc_get_product( $data['woo_id'] );
482
- $attributes = $p->get_attributes();
483
- $vars = $p->get_available_variations();
484
-
485
- $variation_data = array(
486
- 'productId' => $exporter->get_ecwid_product_id( $data['woo_id'] ),
487
- 'options' => array()
488
- );
489
-
490
- foreach ( $vars as $var ) {
491
- if ( $var['variation_id'] != $data['var_id'] ) {
492
- continue;
493
- }
494
-
495
- foreach ($attributes as $internal_name => $attribute) {
496
- $tax_attribute = $attribute->get_taxonomy_object();
497
-
498
- $name = '';
499
- if ( $tax_attribute ) {
500
- $name = $tax_attribute->attribute_label;
501
- } else {
502
- $name = $attribute->get_name();
503
- }
504
-
505
- $value = $var['attributes']['attribute_' . strtolower($internal_name)];
506
-
507
- $variation_data['options'][] = array(
508
- 'name' => $name,
509
- 'value' => $value
510
- );
511
- }
512
 
513
- $variation_data['price'] = $var['display_price'];
514
- if ($var['weight']) {
515
- $variation_data['weight'] = $var['weight'];
516
- }
517
- if ($var['max_qty']) {
518
- $variation_data['quantity'] = $var['max_qty'];
519
- }
520
-
521
- if ( $var['sku'] != $p->get_sku() ) {
522
- $variation_data['sku'] = $var['sku'];
523
- }
524
-
525
- break;
526
- }
527
-
528
- $result = $api->create_product_variation(
529
- $variation_data
530
- );
531
-
532
- $return = array(
533
- 'type' => self::$type
534
- );
535
- if ( $result['response']['code'] == '200' ) {
536
- $result_object = json_decode( $result['body'] );
537
-
538
- update_post_meta( $data['var_id'], '_ecwid_variation_id', $result_object->id );
539
-
540
- $return['status'] = 'success';
541
- $return['data'] = $result_object;
542
- } else {
543
- $return['status'] = 'error';
544
- $return['data'] = $result;
545
- }
546
-
547
- return $return;
548
- }
549
-
550
- public static function build( array $data ) {
551
- return array(
552
- 'type' => self::$type,
553
- 'woo_id' => $data['woo_id'],
554
- 'var_id' => $data['var_id']
555
- );
556
- }
557
- }
558
-
559
- class Ecwid_Importer_Task_Create_Category extends Ecwid_Importer_Task
560
- {
561
- public static $type = 'create_category';
562
-
563
- public function execute( Ecwid_Importer $exporter, array $category_data ) {
564
- $api = new Ecwid_Api_V3();
565
-
566
- $category = get_term_by( 'id', $category_data['woo_id'], 'product_cat' );
567
- $data = array(
568
- 'name' => $category->name,
569
- 'parentId' => $exporter->get_ecwid_category_id( $category->parent ),
570
- 'description' => $category->description
571
- );
572
-
573
- $ecwid_category_id = get_term_meta( $category_data['woo_id'], 'ecwid_category_id', true );
574
- if ( $ecwid_category_id ) {
575
- $result = $api->update_category( $data, $ecwid_category_id );
576
- } else {
577
- $result = $api->create_category(
578
- $data
579
  );
580
 
581
- if ( $result['response']['code'] == 200 ) {
582
- $result_object = json_decode( $result['body'] );
583
- $ecwid_category_id = $result_object->id;
584
- }
585
- }
586
-
587
- $return = array(
588
- 'type' => self::$type
589
- );
590
- if ( $result['response']['code'] == '200' ) {
591
- $exporter->save_ecwid_category( $category_data['woo_id'], $ecwid_category_id );
592
- update_term_meta( $category_data['woo_id'], 'ecwid_category_id', $ecwid_category_id );
593
-
594
- $return['status'] = 'success';
595
- $return['data'] = json_decode( $result['body'] );
596
- } else {
597
- $return['status'] = 'error';
598
- $return['data'] = $result;
599
  }
600
 
601
- return $return;
602
- }
603
-
604
- public static function build( array $data ) {
605
  return array(
606
- 'type' => self::$type,
607
- 'woo_id' => $data['woo_id']
 
608
  );
609
  }
610
  }
5
 
6
  const WC_POST_TYPE_PRODUCT = 'product';
7
 
8
+ const STATUS_SUCCESS = 'success';
9
+ const STATUS_ERROR = 'error';
10
+
11
  public static $type;
12
 
13
  public static function build( array $data ) {
65
  protected function _result_success()
66
  {
67
  return array(
68
+ 'status' => self::STATUS_SUCCESS
69
  );
70
 
71
  }
76
 
77
  );
78
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
 
80
+ protected function _is_api_result_error( $result ) {
81
+ return is_wp_error( $result )
82
+ || !is_array( $result )
83
+ || !isset( $result['body'] )
84
+ || !isset( $result['response'] )
85
+ || !isset( $result['response']['code'] )
86
+ || $result['response']['code'] != '200';
87
+ ;
88
+ }
89
+ protected function _process_api_result( $result, $sent_data ) {
90
+ if ( $this->_is_api_result_error( $result )
91
+ ) {
92
+ $result = array(
93
+ 'type' => static::$type,
94
+ 'status' => self::STATUS_ERROR,
95
+ 'data' => $result,
96
+ 'sent_data' => $sent_data
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97
  );
98
 
99
+ return $result;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
100
  }
101
 
 
 
 
 
102
  return array(
103
+ 'type' => static::$type,
104
+ 'status' => self::STATUS_SUCCESS,
105
+ 'data' => json_decode( $result['body'] )
106
  );
107
  }
108
  }
includes/importer/class-ecwid-importer.php CHANGED
@@ -46,6 +46,11 @@ class Ecwid_Importer
46
 
47
  public function tick()
48
  {
 
 
 
 
 
49
  set_time_limit(0);
50
  $results = array();
51
 
@@ -149,11 +154,36 @@ class Ecwid_Importer
149
  return $progress;
150
  }
151
 
152
- public function append_after_current( $task ) {
153
 
154
  $this->_tasks[] = $task;
 
 
155
  //array_splice( $this->_tasks, (int)$this->_get_current_task() + 1, 0, array( $task ) );
156
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
157
 
158
  public function append_after_type( $task ) {
159
  $ind = $this->_get_current_task();
@@ -164,7 +194,7 @@ class Ecwid_Importer
164
  $ind++;
165
  }
166
 
167
- array_splice( $this->_tasks, $ind + 1, 0, array( $task ) );
168
  }
169
 
170
  public function has_begun()
@@ -187,7 +217,7 @@ class Ecwid_Importer
187
 
188
  $categories = get_option( self::OPTION_CATEGORIES, array() );
189
 
190
- return $categories[$woo_category_id];
191
  }
192
 
193
  public function save_ecwid_category( $woo_category_id, $ecwid_category_id )
@@ -221,7 +251,7 @@ class Ecwid_Importer
221
 
222
  protected function _build_tasks()
223
  {
224
- $this->append_after_current(
225
  Ecwid_Importer_Task_Main::build( array() )
226
  );
227
  }
@@ -281,6 +311,8 @@ class Ecwid_Importer
281
  if ( self::count_ecwid_demo_products() > 0 && self::count_ecwid_demo_products() == self::count_ecwid_products() ) {
282
  $this->_set_setting( self::SETTING_DELETE_DEMO, true );
283
  }
 
 
284
  }
285
 
286
  protected static function _get_woo_categories( $args ) {
46
 
47
  public function tick()
48
  {
49
+
50
+ $task = Ecwid_Importer_Task_Create_Product::build(array('woo_id' => '596'));
51
+ $t = new Ecwid_Importer_Task_Create_Product();
52
+ $t->execute($this, $task);
53
+
54
  set_time_limit(0);
55
  $results = array();
56
 
154
  return $progress;
155
  }
156
 
157
+ public function append_task( $task ) {
158
 
159
  $this->_tasks[] = $task;
160
+
161
+ return count( $this->_tasks ) - 1;
162
  //array_splice( $this->_tasks, (int)$this->_get_current_task() + 1, 0, array( $task ) );
163
  }
164
+
165
+ /**
166
+ * Appends $task as a child of current task. It skips current task, skips all task with the same type
167
+ * and appends $task after all its siblings
168
+ *
169
+ * @param $task
170
+ */
171
+ public function append_child( $task ) {
172
+ $ind = $this->_get_current_task();
173
+
174
+ $ind++;
175
+ while ( isset( $this->_tasks[$ind] ) && $this->_tasks[$ind]['type'] == $task['type'] ) {
176
+ $ind++;
177
+ }
178
+
179
+ return $this->append_after( $task, $ind );
180
+ }
181
+
182
+ public function append_after( $task, $index ) {
183
+ array_splice( $this->_tasks, $index, 0, array( $task ) );
184
+
185
+ return $index;
186
+ }
187
 
188
  public function append_after_type( $task ) {
189
  $ind = $this->_get_current_task();
194
  $ind++;
195
  }
196
 
197
+ return $this->append_after( $task, $ind );
198
  }
199
 
200
  public function has_begun()
217
 
218
  $categories = get_option( self::OPTION_CATEGORIES, array() );
219
 
220
+ return @$categories[$woo_category_id];
221
  }
222
 
223
  public function save_ecwid_category( $woo_category_id, $ecwid_category_id )
251
 
252
  protected function _build_tasks()
253
  {
254
+ $this->append_task(
255
  Ecwid_Importer_Task_Main::build( array() )
256
  );
257
  }
311
  if ( self::count_ecwid_demo_products() > 0 && self::count_ecwid_demo_products() == self::count_ecwid_products() ) {
312
  $this->_set_setting( self::SETTING_DELETE_DEMO, true );
313
  }
314
+
315
+ $this->_set_setting( self::SETTING_UPDATE_BY_SKU, true );
316
  }
317
 
318
  protected static function _get_woo_categories( $args ) {
includes/importer/importer.php CHANGED
@@ -1,5 +1,7 @@
1
  <?php
2
 
 
 
3
  if (version_compare( phpversion(), '5.6', '>=' ) ) {
4
  $oauth = new Ecwid_OAuth();
5
 
1
  <?php
2
 
3
+
4
+
5
  if (version_compare( phpversion(), '5.6', '>=' ) ) {
6
  $oauth = new Ecwid_OAuth();
7
 
includes/importer/task/class-ecwid-importer-task-create-category.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Ecwid_Importer_Task_Create_Category extends Ecwid_Importer_Task
4
+ {
5
+ public static $type = 'create_category';
6
+
7
+ public function execute( Ecwid_Importer $exporter, array $category_data ) {
8
+ $api = new Ecwid_Api_V3();
9
+
10
+ $category = get_term_by( 'id', $category_data['woo_id'], 'product_cat' );
11
+ $data = array(
12
+ 'name' => html_entity_decode( $category->name ),
13
+ 'parentId' => $exporter->get_ecwid_category_id( $category->parent ),
14
+ 'description' => $category->description
15
+ );
16
+
17
+ $ecwid_category_id = get_term_meta( $category_data['woo_id'], 'ecwid_category_id', true );
18
+
19
+ $result = false;
20
+
21
+ if ( $ecwid_category_id ) {
22
+ $result = $api->update_category( $data, $ecwid_category_id );
23
+
24
+ if ( $this->_is_api_result_error( $result ) ) {
25
+ $ecwid_category_id = null;
26
+ };
27
+ }
28
+
29
+ if ( !$ecwid_category_id ) {
30
+ $result = $api->create_category(
31
+ $data
32
+ );
33
+
34
+ if ( $result['response']['code'] == 200 ) {
35
+ $result_object = json_decode( $result['body'] );
36
+ $ecwid_category_id = $result_object->id;
37
+ }
38
+ }
39
+
40
+ $return = self::_process_api_result( $result, $data );
41
+
42
+ if ( $return['status'] == self::STATUS_SUCCESS ) {
43
+ $exporter->save_ecwid_category( $category_data['woo_id'], $ecwid_category_id );
44
+ update_term_meta( $category_data['woo_id'], 'ecwid_category_id', $ecwid_category_id );
45
+ }
46
+
47
+ return $return;
48
+ }
49
+
50
+ public static function build( array $data ) {
51
+ return array(
52
+ 'type' => self::$type,
53
+ 'woo_id' => $data['woo_id']
54
+ );
55
+ }
56
+ }
includes/importer/task/class-ecwid-importer-task-create-product-variation.php ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Ecwid_Importer_Task_Create_Product_Variation extends Ecwid_Importer_Task
4
+ {
5
+ public static $type = 'create_variation';
6
+
7
+ public function execute( Ecwid_Importer $exporter, array $data ) {
8
+ $api = new Ecwid_Api_V3();
9
+
10
+ $p = wc_get_product( $data['woo_id'] );
11
+ $attributes = $p->get_attributes();
12
+ $vars = $p->get_available_variations();
13
+
14
+ $variation_data = array(
15
+ 'productId' => $exporter->get_ecwid_product_id( $data['woo_id'] ),
16
+ 'options' => array()
17
+ );
18
+
19
+ foreach ( $vars as $var ) {
20
+ if ( $var['variation_id'] != $data['var_id'] ) {
21
+ continue;
22
+ }
23
+
24
+ foreach ($attributes as $internal_name => $attribute) {
25
+ $tax_attribute = $attribute->get_taxonomy_object();
26
+
27
+ $name = '';
28
+ if ( $tax_attribute ) {
29
+ $name = $tax_attribute->attribute_label;
30
+ } else {
31
+ $name = $attribute->get_name();
32
+ }
33
+
34
+ $value = $var['attributes']['attribute_' . strtolower($internal_name)];
35
+
36
+ $variation_data['options'][] = array(
37
+ 'name' => $name,
38
+ 'value' => $value
39
+ );
40
+ }
41
+
42
+ $variation_data['price'] = $var['display_price'];
43
+ if ($var['weight']) {
44
+ $variation_data['weight'] = $var['weight'];
45
+ }
46
+ if ($var['max_qty']) {
47
+ $variation_data['quantity'] = $var['max_qty'];
48
+ }
49
+
50
+ if ( $var['sku'] != $p->get_sku() ) {
51
+ $variation_data['sku'] = $var['sku'];
52
+ }
53
+
54
+ break;
55
+ }
56
+
57
+ $result = $api->create_product_variation(
58
+ $variation_data
59
+ );
60
+
61
+ $return = self::_process_api_result( $result, $data );
62
+
63
+ if ( $return['status'] == self::STATUS_SUCCESS ) {
64
+ $result_object = json_decode( $result['body'] );
65
+
66
+ update_post_meta( $data['var_id'], '_ecwid_variation_id', $result_object->id );
67
+ }
68
+
69
+ return $return;
70
+ }
71
+
72
+ public static function build( array $data ) {
73
+ return array(
74
+ 'type' => self::$type,
75
+ 'woo_id' => $data['woo_id'],
76
+ 'var_id' => $data['var_id']
77
+ );
78
+ }
79
+ }
includes/importer/task/class-ecwid-importer-task-create-product.php ADDED
@@ -0,0 +1,140 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Ecwid_Importer_Task_Create_Product extends Ecwid_Importer_Task
4
+ {
5
+ public static $type = 'create_product';
6
+
7
+ const WC_PRODUCT_TYPE_VARIABLE = 'variable';
8
+
9
+ public function execute( Ecwid_Importer $exporter, array $product_data ) {
10
+
11
+ $api = new Ecwid_Api_V3( );
12
+
13
+ $woo_id = $product_data['woo_id'];
14
+
15
+ $post = get_post( $woo_id );
16
+ $product = wc_get_product( $woo_id );
17
+
18
+ $data = array(
19
+ 'name' => $post->post_title,
20
+ 'price' => get_post_meta( $woo_id, '_regular_price', true ),
21
+ 'description' => $product->get_description(),
22
+ 'isShippingRequired' => get_post_meta( $woo_id, '_virtual', true ) != 'yes',
23
+ 'categoryIds' => array(),
24
+ 'showOnFrontpage' => (int) $product->get_featured()
25
+ );
26
+
27
+ $meta = get_post_meta( $woo_id, '_sku', true );
28
+ if ( !empty( $meta ) ) {
29
+ $data['sku'] = get_post_meta( $woo_id, '_sku', true );
30
+ }
31
+
32
+ if ( get_post_meta( $woo_id, '_manage_stock', true ) == 'yes' ) {
33
+ $data['unlimited'] = false;
34
+ $data['quantity'] = intval( get_post_meta( $woo_id, '_stock', true ) );
35
+ } else {
36
+ $data['unlimited'] = true;
37
+ }
38
+
39
+ if ($product->get_type() == self::WC_PRODUCT_TYPE_VARIABLE ) {
40
+ $data = array_merge( $data, $this->_get_variable_product_data( $woo_id ) );
41
+ }
42
+
43
+ $data['price'] = floatval( $data['price'] );
44
+
45
+ $categories = get_the_terms( $woo_id, 'product_cat' );
46
+
47
+ if ( $categories ) foreach ( $categories as $category ) {
48
+ $category_id = $exporter->get_ecwid_category_id( $category->term_id );
49
+
50
+ if ( $category_id ) {
51
+ $data['categoryIds'][] = $category_id;
52
+ }
53
+ }
54
+ if ( empty( $data['categoryIds'] ) ) {
55
+ unset( $data['categoryIds'] );
56
+ }
57
+
58
+ $ecwid_product_id = null;
59
+ $result = null;
60
+ $ecwid_id = null;
61
+
62
+ if ( $exporter->get_setting( Ecwid_Importer::SETTING_UPDATE_BY_SKU ) ) {
63
+ $products = $api->get_products( array( 'sku' => $data['sku'] ) );
64
+
65
+ if ( $products->total > 0 ) {
66
+ $ecwid_id = $products->items[0]->id;
67
+ $result = $api->update_product( $data, $ecwid_id );
68
+ $exporter->save_ecwid_product_id( $woo_id, $ecwid_id );
69
+ }
70
+ }
71
+
72
+ if ( !$result ) {
73
+ $result = $api->create_product( $data );
74
+
75
+ if ( !$this->_is_api_result_error($result) ) {
76
+ $result_object = json_decode( $result['body'] );
77
+ $ecwid_product_id = $result_object->id;
78
+ }
79
+ }
80
+
81
+ $return = $this->_process_api_result( $result, $data );
82
+
83
+ if ( $return['status'] == self::STATUS_SUCCESS ) {
84
+ $result_object = json_decode( $result['body'] );
85
+
86
+ update_post_meta( $woo_id, '_ecwid_product_id', $ecwid_id ? $ecwid_id : $result_object->id );
87
+ $exporter->save_ecwid_product_id( $woo_id, $ecwid_id ? $ecwid_id : $result_object->id );
88
+ }
89
+
90
+ return $return;
91
+ }
92
+
93
+ public function _get_variable_product_data( $id )
94
+ {
95
+ $result = array();
96
+
97
+ $product = new WC_Product_Variable( $id );
98
+ $result['price'] = $product->get_variation_price();
99
+
100
+ $attributes = $product->get_variation_attributes();
101
+ if ( $attributes && is_array( $attributes ) && count( $attributes ) > 0 ) {
102
+
103
+ $default_attributes = $product->get_default_attributes();
104
+ $result['options'] = array();
105
+ foreach ( $attributes as $name => $attribute ) {
106
+
107
+ $atts = $product->get_attributes();
108
+ $tax_attribute = $atts[strtolower($name)]->get_taxonomy_object();
109
+
110
+ if ($tax_attribute) {
111
+ $name = $tax_attribute->attribute_label;
112
+ }
113
+
114
+ $option = array( 'type' => 'SELECT', 'name' => $name, 'required' => true, 'choices' => array() );
115
+ foreach ( $attribute as $option_name ) {
116
+ $choice = array( 'text' => $option_name, 'priceModifier' => 0, 'priceModifierType' => 'ABSOLUTE' );
117
+ $option['choices'][] = $choice;
118
+ }
119
+ if ( @$default_attributes[$name] ) {
120
+ $ind = array_search( $default_attributes[$name], $attribute );
121
+
122
+ if ( $ind !== false ) {
123
+ $option['defaultChoice'] = $ind;
124
+ }
125
+ }
126
+
127
+ $result['options'][] = $option;
128
+ }
129
+ }
130
+
131
+ return $result;
132
+ }
133
+
134
+ public static function build( array $data ) {
135
+ return array(
136
+ 'type' => self::$type,
137
+ 'woo_id' => $data['woo_id']
138
+ );
139
+ }
140
+ }
includes/importer/task/class-ecwid-importer-task-delete-products.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Ecwid_Importer_Task_Delete_Products extends Ecwid_Importer_Task
4
+ {
5
+ public static $type = 'delete_products';
6
+
7
+ public function execute( Ecwid_Importer $exporter, array $data ) {
8
+ $api = new Ecwid_Api_V3();
9
+
10
+ $ids = $data['ids'];
11
+
12
+ $result = $api->delete_products( $ids );
13
+
14
+ return self::_process_api_result( $result, $data );
15
+ }
16
+
17
+ public static function build( array $ids ) {
18
+ return array(
19
+ 'type' => self::$type,
20
+ 'ids' => $ids
21
+ );
22
+ }
23
+ }
includes/importer/task/class-ecwid-importer-task-import-woo-categories.php CHANGED
@@ -10,14 +10,22 @@ class Ecwid_Importer_Task_Import_Woo_Categories extends Ecwid_Importer_Task {
10
  return $this->_result_nothing();
11
  }
12
  $categories = $importer->gather_categories();
 
 
 
 
 
 
13
 
14
  foreach ( @$categories as $category ) {
15
- $tasks[] = Ecwid_Importer_Task_Create_Category::build( $category );
16
  if ( $category['has_image'] ) {
17
- $tasks[] = Ecwid_Importer_Task_Upload_Category_Image::build( $category );
 
 
 
18
  }
19
  }
20
-
21
  return $this->_result_success();
22
  }
23
  }
10
  return $this->_result_nothing();
11
  }
12
  $categories = $importer->gather_categories();
13
+
14
+ foreach ( @$categories as $category ) {
15
+ $index = $importer->append_child(
16
+ Ecwid_Importer_Task_Create_Category::build( $category )
17
+ );
18
+ }
19
 
20
  foreach ( @$categories as $category ) {
 
21
  if ( $category['has_image'] ) {
22
+ $importer->append_after(
23
+ Ecwid_Importer_Task_Upload_Category_Image::build( $category ),
24
+ $index++
25
+ );
26
  }
27
  }
28
+
29
  return $this->_result_success();
30
  }
31
  }
includes/importer/task/class-ecwid-importer-task-import-woo-product.php CHANGED
@@ -12,18 +12,25 @@ class Ecwid_Importer_Task_Import_Woo_Product extends Ecwid_Importer_Task {
12
  }
13
 
14
  public function execute( Ecwid_Importer $importer, array $product ) {
15
- /*
16
- $importer->append_after_current(
17
- Ecwid_Importer_Task_Create_Product::build( $product )
18
- );
19
 
20
- $thumb = get_post_thumbnail_id( $product['woo_id'] );
21
- if ( $thumb ) {
22
- $importer->append_after_current(
23
- Ecwid_Importer_Task_Upload_Product_Image::build( $product )
 
 
 
 
 
 
 
 
 
 
 
24
  );
25
  }
26
- */
27
  $p = wc_get_product( $product['woo_id'] );
28
 
29
  if ( $p instanceof WC_Product_Variable ) {
@@ -32,7 +39,7 @@ class Ecwid_Importer_Task_Import_Woo_Product extends Ecwid_Importer_Task {
32
 
33
  foreach ( $vars as $var ) {
34
 
35
- $importer->append_after_current(
36
  Ecwid_Importer_Task_Create_Product_Variation::build(
37
  array(
38
  'woo_id' => $product['woo_id'],
@@ -42,7 +49,7 @@ class Ecwid_Importer_Task_Import_Woo_Product extends Ecwid_Importer_Task {
42
  );
43
 
44
  if ( $var['image_id'] && $var['image_id'] != $p->get_image_id() ) {
45
- $importer->append_after_current(
46
  Ecwid_Importer_Task_Upload_Product_Variation_Image::build(
47
  array(
48
  'product_id' => $product['woo_id'],
@@ -56,7 +63,7 @@ class Ecwid_Importer_Task_Import_Woo_Product extends Ecwid_Importer_Task {
56
 
57
  if ( $p->get_gallery_image_ids() ) {
58
  foreach ( $p->get_gallery_image_ids() as $image ) {
59
- $importer->append_after_current(
60
  Ecwid_Importer_Task_Upload_Product_Gallery_Image::build(
61
  array(
62
  'product_id' => $product['woo_id'],
12
  }
13
 
14
  public function execute( Ecwid_Importer $importer, array $product ) {
 
 
 
 
15
 
16
+ $importer->append_task(
17
+ Ecwid_Importer_Task_Create_Product::build(
18
+ array(
19
+ 'woo_id' => $product['woo_id']
20
+ )
21
+ )
22
+ );
23
+
24
+ if ( get_post_thumbnail_id( $product['woo_id'] ) ) {
25
+ $importer->append_task(
26
+ Ecwid_Importer_Task_Upload_Product_Image::build(
27
+ array(
28
+ 'woo_id' => $product['woo_id']
29
+ )
30
+ )
31
  );
32
  }
33
+
34
  $p = wc_get_product( $product['woo_id'] );
35
 
36
  if ( $p instanceof WC_Product_Variable ) {
39
 
40
  foreach ( $vars as $var ) {
41
 
42
+ $importer->append_task(
43
  Ecwid_Importer_Task_Create_Product_Variation::build(
44
  array(
45
  'woo_id' => $product['woo_id'],
49
  );
50
 
51
  if ( $var['image_id'] && $var['image_id'] != $p->get_image_id() ) {
52
+ $importer->append_task(
53
  Ecwid_Importer_Task_Upload_Product_Variation_Image::build(
54
  array(
55
  'product_id' => $product['woo_id'],
63
 
64
  if ( $p->get_gallery_image_ids() ) {
65
  foreach ( $p->get_gallery_image_ids() as $image ) {
66
+ $importer->append_task(
67
  Ecwid_Importer_Task_Upload_Product_Gallery_Image::build(
68
  array(
69
  'product_id' => $product['woo_id'],
includes/importer/task/class-ecwid-importer-task-import-woo-products-batch.php CHANGED
@@ -17,7 +17,7 @@ class Ecwid_Importer_Task_Import_Woo_Products_Batch extends Ecwid_Importer_Task
17
 
18
  if ( $products ) {
19
  foreach ( $products as $id ) {
20
- $importer->append_after_current(
21
  Ecwid_Importer_Task_Import_Woo_Product::build(
22
  array( 'id' => $id )
23
  )
17
 
18
  if ( $products ) {
19
  foreach ( $products as $id ) {
20
+ $importer->append_child(
21
  Ecwid_Importer_Task_Import_Woo_Product::build(
22
  array( 'id' => $id )
23
  )
includes/importer/task/class-ecwid-importer-task-import-woo-products.php CHANGED
@@ -7,18 +7,13 @@ class Ecwid_Importer_Task_Import_Woo_Products extends Ecwid_Importer_Task {
7
  const BATCH_SIZE = 50;
8
 
9
  public function execute( Ecwid_Importer $importer, array $data ) {
10
-
11
-
12
- $products = new WP_Query( array(
13
- 'post_type' => self::WC_POST_TYPE_PRODUCT
14
- ) );
15
-
16
- $count = $products->post_count;
17
 
18
  $ind = 0;
19
 
20
  while ( $ind * self::BATCH_SIZE < $count ) {
21
- $importer->append_after_current(
22
  Ecwid_Importer_Task_Import_Woo_Products_Batch::build(
23
  array(
24
  'start' => $ind * self::BATCH_SIZE,
7
  const BATCH_SIZE = 50;
8
 
9
  public function execute( Ecwid_Importer $importer, array $data ) {
10
+
11
+ $count = wp_count_posts( self::WC_POST_TYPE_PRODUCT )->publish;
 
 
 
 
 
12
 
13
  $ind = 0;
14
 
15
  while ( $ind * self::BATCH_SIZE < $count ) {
16
+ $importer->append_task(
17
  Ecwid_Importer_Task_Import_Woo_Products_Batch::build(
18
  array(
19
  'start' => $ind * self::BATCH_SIZE,
includes/importer/task/class-ecwid-importer-task-main.php CHANGED
@@ -7,12 +7,12 @@ class Ecwid_Importer_Task_Main extends Ecwid_Importer_Task {
7
  public function execute( Ecwid_Importer $importer, array $data ) {
8
 
9
  if ( $importer->get_setting( Ecwid_Importer::SETTING_DELETE_DEMO ) && Ecwid_Importer::count_ecwid_demo_products() ) {
10
- $importer->append_after_current(
11
  Ecwid_Importer_Task_Delete_Products::build( Ecwid_Importer::get_ecwid_demo_products() )
12
  );
13
  }
14
 
15
- $importer->append_after_current( Ecwid_Importer_Task_Import_Woo_Categories::build( array() ) );
16
- $importer->append_after_current( Ecwid_Importer_Task_Import_Woo_Products::build( array() ) );
17
  }
18
  }
7
  public function execute( Ecwid_Importer $importer, array $data ) {
8
 
9
  if ( $importer->get_setting( Ecwid_Importer::SETTING_DELETE_DEMO ) && Ecwid_Importer::count_ecwid_demo_products() ) {
10
+ $importer->append_task(
11
  Ecwid_Importer_Task_Delete_Products::build( Ecwid_Importer::get_ecwid_demo_products() )
12
  );
13
  }
14
 
15
+ $importer->append_task( Ecwid_Importer_Task_Import_Woo_Categories::build( array() ) );
16
+ $importer->append_task( Ecwid_Importer_Task_Import_Woo_Products::build( array() ) );
17
  }
18
  }
includes/importer/task/class-ecwid-importer-task-upload-category-image.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Ecwid_Importer_Task_Upload_Category_Image extends Ecwid_Importer_Task
4
+ {
5
+ public static $type = 'upload_category_image';
6
+
7
+ public function execute( Ecwid_Importer $exporter, array $category_data ) {
8
+ $api = new Ecwid_Api_V3();
9
+
10
+ $woo_id = $category_data['woo_id'];
11
+
12
+ // get the thumbnail id using the queried category term_id
13
+ $thumbnail_id = get_term_meta( $woo_id, 'thumbnail_id', true );
14
+ $file = get_attached_file ( $thumbnail_id );
15
+
16
+ $category_id = $exporter->get_ecwid_category_id( $woo_id );
17
+ if ( !$category_id ) {
18
+ return array(
19
+ 'status' => 'error',
20
+ 'data' => 'skipped',
21
+ 'message' => 'parent category was not imported'
22
+ );
23
+ }
24
+
25
+ $data = array(
26
+ 'categoryId' => $category_id,
27
+ 'data' => file_get_contents( $file )
28
+ );
29
+
30
+ $result = $api->upload_category_image( $data );
31
+
32
+ return self::_process_api_result( $result, $data );
33
+ }
34
+
35
+ public static function build( array $data ) {
36
+ return array(
37
+ 'type' => self::$type,
38
+ 'woo_id' => $data['woo_id']
39
+ );
40
+ }
41
+ }
includes/importer/task/class-ecwid-importer-task-upload-product-gallery-image.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Ecwid_Importer_Task_Upload_Product_Gallery_Image extends Ecwid_Importer_Task
4
+ {
5
+ public static $type = 'upload_product_gallery_image';
6
+
7
+ public function execute( Ecwid_Importer $exporter, array $product_data ) {
8
+ $api = new Ecwid_Api_V3();
9
+
10
+ $file = get_attached_file( $product_data['image_id'] );
11
+
12
+ $product_id = get_post_meta( $product_data['product_id'], '_ecwid_product_id', true );
13
+
14
+ if ( !$product_id ) {
15
+ return array(
16
+ 'status' => 'error',
17
+ 'data' => 'skipped',
18
+ 'message' => 'Parent product was not imported'
19
+ );
20
+ }
21
+
22
+ if ( !$file || !file_exists( $file ) || !is_readable( $file ) ) {
23
+ return array(
24
+ 'status' => 'error',
25
+ 'data' => 'skipped',
26
+ 'message' => 'File not found for product#' . $product_data['product_id'] . ' image ' . $product_data['image_id']
27
+ );
28
+ }
29
+
30
+ $data = array(
31
+ 'productId' => $product_id,
32
+ 'data' => file_get_contents( $file )
33
+ );
34
+
35
+ $result = $api->upload_product_gallery_image( $data );
36
+
37
+ return self::_process_api_result( $result, $data );
38
+ }
39
+
40
+ public static function build( array $data ) {
41
+ return array(
42
+ 'type' => self::$type,
43
+ 'product_id' => $data['product_id'],
44
+ 'image_id' => $data['image_id']
45
+ );
46
+ }
47
+ }
includes/importer/task/class-ecwid-importer-task-upload-product-image.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Ecwid_Importer_Task_Upload_Product_Image extends Ecwid_Importer_Task
4
+ {
5
+ public static $type = 'upload_product_image';
6
+
7
+ public function execute( Ecwid_Importer $exporter, array $product_data ) {
8
+ $api = new Ecwid_Api_V3();
9
+
10
+ $file = get_attached_file ( get_post_thumbnail_id( $product_data['woo_id'] ) );
11
+
12
+ $product_id = $exporter->get_ecwid_product_id( $product_data['woo_id'] );
13
+ if ( !$product_id ) {
14
+ return array(
15
+ 'status' => 'error',
16
+ 'data' => 'skipped',
17
+ 'message' => 'Parent product was not imported for product #' . $product_data['woo_id']
18
+ );
19
+ }
20
+
21
+ $data = array(
22
+ 'productId' => $product_id,
23
+ 'data' => file_get_contents( $file )
24
+ );
25
+
26
+ $result = $api->upload_product_image( $data );
27
+
28
+ return self::_process_api_result( $result, $data );
29
+ }
30
+
31
+ public static function build( array $data ) {
32
+ return array(
33
+ 'type' => self::$type,
34
+ 'woo_id' => $data['woo_id']
35
+ );
36
+ }
37
+ }
includes/importer/task/class-ecwid-importer-task-upload-product-variation-image.php ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Ecwid_Importer_Task_Upload_Product_Variation_Image extends Ecwid_Importer_Task
4
+ {
5
+ public static $type = 'upload_product_variation_image';
6
+
7
+ public function execute( Ecwid_Importer $exporter, array $data ) {
8
+ $api = new Ecwid_Api_V3();
9
+
10
+ $product_id = get_post_meta( $data['product_id'], '_ecwid_product_id', true );
11
+ $variation_id = get_post_meta( $data['variation_id'], '_ecwid_variation_id', true );
12
+
13
+ $file = get_attached_file ( get_post_thumbnail_id( $data['variation_id'] ) );
14
+
15
+ if ( !$product_id ) {
16
+ return array(
17
+ 'status' => 'error',
18
+ 'data' => 'skipped',
19
+ 'message' => 'parent product was not imported. data:' . var_export($data, true)
20
+ );
21
+ }
22
+
23
+ if ( !$variation_id ) {
24
+ return array(
25
+ 'status' => 'error',
26
+ 'data' => 'skipped',
27
+ 'message' => 'parent variation was not imported. data:' . var_export($data, true)
28
+ );
29
+ }
30
+
31
+ $data = array(
32
+ 'productId' => $product_id,
33
+ 'variationId' => $variation_id,
34
+ 'data' => file_get_contents( $file )
35
+ );
36
+
37
+ $result = $api->upload_product_variation_image( $data );
38
+
39
+ return self::_process_api_result( $result, $data );
40
+ }
41
+
42
+ public static function build( array $data ) {
43
+ return array(
44
+ 'type' => self::$type,
45
+ 'product_id' => $data['product_id'],
46
+ 'variation_id' => $data['variation_id']
47
+ );
48
+ }
49
+ }
includes/integrations/class-ecwid-integration-aiosp.php CHANGED
@@ -15,6 +15,22 @@ class Ecwid_Integration_All_In_One_SEO_Pack
15
 
16
  add_filter( 'aiosp_sitemap_extra', array( $this, 'aiosp_hook_sitemap_extra' ) );
17
  add_filter( 'aiosp_sitemap_custom_ecwid', array( $this, 'aiosp_hook_sitemap_content') );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
  }
19
 
20
  // Disable titles, descriptions and canonical link on ecwid _escaped_fragment_ pages
15
 
16
  add_filter( 'aiosp_sitemap_extra', array( $this, 'aiosp_hook_sitemap_extra' ) );
17
  add_filter( 'aiosp_sitemap_custom_ecwid', array( $this, 'aiosp_hook_sitemap_content') );
18
+ add_filter( 'aiosp_sitemap_prio_item_filter', array($this, 'aiosp_hook_sitemap_prio_item_filter'), 10, 3 );
19
+ }
20
+
21
+ public function aiosp_hook_sitemap_prio_item_filter($pr_info, $post, $args)
22
+ {
23
+ $post_type = (string)$post->post_type;
24
+
25
+ if( $post_type == 'ec-product' ) {
26
+ return false;
27
+ }
28
+
29
+ if( $post_type == 'attachment' && strpos($pr_info['loc'], Ecwid_Store_Page::get_store_url()) === 0 ){
30
+ return false;
31
+ }
32
+
33
+ return $pr_info;
34
  }
35
 
36
  // Disable titles, descriptions and canonical link on ecwid _escaped_fragment_ pages
includes/integrations/class-ecwid-integration-gutenberg.php CHANGED
@@ -35,7 +35,7 @@ class Ecwid_Integration_Gutenberg {
35
  wp_enqueue_script( 'gutenberg-store' );
36
  EcwidPlatform::enqueue_style( 'store-popup' );
37
  }
38
-
39
  public function block_categories( $categories ) {
40
  return array_merge(
41
  $categories,
@@ -334,6 +334,9 @@ JS;
334
  */
335
  public static function get_blocks_on_page() {
336
  $post = get_post();
 
 
 
337
  if ( function_exists( 'gutenberg_parse_blocks' ) ) {
338
  $blocks = gutenberg_parse_blocks( $post->post_content );
339
  } else {
35
  wp_enqueue_script( 'gutenberg-store' );
36
  EcwidPlatform::enqueue_style( 'store-popup' );
37
  }
38
+
39
  public function block_categories( $categories ) {
40
  return array_merge(
41
  $categories,
334
  */
335
  public static function get_blocks_on_page() {
336
  $post = get_post();
337
+
338
+ if ( !$post ) return array();
339
+
340
  if ( function_exists( 'gutenberg_parse_blocks' ) ) {
341
  $blocks = gutenberg_parse_blocks( $post->post_content );
342
  } else {
includes/integrations/class-ecwid-integration-wpseo.php CHANGED
@@ -34,6 +34,48 @@ class Ecwid_Integration_WordPress_SEO_By_Yoast
34
  }
35
 
36
  add_filter( 'ecwid_title_separator', array( $this, 'get_title_separator' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  }
38
 
39
  public function filter_og_tags( $tags )
34
  }
35
 
36
  add_filter( 'ecwid_title_separator', array( $this, 'get_title_separator' ) );
37
+
38
+ add_filter( 'wpseo_sitemap_url', array( $this, 'wpseo_hook_sitemap_url' ), 10, 2 );
39
+ add_action( 'init', array($this, 'clear_ecwid_sitemap_index') );
40
+ }
41
+
42
+ public function wpseo_hook_sitemap_url( $output, $url )
43
+ {
44
+ $type = get_query_var( 'sitemap' );
45
+
46
+ if( $type == 'ec-product') {
47
+ return false;
48
+ }
49
+ }
50
+
51
+ public function clear_ecwid_sitemap_index() {
52
+
53
+ if( strpos( $_SERVER['REQUEST_URI'], 'sitemap_index.xml' ) !== false ) {
54
+ ob_start();
55
+ add_action('shutdown', array($this, 'shutdown_hook_ecwid_sitemap_clear'), 0);
56
+ }
57
+ }
58
+
59
+ public function shutdown_hook_ecwid_sitemap_clear()
60
+ {
61
+ $output = ob_get_contents();
62
+ ob_end_clean();
63
+
64
+ libxml_use_internal_errors(true);
65
+ $xml = simplexml_load_string($output);
66
+
67
+ if($xml !== false) {
68
+ foreach ($xml->sitemap as $sitemap) {
69
+ if( strpos( (string) $sitemap->loc, 'ec-product') !== false ) {
70
+ $dom = dom_import_simplexml($sitemap);
71
+ $dom->parentNode->removeChild($dom);
72
+ }
73
+ }
74
+
75
+ echo $xml->asXML();
76
+ } else {
77
+ echo $output;
78
+ }
79
  }
80
 
81
  public function filter_og_tags( $tags )
includes/widgets/class-ecwid-widget-products-base.php CHANGED
@@ -140,13 +140,7 @@ HTML;
140
  foreach ($this->_get_form_fields() as $field) {
141
  $name = $field['name'];
142
  if ( $name == 'number_of_products' ) {
143
- $num = intval($new_instance['number_of_products']);
144
- if ($num > $this->_max) {
145
- $num = $this->_max;
146
- } else if ($num < $this->_min) {
147
- $num = $this->_default;
148
- }
149
- $instance[$name] = intval($num);
150
  } else {
151
  $instance[$name] = strip_tags(stripslashes($new_instance[$name]));
152
  }
@@ -185,8 +179,14 @@ HTML;
185
  }
186
  }
187
 
188
- function is_valid_number_of_products($num) {
189
- return is_numeric($num) && $num <= $this->_max && $num >= $this->_min;
 
 
 
 
 
 
190
  }
191
 
192
  protected function _get_form_fields()
140
  foreach ($this->_get_form_fields() as $field) {
141
  $name = $field['name'];
142
  if ( $name == 'number_of_products' ) {
143
+ $instance[$name] = $this->_get_valid_number_of_products($new_instance['number_of_products']);
 
 
 
 
 
 
144
  } else {
145
  $instance[$name] = strip_tags(stripslashes($new_instance[$name]));
146
  }
179
  }
180
  }
181
 
182
+ function _get_valid_number_of_products($num) {
183
+ $num = intval($num);
184
+ if ($num > $this->_max) {
185
+ $num = $this->_max;
186
+ } else if ($num < $this->_min) {
187
+ $num = $this->_default;
188
+ }
189
+ return $num;
190
  }
191
 
192
  protected function _get_form_fields()
includes/widgets/class-ecwid-widget-recently-viewed.php CHANGED
@@ -47,23 +47,20 @@ class Ecwid_Widget_Recently_Viewed extends Ecwid_Widget_Products_List_Base {
47
  }
48
 
49
  if ($recently_viewed && isset($recently_viewed->products)) {
50
-
51
  $to_load = array();
52
-
53
  foreach ($recently_viewed->products as $product_data) {
54
  $product = Ecwid_Product::get_without_loading($product_data->id);
55
  if (!@$product->imageUrl) {
56
  $to_load[] = $product_data->id;
57
  }
58
  }
59
-
60
  if (!empty($to_load)) {
61
- Ecwid_Product::load_by_ids($to_load);
62
  }
63
  } else {
64
  return null;
65
  }
66
-
67
  return array_reverse($recently_viewed->products);
68
  }
69
 
47
  }
48
 
49
  if ($recently_viewed && isset($recently_viewed->products)) {
 
50
  $to_load = array();
 
51
  foreach ($recently_viewed->products as $product_data) {
52
  $product = Ecwid_Product::get_without_loading($product_data->id);
53
  if (!@$product->imageUrl) {
54
  $to_load[] = $product_data->id;
55
  }
56
  }
 
57
  if (!empty($to_load)) {
58
+ Ecwid_Product::preload_by_ids($to_load);
59
  }
60
  } else {
61
  return null;
62
  }
63
+
64
  return array_reverse($recently_viewed->products);
65
  }
66
 
index.php ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Nothing to see here.
4
+ */
js/dynamic-title.js ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery(document).ready(function() {
2
+ if ( jQuery( '.entry-title' ).length > 0 && typeof Ecwid !== 'undefined' ) {
3
+ Ecwid.OnPageLoaded.add(function(page) {
4
+
5
+ var el = jQuery( '.entry-title' ).eq(0);
6
+ if ( el.length === 0 ) return;
7
+
8
+ var isCategory = page.type === 'CATEGORY';
9
+ var isProduct = page.type === 'PRODUCT';
10
+
11
+ if ( !isCategory && !isProduct ) return;
12
+
13
+ var newTitle = jQuery('title').html();
14
+
15
+ if ( isCategory && page.categoryId === 0 || newTitle.length === 0 ) {
16
+ newTitle = ecwidOriginalTitle.title;
17
+ }
18
+
19
+ el.html( newTitle );
20
+ });
21
+ }
22
+ });
js/importer.js CHANGED
@@ -66,10 +66,15 @@ jQuery(document).ready(function() {
66
  jQuery(el).attr('onclick', 'return false').closest('label').addClass('readonly');
67
  });
68
 
69
- do_import = function () {
 
 
 
 
 
70
  jQuery.ajax({
71
  'url': ajaxurl,
72
- 'data': {'action': ecwid_importer.do_woo_import_action, settings: settings},
73
  'success': function (json) {
74
 
75
  try {
@@ -134,7 +139,7 @@ jQuery(document).ready(function() {
134
  });
135
  };
136
 
137
- do_import();
138
 
139
  doImportComplete = function( status ) {
140
  jQuery('#import-results-products').text(status.success.create_product || 0);
@@ -156,8 +161,6 @@ jQuery(document).ready(function() {
156
  if (errorContent.length > 0) {
157
  jQuery('.ecwid-importer .errors').show().find('pre').text(errorContent);
158
  }
159
-
160
-
161
  }
162
  };
163
 
66
  jQuery(el).attr('onclick', 'return false').closest('label').addClass('readonly');
67
  });
68
 
69
+ do_import = function (start = null) {
70
+
71
+ var data = {'action': ecwid_importer.do_woo_import_action, settings: settings};
72
+ if (start) {
73
+ data.reset = 1
74
+ }
75
  jQuery.ajax({
76
  'url': ajaxurl,
77
+ 'data': data,
78
  'success': function (json) {
79
 
80
  try {
139
  });
140
  };
141
 
142
+ do_import( true );
143
 
144
  doImportComplete = function( status ) {
145
  jQuery('#import-results-products').text(status.success.create_product || 0);
161
  if (errorContent.length > 0) {
162
  jQuery('.ecwid-importer .errors').show().find('pre').text(errorContent);
163
  }
 
 
164
  }
165
  };
166
 
js/store-editor-common.js CHANGED
@@ -37,4 +37,29 @@ function ecwid_get_store_shortcode(content) {
37
  }
38
 
39
  return found;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  }
37
  }
38
 
39
  return found;
40
+ }
41
+
42
+ function ecwid_create_gutenberged_shortcode_string( shortcode ) {
43
+
44
+ if ( typeof shortcode == 'string' ) return shortcode;
45
+
46
+ return shortcode.string();
47
+
48
+ var result = '<!-- wp:ecwid/store-block ';
49
+
50
+ var attributes = {
51
+ default_category_id: shortcode.attrs.named.default_category_id,
52
+ show_categories: shortcode.attrs.named.widgets.indexOf('categories') !== -1,
53
+ show_search: shortcode.attrs.named.widgets.indexOf('search') !== -1
54
+ }
55
+
56
+ result += JSON.stringify(attributes);
57
+
58
+ result += ' -->';
59
+
60
+ result += shortcode.string();
61
+
62
+ result += '<!-- /wp:ecwid/store-block -->';
63
+
64
+ return result;
65
  }
js/store-editor-mce.js CHANGED
@@ -218,23 +218,38 @@ tinymce.PluginManager.add( 'ecwid', function( editor ) {
218
  // Replace Read More/Next Page tags with images
219
  editor.onBeforeSetContent.add( function( editor, e ) {
220
  if ( e.content ) {
221
-
222
- found = ecwid_get_store_shortcode(e.content);
223
 
224
  if (!found) return;
225
 
 
 
 
226
  var content = e.content;
 
 
 
 
 
 
 
 
 
 
 
 
227
 
228
  var store = '<img height="200" width="100%" data-ecwid-shortcode="' + window.encodeURIComponent(found.content) + '" src="' + ecwid_store_svg + '" data-mce-placeholder="true" data-mce-resize="false" class="ecwid-store-editor mceItem">';
229
 
230
- e.content = e.content.substr(0, found.index) + store + e.content.substr(found.index + found.content.length);
231
  }
232
  });
233
 
234
  // Replace images with tags
235
  editor.onPostProcess.add( function( editor, e ) {
236
 
237
- if ( e.get ) {
238
 
239
  return e.content = e.content.replace( /(<img [^>]*data-ecwid-shortcode=[^>]+>)/g, function( match, image ) {
240
 
218
  // Replace Read More/Next Page tags with images
219
  editor.onBeforeSetContent.add( function( editor, e ) {
220
  if ( e.content ) {
221
+
222
+ var found = ecwid_get_store_shortcode(e.content);
223
 
224
  if (!found) return;
225
 
226
+ var start = found.index;
227
+ var end = found.index + found.content.length;
228
+
229
  var content = e.content;
230
+
231
+ var gutenStart = content.indexOf('<!-- wp:ecwid/store-block');
232
+ var gutenEnd = content.indexOf('<!-- /wp:ecwid/store-block -->') + '<!-- /wp:ecwid/store-block -->'.length;
233
+
234
+
235
+ if (gutenStart != -1 && gutenEnd != -1) {
236
+ var gutenberged = content.substr(gutenStart, gutenEnd);
237
+ if (gutenberged.indexOf(found.content) != -1) {
238
+ start = gutenStart;
239
+ end = gutenEnd;
240
+ }
241
+ }
242
 
243
  var store = '<img height="200" width="100%" data-ecwid-shortcode="' + window.encodeURIComponent(found.content) + '" src="' + ecwid_store_svg + '" data-mce-placeholder="true" data-mce-resize="false" class="ecwid-store-editor mceItem">';
244
 
245
+ e.content = e.content.substr(0, start) + store + e.content.substr(end);
246
  }
247
  });
248
 
249
  // Replace images with tags
250
  editor.onPostProcess.add( function( editor, e ) {
251
 
252
+ if ( e.get ) {
253
 
254
  return e.content = e.content.replace( /(<img [^>]*data-ecwid-shortcode=[^>]+>)/g, function( match, image ) {
255
 
js/store-editor-page.js CHANGED
@@ -1,4 +1,6 @@
1
- var createGutenbergedShortcodeString;
 
 
2
 
3
  jQuery(document).ready(function() {
4
  $popup = jQuery('#ecwid-store-popup-content');
@@ -106,14 +108,14 @@ jQuery(document).ready(function() {
106
  'minicart_layout': 'MiniAttachToProductBrowser'
107
  }
108
  }
109
-
110
  /*
111
  * Tests whether there is a valid store shortcode
112
  */
113
  checkEcwid = function() {
114
 
115
  var hasEcwid = false;
116
- if (typeof tinyMCE != 'undefined' && tinyMCE.activeEditor && !tinyMCE.activeEditor.isHidden()) {
117
  content = tinyMCE.activeEditor.getBody();
118
 
119
  hasEcwid = jQuery(content).find('.ecwid-store-editor').length > 0;
@@ -126,7 +128,7 @@ jQuery(document).ready(function() {
126
  } else {
127
  jQuery('.wp-media-buttons').removeClass('has-ecwid');
128
  }
129
- if (typeof tinymce != 'undefined' && tinymce.activeEditor && !tinymce.activeEditor.isHidden()) {
130
  var body = tinymce.activeEditor.dom.doc.body;
131
  var button = tinymce.activeEditor.dom.select('#ecwid-edit-store-button');
132
 
@@ -263,7 +265,7 @@ jQuery(document).ready(function() {
263
  shortcode.shortcode.attrs.named[i] = result[i];
264
  }
265
 
266
- var stringToInsert = createGutenbergedShortcodeString(shortcode.shortcode);
267
 
268
  if (existingShortcode) {
269
 
@@ -276,12 +278,12 @@ jQuery(document).ready(function() {
276
  jQuery('#content').val(
277
  jQuery('#content').val().replace(stringToReplace, stringToInsert)
278
  );
279
- if (tinyMCE.activeEditor) {
280
  jQuery(tinymce.activeEditor.getBody()).find('.ecwid-store-editor').attr('data-ecwid-shortcode', shortcode.shortcode.string());
281
  }
282
  } else {
283
 
284
- if (tinymce.activeEditor && !tinymce.activeEditor.isHidden()) {
285
  if ($popup.data('range')) {
286
  tinymce.activeEditor.selection.setRng($popup.data('range'));
287
  }
@@ -314,28 +316,6 @@ jQuery(document).ready(function() {
314
 
315
  jQuery('#ecwid-store-popup-content').removeClass('open');
316
  });
317
-
318
- createGutenbergedShortcodeString = function( shortcode ) {
319
- return shortcode.string();
320
-
321
- var result = '<!-- wp:ecwid/store-block ';
322
-
323
- var attributes = {
324
- default_category_id: shortcode.attrs.named.default_category_id,
325
- show_categories: shortcode.attrs.named.widgets.indexOf('categories') !== -1,
326
- show_search: shortcode.attrs.named.widgets.indexOf('search') !== -1
327
- }
328
-
329
- result += JSON.stringify(attributes);
330
-
331
- result += ' -->';
332
-
333
- result += shortcode.string();
334
-
335
- result += '<!-- /wp:ecwid/store-block -->';
336
-
337
- return result;
338
- }
339
 
340
  updatePreview = function() {
341
  jQuery('.store-settings input[type=checkbox]', $popup).each(function(idx, el) {
@@ -365,7 +345,7 @@ ecwid_open_store_popup = function() {
365
 
366
  var shortcode;
367
 
368
- if (tinyMCE.activeEditor && !tinyMCE.activeEditor.isHidden()) {
369
  tinyMCE.activeEditor.save();
370
 
371
  $popup.data('range', tinyMCE.activeEditor.selection.getRng());
@@ -405,7 +385,7 @@ ecwid_open_store_popup = function() {
405
 
406
  updatePreview();
407
 
408
- if (tinymce.activeEditor && !tinymce.activeEditor.isHidden()) {
409
  tinyMCE.activeEditor.execCommand('SelectAll');
410
  tinyMCE.activeEditor.selection.collapse(true);
411
  }
1
+ function ecwidIsTinyMCEActive() {
2
+ return typeof tinyMCE != 'undefined' && tinyMCE.activeEditor && !tinyMCE.activeEditor.isHidden();
3
+ }
4
 
5
  jQuery(document).ready(function() {
6
  $popup = jQuery('#ecwid-store-popup-content');
108
  'minicart_layout': 'MiniAttachToProductBrowser'
109
  }
110
  }
111
+
112
  /*
113
  * Tests whether there is a valid store shortcode
114
  */
115
  checkEcwid = function() {
116
 
117
  var hasEcwid = false;
118
+ if (ecwidIsTinyMCEActive()) {
119
  content = tinyMCE.activeEditor.getBody();
120
 
121
  hasEcwid = jQuery(content).find('.ecwid-store-editor').length > 0;
128
  } else {
129
  jQuery('.wp-media-buttons').removeClass('has-ecwid');
130
  }
131
+ if (ecwidIsTinyMCEActive()) {
132
  var body = tinymce.activeEditor.dom.doc.body;
133
  var button = tinymce.activeEditor.dom.select('#ecwid-edit-store-button');
134
 
265
  shortcode.shortcode.attrs.named[i] = result[i];
266
  }
267
 
268
+ var stringToInsert = ecwid_create_gutenberged_shortcode_string(shortcode.shortcode);
269
 
270
  if (existingShortcode) {
271
 
278
  jQuery('#content').val(
279
  jQuery('#content').val().replace(stringToReplace, stringToInsert)
280
  );
281
+ if (ecwidIsTinyMCEActive()) {
282
  jQuery(tinymce.activeEditor.getBody()).find('.ecwid-store-editor').attr('data-ecwid-shortcode', shortcode.shortcode.string());
283
  }
284
  } else {
285
 
286
+ if (ecwidIsTinyMCEActive()) {
287
  if ($popup.data('range')) {
288
  tinymce.activeEditor.selection.setRng($popup.data('range'));
289
  }
316
 
317
  jQuery('#ecwid-store-popup-content').removeClass('open');
318
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
319
 
320
  updatePreview = function() {
321
  jQuery('.store-settings input[type=checkbox]', $popup).each(function(idx, el) {
345
 
346
  var shortcode;
347
 
348
+ if (ecwidIsTinyMCEActive()) {
349
  tinyMCE.activeEditor.save();
350
 
351
  $popup.data('range', tinyMCE.activeEditor.selection.getRng());
385
 
386
  updatePreview();
387
 
388
+ if (ecwidIsTinyMCEActive()) {
389
  tinyMCE.activeEditor.execCommand('SelectAll');
390
  tinyMCE.activeEditor.selection.collapse(true);
391
  }
languages/ecwid-shopping-cart-de_DE.mo CHANGED
Binary file
languages/ecwid-shopping-cart-de_DE.po CHANGED
@@ -1,5 +1,5 @@
1
  msgid "Ecwid Shopping Cart"
2
- msgstr "Ecwid Onlineshop"
3
 
4
  msgid "Ecwid Team"
5
  msgstr "Ecwid-Team"
1
  msgid "Ecwid Shopping Cart"
2
+ msgstr ""
3
 
4
  msgid "Ecwid Team"
5
  msgstr "Ecwid-Team"
languages/ecwid-shopping-cart-pt_BR.mo CHANGED
Binary file
languages/ecwid-shopping-cart-pt_BR.po CHANGED
@@ -1295,7 +1295,7 @@ msgstr "Não sincronizado ainda"
1295
  #. Plugin Name of the plugin/theme
1296
  #:
1297
  msgid "Ecwid Shopping Cart"
1298
- msgstr "Carrinho de compras Ecwid"
1299
 
1300
  #. #-#-#-#-# ecwid-shopping-cart.pot (Ecwid Shopping Cart 5.0.7) #-#-#-#-#
1301
  #. Plugin URI of the plugin/theme
1295
  #. Plugin Name of the plugin/theme
1296
  #:
1297
  msgid "Ecwid Shopping Cart"
1298
+ msgstr ""
1299
 
1300
  #. #-#-#-#-# ecwid-shopping-cart.pot (Ecwid Shopping Cart 5.0.7) #-#-#-#-#
1301
  #. Plugin URI of the plugin/theme
languages/ecwid-shopping-cart-ru_RU.mo CHANGED
Binary file
languages/ecwid-shopping-cart-ru_RU.po CHANGED
@@ -3,16 +3,16 @@
3
  msgid ""
4
  msgstr ""
5
  "Project-Id-Version: Ecwid Shopping Cart 4.9.4\n"
6
- "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/ecwid-shopping-"
7
- "cart\n"
8
  "POT-Creation-Date: 2017-05-30 19:04:12+00:00\n"
9
- "PO-Revision-Date: 2017-MO-DA HO:MI+ZONE\n"
10
- "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
11
- "Language-Team: LANGUAGE <LL@li.org>\n"
12
- "Language: \n"
13
  "MIME-Version: 1.0\n"
14
  "Content-Type: text/plain; charset=UTF-8\n"
15
  "Content-Transfer-Encoding: 8bit\n"
 
 
 
16
 
17
  #: ecwid-shopping-cart.php:820
18
  msgid "%s plugin doesn't work well with my \"%s\" theme"
@@ -35,8 +35,7 @@ msgid "Read FAQ"
35
  msgstr "Посмотреть FAQ"
36
 
37
  #: ecwid-shopping-cart.php:881
38
- msgid ""
39
- "https://support.ecwid.com/hc/en-us/articles/360000635709-Customizing-design-of-your-Ecwid-store-on-a-Wordpress-site"
40
  msgstr "https://support.ecwid.com/hc/ru/articles/207101259-Wordpress-ORG"
41
 
42
  #: ecwid-shopping-cart.php:890
@@ -47,10 +46,7 @@ msgstr "Сообщить о проблеме"
47
  msgid "<a %s>Online store powered by %s</a>"
48
  msgstr "<a %s>Интернет магазин построен на Эквиде</a>"
49
 
50
- #: ecwid-shopping-cart.php:1497 includes/class-ecwid-nav-menus.php:111
51
- #: includes/class-ecwid-nav-menus.php:297
52
- #: includes/class-ecwid-nav-menus.php:300
53
- #: includes/class-ecwid-nav-menus.php:308
54
  msgid "Store"
55
  msgstr "Магазин"
56
 
@@ -70,8 +66,7 @@ msgstr "Настройки"
70
  msgid "Dashboard"
71
  msgstr "Консоль"
72
 
73
- #: ecwid-shopping-cart.php:1801 includes/class-ecwid-admin.php:58
74
- #: includes/class-ecwid-admin.php:59 includes/class-ecwid-products.php:242
75
  msgid "Products"
76
  msgstr "Товары"
77
 
@@ -88,20 +83,12 @@ msgid "Done"
88
  msgstr "Готово"
89
 
90
  #: ecwid-shopping-cart.php:1807 includes/class-ecwid-nav-menus.php:146
91
- msgid ""
92
- "The store top-level categories are automatically added to this drop-down menu"
93
  msgstr "Корневые категории добавляются в выпадающее меню автоматически"
94
 
95
  #: ecwid-shopping-cart.php:1916 includes/class-ecwid-oauth.php:336
96
- msgid ""
97
- "To be able to choose a product to insert to your posts and pages, you will "
98
- "need to re-connect your site to your %s. This will only require you to "
99
- "accept permissions request – so that the plugin will be able to list your "
100
- "products in the \"Add product\" dialog."
101
- msgstr ""
102
- "Чтобы показать товары магазина в диалоге вставки товара, плагину нужно "
103
- "подключиться к вашему магазину %s. От вас потребуется только разрешить "
104
- "плагину доступ к вашему магазину."
105
 
106
  #: ecwid-shopping-cart.php:2420
107
  msgid "Recommendations for Your Online Store"
@@ -123,8 +110,7 @@ msgstr "Продажи"
123
  msgid "Appearance settings"
124
  msgstr "Настройки внешнего вида"
125
 
126
- #: includes/class-ecwid-admin.php:69 templates/product-popup.php:183
127
- #: templates/store-popup.php:13 templates/store-popup.php:31
128
  msgid "Appearance"
129
  msgstr "Внешний вид"
130
 
@@ -157,9 +143,7 @@ msgid "Admin Label"
157
  msgstr ""
158
 
159
  #: includes/class-ecwid-integration-divibuilder.php:51
160
- msgid ""
161
- "This will change the label of the module in the builder for easy "
162
- "identification."
163
  msgstr ""
164
 
165
  #: includes/class-ecwid-integration-divibuilder.php:54
@@ -167,10 +151,7 @@ msgid "CSS ID"
167
  msgstr ""
168
 
169
  #: includes/class-ecwid-integration-divibuilder.php:57
170
- msgid ""
171
- "Enter an optional CSS ID to be used for this module. An ID can be used to "
172
- "create custom CSS styling, or to create links to particular sections of your "
173
- "page."
174
  msgstr ""
175
 
176
  #: includes/class-ecwid-integration-divibuilder.php:60
@@ -178,27 +159,15 @@ msgid "CSS Class"
178
  msgstr ""
179
 
180
  #: includes/class-ecwid-integration-divibuilder.php:63
181
- msgid ""
182
- "Enter optional CSS classes to be used for this module. A CSS class can be "
183
- "used to create custom CSS styling. You can add multiple classes, separated "
184
- "with a space."
185
  msgstr ""
186
 
187
  #: includes/class-ecwid-message-manager.php:45
188
  msgid ""
189
- "Sorry, there is a problem. This page is supposed to display your store "
190
- "Control Panel. However, this Wordpress site doesn't seem to be able to "
191
- "connect to the Ecwid server to show your store dashboard here. This is "
192
- "likely caused by your server misconfiguration and can be fixed by your "
193
- "hosting provider. Here is a more techy description of the problem, which you "
194
- "can send to your hosting provider: \"The Wordpress function wp_remote_post() "
195
- "failed to connect a remote server because of some error: \"%s\". Seems like "
196
- "HTTP POST requests are disabled on this server\". <br /><br />Please feel "
197
- "free to contact us at <a %s>wordpress@ecwid.com</a> and we will help you "
198
- "contact your hosting and ask them to fix the issue. <br /><br /> Meanwhile, "
199
- "to manage your store, you can use the Ecwid Web Control Panel at <a %s>my."
200
- "ecwid.com</a>. Your store front is working fine as well and you can check it "
201
- "here: <a %s>%s</a>."
202
  msgstr ""
203
 
204
  #: includes/class-ecwid-message-manager.php:194
@@ -226,24 +195,16 @@ msgid "Complete Setup"
226
  msgstr "Продолжить установку"
227
 
228
  #: includes/class-ecwid-message-manager.php:212
229
- msgid ""
230
- "To add extra functions to your store, drag and drop %s store elements on "
231
- "your site. When you're done, you can get back to modifying your settings."
232
- msgstr ""
233
- "Добавьте дополнительные элементы магазина, перетащив виджеты %s в нужное "
234
- "место сайта. После установки виджетов можете вернуться к настройкам магазина."
235
 
236
  #: includes/class-ecwid-message-manager.php:213
237
  msgid "Back to Store Settings"
238
  msgstr "Вернуться к настройкам"
239
 
240
  #: includes/class-ecwid-message-manager.php:220
241
- msgid ""
242
- "Do you like your %s online store? We'd appreciate it if you add your review "
243
- "and vote for the plugin on WordPress site."
244
- msgstr ""
245
- "Вам нравится ваш магазин? Будем благодарны, если вы оставите отзыв и "
246
- "проголосуете за %s на сайте WordPress."
247
 
248
  #: includes/class-ecwid-message-manager.php:224
249
  msgid "Rate %s at WordPress.org"
@@ -269,19 +230,15 @@ msgstr "Добавить в меню"
269
  msgid "Cart"
270
  msgstr "Корзина"
271
 
272
- #: includes/class-ecwid-nav-menus.php:276
273
- #: includes/widgets/class-ecwid-widget-minicart.php:6
274
  msgid "Shopping Cart"
275
  msgstr "Корзина"
276
 
277
- #: includes/class-ecwid-nav-menus.php:281
278
- #: includes/class-ecwid-nav-menus.php:284
279
- #: includes/widgets/class-ecwid-widget-search.php:10
280
  msgid "Product Search"
281
  msgstr "Поиск товаров"
282
 
283
- #: includes/class-ecwid-nav-menus.php:289
284
- #: includes/class-ecwid-nav-menus.php:292
285
  msgid "My Account"
286
  msgstr "Профиль"
287
 
@@ -309,8 +266,7 @@ msgstr "Следующая"
309
  msgid "Last Page"
310
  msgstr "Конец"
311
 
312
- #: includes/class-ecwid-store-editor.php:44 templates/store-popup.php:11
313
- #: templates/store-popup.php:19
314
  msgid "Add Store"
315
  msgstr "Добавить магазин"
316
 
@@ -328,17 +284,11 @@ msgstr "Безопасен ли Эквид?"
328
 
329
  #: includes/faq_entries.php:6
330
  msgid ""
331
- "Ecwid is PCI DSS Level 1 certified, which is the gold standard for e-"
332
- "commerce solutions worldwide. This means you won't have any banking "
333
- "compliance issues when selling online with Ecwid. <a target=\"_blank\""
334
- " href=\"https://support.ecwid.com/hc/en-us/articles/207101259-Wordpress-"
335
- "downloadable-#security\">More details.</a>"
336
  msgstr ""
337
- "Эквид сертифицирован по стандарту PCI DSS Level 1. Это высший уровень "
338
- "соответствия мировым требованиям безопасной передачи данных: информация "
339
- "вашего магазина и ваших клиентов надёжно защищена. <a target=\"_blank\""
340
- " href=\"https://support.ecwid.com/hc/ru/articles/207101259-Wordpress#"
341
- "security\">Подробнее о безопасности.</a>"
342
 
343
  #: includes/faq_entries.php:12
344
  msgid "How can I manage my store from a mobile device?"
@@ -346,18 +296,10 @@ msgstr "Как быстро внести изменения в каталог т
346
 
347
  #: includes/faq_entries.php:13
348
  msgid ""
349
- "Ecwid provides free mobile applications for iOS and Android to manage your "
350
- "store and sell on the go. Scan products, track inventory, manage sales and "
351
- "accept payments using your mobile device as a POS station. <a target=\"_blank"
352
- "\" href=\"https://www.ecwid.com/ecwid-mobile\">More details.</a>"
353
  msgstr ""
354
- "Лучший способ быстро изменить что-либо в товаре – воспользоваться мобильным "
355
- "приложение. Приложение Эквида для iOS и Android доступно с любым платным "
356
- "тарифным планом и поможет вам управлять заказами, вносить изменения в "
357
- "каталог товаров и регистрировать новые покупки при личных встречах с "
358
- "покупателями где бы вы ни находились. <a target=\"_blank\" href=\"https://"
359
- "www.ecwid.ru/blog/quick-mobile-connect.html\">Подробнее о мобильном "
360
- "приложении.</a>"
361
 
362
  #: includes/faq_entries.php:20
363
  msgid "How to set up a storefront on Facebook with Ecwid?"
@@ -365,50 +307,27 @@ msgstr "Как добавить магазин на Facebook?"
365
 
366
  #: includes/faq_entries.php:21
367
  msgid ""
368
- "You can add your online store to your Facebook business page. No addons "
369
- "needed. Ecwid will automatically synchronize products, customers, orders "
370
- "and inventory between your WordPress and Facebook storefronts. <a target="
371
- "\"_blank\" href=\"https://support.ecwid.com/hc/en-us/articles/115005892705"
372
- "-Facebook-Shop\">More details.</a>"
373
  msgstr ""
374
- "Вы можете разместить магазин не только на своём WordPress-сайте, но и на "
375
- "любой другой странице включая Facebook. Зеркальная копия витрины мгновенно "
376
- "отражает любые изменения в магазине. Новые товары в каталоге, наличие на "
377
- "складе, заказы и покупатели – все данные распространяются между витринами на "
378
- "лету. <a target=\"_blank\" href=\"https://support.ecwid.com/hc/ru/articles/115"
379
- "005892705-%D0%9C%D0%B0%D0%B3%D0%B0%D0%B7%D0%B8%D0%BD-%D0%BD%D0%B0-%D0%A4%D0%B5"
380
- "%D0%B9%D1%81%D0%B1%D1%83%D0%BA%D0%B5\">Подробнее об установке на Facebook.</a>"
381
 
382
  #: includes/faq_entries.php:28
383
  msgid "How can I add a cart widget to my site sidebar?"
384
  msgstr "Как добавить корзину в боковую панель сайта (sidebar)?"
385
 
386
  #: includes/faq_entries.php:30
387
- msgid ""
388
- "You can add product search box, cart widget and more on the <a href=\"%s\">"
389
- "\"Appearance / Widgets page\"</a> here in your site admin. <a target=\"_blank\""
390
- " href=\"https://support.ecwid.com/hc/en-us/articles/207101259-Wordpress-downloadable"
391
- "-#sidebarwidgets\">More details.</a>"
392
- msgstr ""
393
- "Вы можете добавить корзину, форму для поиска товаров и другие элементы "
394
- "магазина в боковую панель на странице <a href=\"%s\">«Внешний вид > "
395
- "Виджеты»</a>."
396
 
397
  #: includes/faq_entries.php:38
398
  msgid "How much does Ecwid cost?"
399
  msgstr "Сколько стоит Эквид?"
400
 
401
  #: includes/faq_entries.php:39
402
- msgid ""
403
- "Our 4 account types vary by number of products, types of functionality, and "
404
- "level of support. For more information, check out our <a target=\"_blank\" "
405
- "href=\"%s\">pricing page.</a><br /><br />Pro Tip: You can also save money "
406
- "by enrolling in our annual plans."
407
- msgstr ""
408
- "Мы предлагаем 4 тарифных плана: от бесплатного с 10 товарами до "
409
- "безлимитного. Платные тарифные планы расширяют возможности магазина и "
410
- "открывают персональную техническую поддержку в реальном времени.<br /><a "
411
- "target=\"_blank\" href=\"%s\">Подробнее о расценках.</a>"
412
 
413
  #: includes/faq_entries.php:45
414
  msgid "How do I add store categories to the site menu?"
@@ -416,15 +335,9 @@ msgstr "Как добавить категории в меню сайта?"
416
 
417
  #: includes/faq_entries.php:46
418
  msgid ""
419
- "You can add the store categories menu to your site menu to help your "
420
- "customers easily navigate your site. Just open \"Appearance > Menus\" in "
421
- "your WordPress control panel and add the \"Store with Categories Menu\" item "
422
- "to your site menu. A drop-down menu containing your store categories will "
423
  "automatically appear on your site."
424
- msgstr ""
425
- "Перейдите на страницу «Внешний вид > Меню», добавьте элемент «Магазин с меню "
426
- "категорий» в меню и сохраните изменения. Сразу после сохранения меню сайта "
427
- "пополнится выпадающим списком категорий вашего магазина."
428
 
429
  #: includes/faq_entries.php:52
430
  msgid "How do I put my products in the sitemap?"
@@ -432,114 +345,70 @@ msgstr "Как добавить товары в карту сайта (sitemap)?
432
 
433
  #: includes/faq_entries.php:53
434
  msgid ""
435
- "To create sitemap for your Wordpress site we suggest using <a target=\"_blank"
436
- "\" href=\"https://wordpress.org/plugins/google-sitemap-generator/\">Google "
437
- "XML Sitemaps</a> or <a target=\"_blank\" href=\"https://wordpress.org/"
438
- "plugins/wordpress-seo/\">Yoast Wordpress SEO</a>. &nbsp;plugins. These "
439
- "plugins are fully compatible with Ecwid and allow to generate a sitemap that "
440
- "will contain links to categories and product pages, so the store pages will "
441
- "get indexed faster. Please note that this option is available to <a target="
442
- "\"_blank\" href=\"https://www.ecwid.com/pricing\">paid Ecwid users</a>."
443
  msgstr ""
444
- "Для создания карты сайта мы рекомендуем использовать плагин <a target="
445
- "\"_blank\" href=\"https://ru.wordpress.org/plugins/google-sitemap-plugin/"
446
- "\">Google XML Sitemaps</a> или <a target=\"_blank\" href=\"https://ru."
447
- "wordpress.org/plugins/wordpress-seo/\">Yoast Wordpress SEO</a>. После "
448
- "установки плагин создаст карту сайта, содержащую ссылки на страницы товаров "
449
- "и категорий, и ускорит их индексацию поисковыми движками. Чтобы "
450
- "воспользоваться этой возможностью подпишитесь на любой <a target=\"_blank\" "
451
- "href=\"https://www.ecwid.ru/pricing\">платный тарифный план</a>."
452
 
453
  #: includes/faq_entries.php:58
454
- msgid ""
455
- "How to add a single product with the add to bag button to the site pages?"
456
  msgstr "Как добавить отдельный товар с корзиной на страницу сайта?"
457
 
458
  #: includes/faq_entries.php:59
459
- msgid ""
460
- "To feature a single product on a separate page or blog post of your site, "
461
- "use <b>[ecwid_product]</b> shortcode. <a target=\"_blank\" href=\"https://s"
462
- "upport.ecwid.com/hc/en-us/articles/207101259-Wordpress-downloadable-#buynow"
463
- "\">How to use it.</a>"
464
- msgstr ""
465
- "Чтобы разместить товар магазина на страницах сайта отдельно от остальных, "
466
- "используйте короткий код [ecwid_product]. <a target=\"_blank\" href="
467
- "\"https://support.ecwid.com/hc/ru/articles/207101259-Wordpress#embeda"
468
- "singleproduct\">Пошаговая инструкция.</a>"
469
 
470
  #: includes/faq_entries.php:65
471
  msgid "Is it possible to display my store on the site home page?"
472
  msgstr "Как добавить магазин на домашнюю страницу?"
473
 
474
  #: includes/faq_entries.php:66
475
- msgid ""
476
- "You can display your store on the site main page. Adjust the \"Reading\" "
477
- "settings of your site as described in our <a target=\"_blank\" href="
478
- "\"https://support.ecwid.com/hc/en-us/articles/207101259-Wordpress-"
479
- "downloadable-#displaystoreonhomepage\">Help Center.</a>"
480
- msgstr ""
481
- "Перейдите на страницу <a href=\"options-reading.php\">«Настройки > Чтение»</"
482
- "a> и выберите «Магазин\t» в выпадающем списке главной страницы."
483
 
484
  msgid "Is there a WordPress theme for Ecwid?"
485
  msgstr "Существуют ли темы для Эквида?"
486
 
487
  #: includes/faq_entries.php:66
488
  msgid "Ecwid is compatible with any WordPress theme. Be it a free theme from WordPress.org catalog, a premium theme by a third-party vendor or a custom-made theme, your Ecwid store will work good with it. If you want a premium theme, we recommend <a href=\"%s\">TemplateMonster themes</a>"
489
- msgstr ""
490
- "Эквид совместим с любой темой, будь то бесплатная тема из каталога WordPress.org, платная тема или заказная разработка. Ваш магазин должен работать хорошо в любом случае. Если вы ищете хорошие премиум-темы, мы рекомендуем <a href=\"%s\">TemplateMonster</a>"
491
-
492
 
493
  #: includes/oembed.php:68 includes/oembed.php:97 templates/help.php:96
494
  msgid "See more"
495
  msgstr "Посмотреть все"
496
 
497
- #: includes/themes/class-ecwid-theme-twentyfifteen.php:32
498
- #: includes/themes/class-ecwid-theme-twentyfifteen.php:38
499
- #: includes/themes/class-ecwid-theme-twentyseventeen.php:47
500
- #: includes/themes/class-ecwid-theme-twentyseventeen.php:53
501
- #: includes/themes/class-ecwid-theme-twentysixteen.php:35
502
- #: includes/themes/class-ecwid-theme-twentysixteen.php:41
503
- #: includes/widgets/class-ecwid-widget-store-link.php:29
504
  msgid "Shop"
505
  msgstr "Магазин"
506
 
507
  #: includes/widgets/class-ecwid-widget-badge.php:9
508
- msgid ""
509
- "Do you like Ecwid and want to help it grow? You can add this fancy 'Powered "
510
- "by Ecwid' badge on your site to show your visitors that you're a proud user "
511
- "of Ecwid."
512
- msgstr ""
513
- "Если вам нравится Эквид и вы хотите помочь ему стать самым популярным "
514
- "конструктором интернет-магазинов, вы можете добавить значок на сайт, чтобы "
515
- "показать посетителям, что вы пользуетесь Эквидом."
516
 
517
  #: includes/widgets/class-ecwid-widget-badge.php:10
518
  msgid "Ecwid Badge"
519
  msgstr "Значок Эквида"
520
 
521
- #: includes/widgets/class-ecwid-widget-badge.php:17
522
- #: includes/widgets/class-ecwid-widget-badge.php:23
523
  msgid "Ecwid shopping cart widget"
524
  msgstr "Виджет интернет-магазина Эквид"
525
 
526
- #: includes/widgets/class-ecwid-widget-badge.php:29
527
- #: includes/widgets/class-ecwid-widget-badge.php:65
528
  msgid "Ecwid ecommerce solution"
529
  msgstr "Решение для электронной коммерции Эквид"
530
 
531
- #: includes/widgets/class-ecwid-widget-badge.php:35
532
- #: includes/widgets/class-ecwid-widget-badge.php:71
533
  msgid "Ecwid free shopping cart"
534
  msgstr "Беспланный конструктов интернет-магазинов Эквид"
535
 
536
- #: includes/widgets/class-ecwid-widget-badge.php:41
537
- #: includes/widgets/class-ecwid-widget-badge.php:53
538
  msgid "Ecwid shopping cart"
539
  msgstr "Интернет-магазин Эквид"
540
 
541
- #: includes/widgets/class-ecwid-widget-badge.php:47
542
- #: includes/widgets/class-ecwid-widget-badge.php:59
543
  msgid "Ecwid e-commerce widgets"
544
  msgstr "Виджеты для электронной коммерции Эквид"
545
 
@@ -564,52 +433,34 @@ msgid "Top right"
564
  msgstr "Справа вверху"
565
 
566
  #: includes/widgets/class-ecwid-widget-minicart-miniview.php:5
567
- msgid ""
568
- "Adds a compact cart widget for customer to see the products they added to "
569
- "the cart."
570
- msgstr ""
571
- "Добавляет компактный виджет корзины покупателя для быстрого доступа к "
572
- "добавленным товарам."
573
 
574
  #: includes/widgets/class-ecwid-widget-minicart-miniview.php:6
575
  msgid "Shopping Cart (Mini)"
576
  msgstr "Корзина (Мини)"
577
 
578
- #: includes/widgets/class-ecwid-widget-minicart-miniview.php:44
579
- #: includes/widgets/class-ecwid-widget-minicart.php:44
580
- #: includes/widgets/class-ecwid-widget-search.php:49
581
- #: includes/widgets/class-ecwid-widget-vcategories.php:43
582
- #: includes/widgets/class-ecwid-widget-vertical-categories-list.php:71
583
  msgid "Title:"
584
  msgstr "Название:"
585
 
586
  #: includes/widgets/class-ecwid-widget-minicart.php:5
587
- msgid ""
588
- "Adds a cart widget for customer to see the products they added to the cart."
589
- msgstr ""
590
- "Добавляет виджет корзины покупателя для быстрого доступа к добавленным "
591
- "товарам."
592
 
593
  #: includes/widgets/class-ecwid-widget-recently-viewed.php:9
594
- msgid ""
595
- "Displays a list of products recently viewed by the customer to easily return "
596
- "to the products they saw in your shop."
597
- msgstr ""
598
- "Показывает список товаров, просмотренных покупателем. Позволяет покупателю "
599
- "быстро перейти к товарам, которые их заинтересовали раньше."
600
 
601
- #: includes/widgets/class-ecwid-widget-recently-viewed.php:10
602
- #: includes/widgets/class-ecwid-widget-recently-viewed.php:153
603
  msgid "Recently Viewed Products"
604
  msgstr "Просмотренные товары"
605
 
606
- #: includes/widgets/class-ecwid-widget-recently-viewed.php:124
607
- #: includes/widgets/class-ecwid-widget-recently-viewed.php:154
608
  msgid "You have not viewed any product yet. Open store."
609
  msgstr "Вы пока что не просмотрели ни одного товара. Открыть магазин."
610
 
611
- #: includes/widgets/class-ecwid-widget-recently-viewed.php:164
612
- #: templates/product-popup.php:160
613
  msgid "Title"
614
  msgstr "Название"
615
 
@@ -622,18 +473,12 @@ msgid "Number of products to show"
622
  msgstr "Количество товаров для отображения"
623
 
624
  #: includes/widgets/class-ecwid-widget-search.php:9
625
- msgid ""
626
- "Displays a simple search box for your customers to find a product in your "
627
- "store"
628
  msgstr "Показывает покупателю поле поиска товаров в магазине"
629
 
630
  #: includes/widgets/class-ecwid-widget-store-link.php:5
631
- msgid ""
632
- "Displays a link to the store page in sidebar for customer to quickly access "
633
- "your store from any page on the site."
634
- msgstr ""
635
- "Показывает ссылку на страницу магазина, позволяющую покупателю быстро "
636
- "открыть магазин из любой страницы на сайте."
637
 
638
  #: includes/widgets/class-ecwid-widget-store-link.php:6
639
  msgid "Store Page Link"
@@ -645,26 +490,21 @@ msgstr "Текст ссылки"
645
 
646
  #: includes/widgets/class-ecwid-widget-vcategories.php:5
647
  msgid "Adds vertical categories block to let the customer navigate your store."
648
- msgstr ""
649
- "Показывает вертикальный список категорий для удобной навигации по магазину."
650
 
651
  #: includes/widgets/class-ecwid-widget-vcategories.php:6
652
  msgid "Store Categories"
653
  msgstr "Категории магазина"
654
 
655
  #: includes/widgets/class-ecwid-widget-vertical-categories-list.php:11
656
- msgid ""
657
- "Adds root categories list to the sidebar to let your customers navigate the "
658
- "store."
659
- msgstr ""
660
- "Показывает список корневых категорий для удобной навигации по магазину."
661
 
662
  #: includes/widgets/class-ecwid-widget-vertical-categories-list.php:12
663
  msgid "Store Root Categories"
664
  msgstr "Корневые категории магазина"
665
 
666
- #: includes/widgets/class-ecwid-widget-vertical-categories-list.php:22
667
- #: includes/widgets/class-ecwid-widget-vertical-categories-list.php:68
668
  msgid "Browse by Category"
669
  msgstr "Категории магазина"
670
 
@@ -701,15 +541,8 @@ msgid "Sorry we're having technical difficulties."
701
  msgstr "Простите, у нас технические проблемы."
702
 
703
  #: templates/admin-timeout.php:11
704
- msgid ""
705
- "Our team is already working on this issue. Please refresh the page in a few "
706
- "minutes. If the issue persists, please contact <a target=\"_blank\" href="
707
- "\"https://help.ecwid.com/customer/portal/emails/new\">our customer support "
708
- "team</a>."
709
- msgstr ""
710
- "Мы уже работаем над исправлением проблемы. Перезагрузите страницу через пару "
711
- "минут. Если проблема сохранится, пожалуйста, <a target=\"_blank\" href="
712
- "\"https://help.ecwid.com/customer/portal/emails/new\">свяжитесь с нами</a>."
713
 
714
  #: templates/advanced-settings.php:1
715
  msgid "%s — Advanced settings"
@@ -720,35 +553,16 @@ msgid "SEO friendly clean URLs"
720
  msgstr "SEO URLs"
721
 
722
  #: templates/advanced-settings.php:34
723
- msgid ""
724
- "This enables new clean URLs format in your store. The new urls do not "
725
- "contain hash sign ('#'), so they look nicer and are better indexed by Google."
726
- msgstr ""
727
- "Включает новый \"чистый\" формат ссылок на товары и категории в магазине. "
728
- "Новые ссылки не содержат символа \"#\" и лучше индексируются поисковыми "
729
- "системами."
730
 
731
  #: templates/advanced-settings.php:38
732
- msgid ""
733
- "To enable clean URLs in your store, you will need to enable pretty "
734
- "permalinks in your WordPress site settings. Navigate to <a%s>Settings-"
735
- ">Permalink</a> and enable the \"Post name\" permalink type."
736
- msgstr ""
737
- "Чтобы включить SEO URLs в магазине, вам потребуется для начала включить "
738
- "улучшенную структуру постоянных ссылок в настройках Wordpress. Для этого в "
739
- "меню \"<a%s>Настройки -> Постоянные ссылки</a>\" выберите тип ссылок "
740
- "\"Название записи\"."
741
 
742
  #: templates/advanced-settings.php:44
743
- msgid ""
744
- "Note: the new URLs will be automatically enabled for every store in one of "
745
- "upcoming updates so please make sure to check how the new URLs work in your "
746
- "store and <a %s>let us know</a> if you face any trouble with them"
747
- msgstr ""
748
- "Новые SEO URLs магазина будут включены по умолчанию в одной из будущих "
749
- "версий плагина. Поэтому мы рекомендуем вам включить эту опцию и попробовать "
750
- "SEO URLs на своём сайте. Если вы заметите какие-либо проблемы, пожалуйста, "
751
- "<a %s>дайте нам знать</a>, мы поможем."
752
 
753
  #: templates/advanced-settings.php:44 templates/advanced-settings.php:188
754
  msgid "https://support.ecwid.com/hc/en-us/requests/new"
@@ -764,15 +578,10 @@ msgstr "Корневая категория магазина"
764
 
765
  #: templates/advanced-settings.php:74
766
  msgid ""
767
- "By default, the storefront shows a list of root categories. You can override "
768
- "this behavior and show a different category when customers open your store "
769
- "for the first time. This is useful if you only have one category or want to "
770
- "display a specific set of items (e.g. \"Featured Products\") to new visitors."
771
  msgstr ""
772
- "По умолчанию, магазин показывает корневые категории. Здесь можно выбрать "
773
- "другую категорию для отображения, когда покупатель впервые открывает ваш "
774
- "магазин. Это может быть полезно, если у вас есть только одна категория или "
775
- "вы хотите показывать определённые набор товаров (например, специальные "
776
  "предложения) новым пользователям."
777
 
778
  #: templates/advanced-settings.php:97
@@ -780,17 +589,10 @@ msgid "Customer Single Sign-On"
780
  msgstr "Единый вход для покупателей"
781
 
782
  #: templates/advanced-settings.php:102
783
- msgid ""
784
- "Single Sign-On allows your customers to have a single login for your "
785
- "WordPress site and your %s. When someone logs in to your site, they "
786
- "will automatically be logged in to their customer account in your store as "
787
- "well with no need to enter their email/password again."
788
  msgstr ""
789
- "Объединяет учетную запись покупателя на сайте с его учетной записью в "
790
- "%s. Когда единый вход включен, покупателю не нужно логиниться "
791
- "дважды – на сайте и в магазине. После входа в свой аккаунт на сайте "
792
- "покупатель может смотреть историю своих заказов и оформлять новый заказ с "
793
- "предзаполненным email и адресом доставки."
794
 
795
  #: templates/advanced-settings.php:109
796
  msgid "Upgrade to get this feature"
@@ -801,45 +603,24 @@ msgid "Please subscribe to a paid plan to get this feature."
801
  msgstr "Подпишитесь на платный план, чтобы получить эту функциональность."
802
 
803
  #: templates/advanced-settings.php:118
804
- msgid ""
805
- "To allow %s automatically log in customers to your store, please provide it "
806
- "with a permission to use the customer data in the store. <a %s>Please use "
807
- "this link to do that</a>"
808
- msgstr ""
809
- "Чтобы плагин автоматически объединял учетные записи пользователя на сайте и "
810
- "в магазине %s, нужно дать ему доступ до данных покупателей в магазине. <a "
811
- "%s>Перейдите по этой ссылке, чтобы предоставить доступ</a>."
812
 
813
  #: templates/advanced-settings.php:124
814
- msgid ""
815
- "To make sure your customer can actually log in to your site and store, "
816
- "enable registration in the <a %s>site settings</a>"
817
- msgstr ""
818
- "Чтобы покупатели смогли регистрироваться, убедитесь, что регистрация "
819
- "включена в <a %s>настройках сайта</a>"
820
 
821
  #: templates/advanced-settings.php:146
822
  msgid "Chameleon skin"
823
  msgstr "Тема \"Хамелеон\""
824
 
825
  #: templates/advanced-settings.php:150
826
- msgid ""
827
- "Automatic adjustment of your store design to your WordPress theme. Whatever "
828
- "WordPress theme you use, %s will detect predominant colors and font and use "
829
- "them in your product catalog."
830
- msgstr ""
831
- "Автоматическая подстройка внешнего вида магазина под стили темы сайта. "
832
- "Включите эту опцию, чтобы %s определял цвета и шрифты сайта и использовал их "
833
- "в каталоге товаров."
834
 
835
  #: templates/advanced-settings.php:153
836
- msgid ""
837
- "Please note this functionality is in beta. So if you run into difficulties "
838
- "or find problems with Chameleon, please <a %s>let us know</a>."
839
- msgstr ""
840
- "Мы добавили этот инструмент недавно, и он сейчас работает в бета-режиме. "
841
- "Если вы обнаружите какие-либо проблемы в его работе, пожалуйста, <a "
842
- "%s>сообщите нам</a>."
843
 
844
  #: templates/advanced-settings.php:176
845
  msgid "Integration with search on your site <sup>beta</sup>"
@@ -847,30 +628,15 @@ msgstr "Интеграция с поиском на сайте <sup>бета</su
847
 
848
  #: templates/advanced-settings.php:180
849
  msgid ""
850
- "%s stores your products data in a secure cloud storage. The product pages "
851
- "are displayed on the fly when a customer browses your store. So, basically, "
852
- "the products are not stored on the site, that's why the site search doesn't "
853
- "find product pages while looking through site pages and posts. This option "
854
- "enables a local storage mode: the products will be stored both in the cloud "
855
- "and on your site. The site search results will list product pages as well as "
856
- "regular pages/posts of your site."
857
  msgstr ""
858
- "%s хранит данные товаров магазина в защищенном облачном хранилище, и "
859
- "показывает их прямо на странице магазина, когда посетитель открывает товар. "
860
- "Поэтому данные товаров не хранятся на вашем сайте, а поиск по сайту находит "
861
- "только страницы и записи сайта — не находит товары магазина. Эта настройка "
862
- "включает локальное хранение товаров: данные товаров будут храниться и в "
863
- "облачном хранилище, и прямо на вашем сайте. Поиск по сайту будет показывать "
864
- "страницы товаров магазина так же, как записи или страницы, размещенные на "
865
- "сайте."
866
 
867
  #: templates/advanced-settings.php:188
868
- msgid ""
869
- "Please note this functionality is in beta. So if you run into difficulties "
870
- "or find problems with it, please <a %s>let us know</a>."
871
- msgstr ""
872
- "Эта функция сейчас работает в бета-режиме. Если вы обнаружите проблемы в её "
873
- "работе, пожалуйста, <a %s>сообщите нам</a>."
874
 
875
  #: templates/advanced-settings.php:197 templates/appearance-settings.php:217
876
  msgid "Save changes"
@@ -885,36 +651,24 @@ msgid "Display search box above products"
885
  msgstr "Показывать форму поиска над списком продуктов"
886
 
887
  #: templates/appearance-settings.php:31
888
- msgid ""
889
- "Or you can add search box to your website's toolbar using <a href=\"%s"
890
- "\">WordPress native widgets</a>"
891
- msgstr ""
892
- "Или вы можете добавить форму поиска на ваш сайт с помощью <a href=\"%s"
893
- "\">виджетов WordPress</a>"
894
 
895
  #: templates/appearance-settings.php:51
896
  msgid "Display categories above products"
897
  msgstr "Показывать меню категорий над списком продуктов"
898
 
899
  #: templates/appearance-settings.php:55
900
- msgid ""
901
- "Or you can add vertical categories to your website's toolbar using <a href="
902
- "\"%s\">WordPress native widgets</a>"
903
- msgstr ""
904
- "Или вы можете добавить вертикальное меню категорий на ваш сайт с помощью <a "
905
- "href=\"%s\">виджетов WordPress</a>"
906
 
907
  #: templates/appearance-settings.php:76
908
  msgid "Enable minicart attached to categories"
909
  msgstr "Показывать корзину у меню категорий"
910
 
911
  #: templates/appearance-settings.php:80
912
- msgid ""
913
- "You should disable this option, if you added minicart to your website's&nbsp;"
914
- "sidebar"
915
- msgstr ""
916
- "Если вы добавили виджет корзины в боковое меню, следует отключить эту "
917
- "настройку"
918
 
919
  #: templates/appearance-settings.php:99 templates/store-popup.php:180
920
  msgid "Number of categories per row"
@@ -937,32 +691,22 @@ msgid "Table view"
937
  msgstr "Вид \"таблица\""
938
 
939
  #: templates/appearance-settings.php:171 templates/store-popup.php:145
940
- msgid ""
941
- "Here you can control how many products will be displayed per page. These "
942
- "options define maximum values. If there is not enough space to show all "
943
- "product columns, %s will adapt the number of columns to hold all products."
944
- msgstr ""
945
- "Здесь вы можете задать количество отображаемых продуктов на странице. Эти "
946
- "цифры определяют максимальные значения. Если на странице в сетке продуктов "
947
- "будет недостаточно места для отображения всех столбцов, %s уменьшит их "
948
- "количество."
949
 
950
  #: templates/appearance-settings.php:178 templates/store-popup.php:193
951
  msgid "Default view mode on product pages"
952
  msgstr "Вид страницы продуктов по умолчанию"
953
 
954
- #: templates/appearance-settings.php:183 templates/appearance-settings.php:201
955
- #: templates/store-popup.php:197 templates/store-popup.php:215
956
  msgid "Grid"
957
  msgstr "Сетка"
958
 
959
- #: templates/appearance-settings.php:186 templates/appearance-settings.php:204
960
- #: templates/store-popup.php:200 templates/store-popup.php:218
961
  msgid "List"
962
  msgstr "Список"
963
 
964
- #: templates/appearance-settings.php:189 templates/appearance-settings.php:207
965
- #: templates/store-popup.php:203 templates/store-popup.php:221
966
  msgid "Table"
967
  msgstr "Таблица"
968
 
@@ -970,8 +714,7 @@ msgstr "Таблица"
970
  msgid "Default view mode on search results"
971
  msgstr "Вид страницы результатов поиска по умолчанию"
972
 
973
- #: templates/connect.php:5 templates/dashboard.php:6
974
- #: templates/reconnect-sso.php:5 templates/reconnect.php:5
975
  msgid "%s Shopping Cart"
976
  msgstr "Интернет-магазин %s"
977
 
@@ -983,8 +726,7 @@ msgstr "Подключите магазин<br /> к своему WordPress са
983
  msgid "Enter your Store ID"
984
  msgstr "Введите ваш ID Магазина"
985
 
986
- #: templates/connect.php:20 templates/landing_old.php:27
987
- #: templates/reconnect.php:23
988
  msgid "Connect"
989
  msgstr "Подключите магазин"
990
 
@@ -993,33 +735,22 @@ msgid "Save and connect"
993
  msgstr "Сохранить и присоединить"
994
 
995
  #: templates/connect.php:27 templates/reconnect.php:46
996
- msgid ""
997
- "To display your store on this site, you need to allow WordPress to access "
998
- "your %1$s products. Please press connect to provide permission."
999
- msgstr ""
1000
- "Нажмите на кнопку, авторизуйтесь в %1$s и выдайте запрошенные права доступа"
1001
 
1002
  #: templates/connect.php:32
1003
  msgid "Where to find your Store ID:"
1004
  msgstr "Где найти ID Магазина:"
1005
 
1006
  #: templates/connect.php:34
1007
- msgid ""
1008
- "Store ID is a unique identifier of your %1$s account. You can find it in "
1009
- "your %1$s control panel: open the <a %2$s>Dashboard page</a> and find the "
1010
- "\"<b>Store ID: NNNNNNN</b>\" text, where <b>NNNNNNN</b> is your Store&nbsp;"
1011
- "ID."
1012
- msgstr ""
1013
- "ID магазина – это уникальный номер аккаунта в %1$s. Вы можете его найти в "
1014
- "панели управления %1$s-магазина: откройте страницу \"<a %2$s>Консоль</a>\" и "
1015
- "найдите текст \"<b>ID&nbsp;Магазина&nbsp;NNNNNNN</b>\". "
1016
 
1017
  #: templates/connect.php:39
1018
  msgid "Don't have an %s account? Create one now."
1019
  msgstr "Ещё нет аккаунта в %s? Зарегистрируйтесь"
1020
 
1021
- #: templates/dashboard.php:10 templates/store-popup.php:231
1022
- #: templates/store-svg.php:15
1023
  msgid "Store ID"
1024
  msgstr "ID Магазина"
1025
 
@@ -1069,33 +800,23 @@ msgstr "Искать в базе знаний"
1069
 
1070
  #: templates/help.php:29
1071
  msgid "https://support.ecwid.com/hc/en-us/sections/201706719-Ecwid-Basics"
1072
- msgstr ""
1073
- "https://support.ecwid.com/hc/ru/sections/201706719-%D0%9D"
1074
- "%D0%B0%D1%87%D0%B0%D0%BB%D0%BE-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B-"
1075
 
1076
  #: templates/help.php:31
1077
  msgid "Ecwid Basics"
1078
  msgstr "Начало работы"
1079
 
1080
  #: templates/help.php:35
1081
- msgid ""
1082
- "https://support.ecwid.com/hc/en-us/sections/201758475-Manage-Your-Ecwid-Store"
1083
- msgstr ""
1084
- "https://support.ecwid.com/hc/ru/sections/201758475-%D0%A3%D0%BF"
1085
- "%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BC"
1086
- "%D0%B0%D0%B3%D0%B0%D0%B7%D0%B8%D0%BD%D0%BE%D0%BC"
1087
 
1088
  #: templates/help.php:37
1089
  msgid "Manage Your Ecwid Store"
1090
  msgstr "Управление магазином"
1091
 
1092
  #: templates/help.php:41
1093
- msgid ""
1094
- "https://support.ecwid.com/hc/en-us/sections/201758445-Customize-Your-Store"
1095
- msgstr ""
1096
- "https://support.ecwid.com/hc/ru/sections/201758445-%D0%98%D0%B7%D0%BC"
1097
- "%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B4%D0%B8%D0%B7%D0%B0%D0%B9%D0%BD"
1098
- "%D0%B0-"
1099
 
1100
  #: templates/help.php:43
1101
  msgid "Customize Your Store"
@@ -1103,21 +824,15 @@ msgstr "Изменение дизайна"
1103
 
1104
  #: templates/help.php:47
1105
  msgid "https://support.ecwid.com/hc/en-us/sections/201706799-Billing-Questions"
1106
- msgstr ""
1107
- "https://support.ecwid.com/hc/ru/sections/201706799-%D0%9F%D0%BE%D0%B4%D0%BF"
1108
- "%D0%B8%D1%81%D0%BA%D0%B0"
1109
 
1110
  #: templates/help.php:49
1111
  msgid "Billing Questions"
1112
  msgstr "Подписка"
1113
 
1114
  #: templates/help.php:53
1115
- msgid ""
1116
- "https://support.ecwid.com/hc/en-us/sections/201702859-Technical-Reference"
1117
- msgstr ""
1118
- "https://support.ecwid.com/hc/ru/sections/201702859-%D0%A2%D0%B5%D1%85%D0%BD"
1119
- "%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F-%D0%B8%D0%BD%D1%84%D0%BE"
1120
- "%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8F"
1121
 
1122
  #: templates/help.php:55
1123
  msgid "Technical Reference"
@@ -1144,12 +859,8 @@ msgid "Forums"
1144
  msgstr "Форум"
1145
 
1146
  #: templates/help.php:212
1147
- msgid ""
1148
- "Join the Ecwid community. Discuss support topics and store ideas with other "
1149
- "Ecwid users."
1150
- msgstr ""
1151
- "Общайтесь с другими пользователями Эквида и командой поддержки клиентов по "
1152
- "любым вопросам, связанным с работой вашего магазина."
1153
 
1154
  #: templates/help.php:221
1155
  msgid "Send a message to our support team"
@@ -1176,8 +887,7 @@ msgid "Your email has been sent"
1176
  msgstr "Сообщение отправлено"
1177
 
1178
  #: templates/help.php:249
1179
- msgid ""
1180
- " Thank you very much for contacting us! We will get back to you shortly."
1181
  msgstr "Спасибо! Мы скоро свяжемся с вами."
1182
 
1183
  #: templates/help.php:250
@@ -1189,14 +899,8 @@ msgid "Welcome to %s!"
1189
  msgstr "Добро пожаловать в %s!"
1190
 
1191
  #: templates/landing.php:9
1192
- msgid ""
1193
- "Thank you for choosing %s to build your online store. The first step to sell "
1194
- "successfully online is to set up your store! Let’s get started and add a "
1195
- "store to your website in a few simple steps."
1196
- msgstr ""
1197
- "Спасибо, что выбрали %s для создания вашего интернет-магазина. Первый шаг к "
1198
- "успешной онлайн торговле — настройка магазина! Давайте добавим магазин на "
1199
- "ваш сайт за несколько простых шагов."
1200
 
1201
  #: templates/landing.php:15 templates/landing.php:132
1202
  msgid "Create Store"
@@ -1219,24 +923,16 @@ msgid "Free registration, No credit card required"
1219
  msgstr "Регистрация бесплатна, кредитная карта не требуется"
1220
 
1221
  #: templates/landing.php:46
1222
- msgid ""
1223
- "Connection error: please click the button again and give permissions for "
1224
- "this plugin<br /> to show your %s store on this site."
1225
- msgstr ""
1226
- "Ошибка подключения: после нажатия на кнопку, авторизуйтесь в %s и "
1227
- "предоставьте запрашиваемые права."
1228
 
1229
  #: templates/landing.php:49 templates/landing.php:160
1230
  msgid "Already have %s account?"
1231
  msgstr "Уже есть аккаунт в %s?"
1232
 
1233
  #: templates/landing.php:53
1234
- msgid ""
1235
- "You will be asked to log in to your %s Control Panel<br />and give "
1236
- "permissions to show your store on this site"
1237
- msgstr ""
1238
- "Вам будет предложено войти в панель управления %s<br />и предоставить права "
1239
- "доступа для отображения магазина на вашем сайте"
1240
 
1241
  #: templates/landing.php:56 templates/landing_old.php:75
1242
  msgid "Get ready to sell online"
@@ -1247,21 +943,12 @@ msgid "Sell Everywhere"
1247
  msgstr "Продавайте там,<br> где ваши клиенты"
1248
 
1249
  #: templates/landing.php:68 templates/landing_old.php:87
1250
- msgid ""
1251
- "Start selling on your WordPress site. Then mirror your shop on your Facebook "
1252
- "page, blog and marketplaces like Google Shopping, Yahoo and Shopping.com."
1253
- msgstr ""
1254
- "Откройте продажи на своём WordPress сайте, а затем разместите витрину "
1255
- "магазина в социальных сетях, блоге, и выгрузите товары на торговые площадки "
1256
- "Яндекс.Маркет, eBay и Google Shopping."
1257
 
1258
  #: templates/landing.php:69
1259
- msgid ""
1260
- "Use %s's mobile-POS to swipe credit cards and sell on the go. Your orders "
1261
- "and inventory are always synchronized with your online store."
1262
- msgstr ""
1263
- "Используйте мобильное приложение %s, чтобы получать и обрабатывать заказы в "
1264
- "любой точке продаж. Все изменения синхронизируются с магазином на лету."
1265
 
1266
  #: templates/landing.php:75 templates/landing_old.php:94
1267
  msgid "Features"
@@ -1280,12 +967,8 @@ msgid "Free and always up to date"
1280
  msgstr "Бесплатный план и обновления"
1281
 
1282
  #: templates/landing.php:92 templates/landing_old.php:111
1283
- msgid ""
1284
- "Free plan always available with tons of features<br>at no additional cost. "
1285
- "Updates are seamless, automatic<br>and free of charge."
1286
- msgstr ""
1287
- "Всегда доступный бесплатный план с множеством<br>возможностей. Обновления "
1288
- "магазина автоматизированы,<br> бесплатны и не требуют вашего участия."
1289
 
1290
  #: templates/landing.php:102 templates/landing_old.php:121
1291
  msgid "Responsive design"
@@ -1293,9 +976,7 @@ msgstr "Адаптивный дизайн"
1293
 
1294
  #: templates/landing.php:103 templates/landing_old.php:122
1295
  msgid "Your store looks perfect<br />on all devices"
1296
- msgstr ""
1297
- "Ваш магазин выглядит превосходно<br />на любом устройстве: планшете, "
1298
- "смартфоне и ноутбуке."
1299
 
1300
  #: templates/landing.php:111 templates/landing_old.php:130
1301
  msgid "PCI DSS Certified"
@@ -1303,9 +984,7 @@ msgstr "Сертификация по PCI DSS"
1303
 
1304
  #: templates/landing.php:112 templates/landing_old.php:131
1305
  msgid "Secure checkout with over 40<br />payment options"
1306
- msgstr ""
1307
- "Эквид сертифицирован по стандарту Level 1 PCI DSS – самому высокому уровню "
1308
- "безопасности передачи данных."
1309
 
1310
  #: templates/landing.php:120 templates/landing_old.php:139
1311
  msgid "Global Reach"
@@ -1328,30 +1007,20 @@ msgid "Plugin is installed successfully!"
1328
  msgstr "Плагин успешно установлен!"
1329
 
1330
  #: templates/landing_old.php:9
1331
- msgid ""
1332
- "There are just a few steps left to start selling<br /> on your WordPress site"
1333
- msgstr ""
1334
- "До открытия магазина на вашем WordPress сайте<br /> осталось несколько "
1335
- "простых шагов"
1336
 
1337
  #: templates/landing_old.php:13
1338
- msgid ""
1339
- "There are few little steps left to start selling<br /> on your WordPress site"
1340
- msgstr ""
1341
- "До открытия магазина на вашем WordPress сайте<br /> осталось несколько "
1342
- "простых шагов"
1343
 
1344
  #: templates/landing_old.php:19
1345
  msgid "Register"
1346
  msgstr "Зарегистрируйтесь"
1347
 
1348
  #: templates/landing_old.php:20
1349
- msgid ""
1350
- "Create a free Ecwid account to manage your store and inventory.<br /> No "
1351
- "credit card required"
1352
- msgstr ""
1353
- "Зарегистрируйте бесплатный аккаунт в Эквиде.<br /> Кредитная карта не "
1354
- "требуется"
1355
 
1356
  #: templates/landing_old.php:29
1357
  msgid "Add your Ecwid store to your site <nobr>in two clicks</nobr>"
@@ -1378,20 +1047,12 @@ msgid "Connect your store"
1378
  msgstr "Подключить магазин"
1379
 
1380
  #: templates/landing_old.php:55
1381
- msgid ""
1382
- "Connection error: please click the button again and give permissions for "
1383
- "this plugin<br /> to show your Ecwid store on this site."
1384
- msgstr ""
1385
- "Ошибка подключения: пожалуйста, нажмите кнопку ещё раз и предоставьте права "
1386
- "доступа плагину<br /> для публикации своего Эквид-магазина на этом сайте."
1387
 
1388
  #: templates/landing_old.php:58 templates/landing_old.php:69
1389
- msgid ""
1390
- "You will be asked to log in to your Ecwid Control Panel<br />and give "
1391
- "permissions to show your store on this site"
1392
- msgstr ""
1393
- "Вам будет предложено войти в панель управления Эквида<br />и предоставить "
1394
- "права доступа для отображения магазина на вашем сайте"
1395
 
1396
  #: templates/landing_old.php:61 templates/landing_old.php:157
1397
  msgid "Already have Ecwid account?"
@@ -1414,16 +1075,11 @@ msgid "Sell Everywhere<br>with your Ecwid store"
1414
  msgstr "Продавайте там,<br> где ваши клиенты"
1415
 
1416
  #: templates/landing_old.php:88
1417
- msgid ""
1418
- "Use Ecwid's mobile-POS to swipe credit cards and sell on the go. Your orders "
1419
- "and inventory are always synchronized with your online store."
1420
- msgstr ""
1421
- "Используйте наше мобильное приложение, чтобы получать и обрабатывать заказы "
1422
- "в любой точке продаж. Все изменения синхронизируются с магазином на лету."
1423
 
1424
  #: templates/landing_old.php:102
1425
- msgid ""
1426
- "Ecwid is compatible with your<br>“%s” WordPress theme<br>out of the box."
1427
  msgstr "Эквид совместим с темой<br>\"%s\" вашего сайта из коробки."
1428
 
1429
  #: templates/landing_old.php:140
@@ -1442,8 +1098,7 @@ msgstr "Название"
1442
  msgid "SKU"
1443
  msgstr "Артикул"
1444
 
1445
- #: templates/product-popup.php:47 templates/product-popup.php:53
1446
- #: templates/product-popup.php:56
1447
  msgid "Search"
1448
  msgstr "Поиск"
1449
 
@@ -1460,11 +1115,8 @@ msgid "Next page"
1460
  msgstr "Следующая"
1461
 
1462
  #: templates/product-popup.php:94
1463
- msgid ""
1464
- "Nothing found for <span class=\"empty-page__term\">\"{{ data.term }}\"</span>"
1465
- msgstr ""
1466
- "По запросу <span class=\"empty-page__term\">\"{{ data.term }}\"</span> "
1467
- "ничего не найдено"
1468
 
1469
  #: templates/product-popup.php:96
1470
  msgid "Try another search."
@@ -1557,33 +1209,20 @@ msgid "Your store Control Panel. Right here in WordPress."
1557
  msgstr "Панель управления магазином, встроенная в Wordpress."
1558
 
1559
  #: templates/reconnect-sso.php:12
1560
- msgid ""
1561
- "Manage products, track sales, adjust settings - <nobr>All without</nobr> "
1562
- "leaving this page."
1563
- msgstr ""
1564
- "Вы сможете добавлять товары, обрабатывать заказы и управлять магазином прямо "
1565
- "на этой странице."
1566
 
1567
  #: templates/reconnect-sso.php:14
1568
  msgid "Re-connect to Enable Control Panel"
1569
  msgstr "Подключить панель управления"
1570
 
1571
  #: templates/reconnect.php:31
1572
- msgid ""
1573
- "Connection error - after clicking button you need to login and accept "
1574
- "permissions to use our plugin. Please, try again."
1575
- msgstr ""
1576
- "Ошибка подключения: после нажатия на кнопку, авторизуйтесь в Эквиде и "
1577
- "предоставьте запрашиваемые права."
1578
 
1579
  #: templates/reconnect.php:39
1580
- msgid ""
1581
- "Looks like your site does not support remote POST requests that are required "
1582
- "for %s API to work. Please, contact your hosting provider to enable cURL."
1583
- msgstr ""
1584
- "Похоже, что ваш сервер не поддерживает удаленные POST запросы, которые "
1585
- "необходимы для работы %s API. Пожалуйста, свяжитесь с хостинг-провайдером, "
1586
- "чтобы исправить это."
1587
 
1588
  #: templates/store-popup.php:12 templates/store-popup.php:25
1589
  msgid "Store elements"
@@ -1610,12 +1249,8 @@ msgid "Show categories"
1610
  msgstr "Меню категорий"
1611
 
1612
  #: templates/store-popup.php:72
1613
- msgid ""
1614
- "Additionally, you can add store controls to your website's toolbar using <a "
1615
- "%s>WordPress native widgets</a>"
1616
- msgstr ""
1617
- "Кроме того, вы можете добавить отдельные элементы магазина в сайдбар сайта "
1618
- "используя <a %s>встроенные виджеты WordPress</a>"
1619
 
1620
  #: templates/store-popup.php:233
1621
  msgid "Demo store"
@@ -1642,12 +1277,8 @@ msgid "Demo Store"
1642
  msgstr "Демонстрационный магазин"
1643
 
1644
  #: templates/sync.php:161
1645
- msgid ""
1646
- "To enable this feature, the plugin needs a permission to read your store "
1647
- "product information."
1648
- msgstr ""
1649
- "Чтобы включить интеграцию с поиском, нужно дать плагину доступ до данных "
1650
- "товаров в магазине."
1651
 
1652
  #: templates/sync.php:162
1653
  msgid "Provide access."
@@ -1658,20 +1289,15 @@ msgid "Synchronize products"
1658
  msgstr "Синхронизировать товары"
1659
 
1660
  #: templates/sync.php:175
1661
- msgid ""
1662
- "We're synchronizing your products. This may take a few minutes. Please do "
1663
- "not reload the page."
1664
- msgstr ""
1665
- "Товары загружаются. Это может занять несколько минут. Пожалуйста, не "
1666
- "перезагружайте страницу."
1667
 
1668
  #: templates/sync.php:179
1669
  msgid "Products synchronized: %s out of %s"
1670
  msgstr "Загружено товаров: %s из %s"
1671
 
1672
  #: templates/sync.php:186
1673
- msgid ""
1674
- "Products are successfully synchronized. The product pages are up to date."
1675
  msgstr "Товары успешно синхронизированы. Страницы товаров обновлены."
1676
 
1677
  #: templates/sync.php:190
@@ -1708,7 +1334,7 @@ msgstr "https://support.ecwid.com/hc/ru"
1708
 
1709
  #. Plugin Name of the plugin/theme
1710
  msgid "Ecwid Shopping Cart"
1711
- msgstr "Интернет-магазин Эквид"
1712
 
1713
  msgid "%s products and categories"
1714
  msgstr "Товары и категории магазина %s"
@@ -1902,6 +1528,9 @@ msgstr "Горизонтальные 4:3"
1902
  msgid "Landscape 3:2"
1903
  msgstr "Горизонтальные 3:2"
1904
 
 
 
 
1905
  msgid "Migration warning"
1906
  msgstr ""
1907
 
@@ -2016,33 +1645,21 @@ msgstr "Витрина магазина"
2016
  msgid "To improve the look and feel of your product page and manage your its appearance here, please enable the “Next-gen look and feel of the product page on the storefront” option in your store dashboard (<a href=\"admin.php?page=ec-store-admin-whatsnew\">Settings → What’s New</a>)."
2017
  msgstr "Чтобы обновить дизайн страницы товара и управлять настройками вида в редакторе, включите опцию “Обновленный внешний вид страницы товара” в панели управления магазина (<a href=\"admin.php?page=ec-store-admin-whatsnew\">Настройки → Обновления</a>)"
2018
 
2019
- #. #-#-#-#-# ecwid-shopping-cart.pot (Ecwid Shopping Cart 5.2) #-#-#-#-#
2020
  #. Plugin URI of the plugin/theme
2021
- #. #-#-#-#-# ecwid-shopping-cart.pot (Ecwid Shopping Cart 5.2) #-#-#-#-#
2022
  #. Author URI of the plugin/theme
2023
  msgid "http://www.ecwid.com?source=wporg"
2024
  msgstr ""
2025
 
2026
  #. Description of the plugin/theme
2027
- msgid ""
2028
- "Ecwid is a free full-featured shopping cart. It can be easily integrated "
2029
- "with any Wordpress blog and takes less than 5 minutes to set up."
2030
  msgstr "Эквид — это конструктор интернет-магазина."
2031
 
2032
  #. Author of the plugin/theme
2033
  msgid "Ecwid Team"
2034
  msgstr ""
2035
 
2036
- #~ msgid ""
2037
- #~ "Updated %s widgets are available for your %s store. They are more mobile "
2038
- #~ "friendly and look better. Please enable them on the plugin settings page "
2039
- #~ "and check how they work in your store. The new widgets will be enabled "
2040
- #~ "automatically for all users in one of the upcoming plugin versions."
2041
- #~ msgstr ""
2042
- #~ "Блоки %s в вашем %s-магазине обновлены – теперь они выглядят приятнее и "
2043
- #~ "лучше работают на мобильных. Пожалуйста, включите новый вид блоков поиска "
2044
- #~ "и категорий на странице настроек плагина. В одном следующих обновлений "
2045
- #~ "плагина они будут включены автоматически для всех пользователей."
2046
 
2047
  #~ msgctxt "upgrade widgets message"
2048
  #~ msgid "Categories"
@@ -2051,21 +1668,11 @@ msgstr ""
2051
  #~ msgid "Open %s store settings"
2052
  #~ msgstr "Открыть настройки плагина %s"
2053
 
2054
- #~ msgid ""
2055
- #~ "<a href=\"admin.php?page=ecwid-help\">Read FAQ or contact support</a>"
2056
- #~ msgstr ""
2057
- #~ "<a href=\"admin.php?page=ecwid-help\">Посетите Центр поддержки Эквида или "
2058
- #~ "напишите нам</a>"
2059
 
2060
  #~ msgid "Enable the new category menu"
2061
  #~ msgstr "Включить новое меню категорий"
2062
 
2063
- #~ msgid ""
2064
- #~ "The new category menu looks better and is more mobile-friendly. If you "
2065
- #~ "haven't yet added category menu to your store page, you can do that in "
2066
- #~ "the <a %s>store page editor</a> (enable the \"Show categories\" option)"
2067
- #~ msgstr ""
2068
- #~ "Новое меню категорий лучше выглядит и отлично работает на мобильных "
2069
- #~ "устройствах. Если у вас на странице магазина пока нет меню категорий, "
2070
- #~ "добавьте его в <a %s>настройках страницы магазина</a> (включите виджет "
2071
- #~ "\"Категории\")."
3
  msgid ""
4
  msgstr ""
5
  "Project-Id-Version: Ecwid Shopping Cart 4.9.4\n"
6
+ "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/ecwid-shopping-cart\n"
 
7
  "POT-Creation-Date: 2017-05-30 19:04:12+00:00\n"
8
+ "PO-Revision-Date: 2019-03-11 10:13+0400\n"
9
+ "Language: ru_RU\n"
 
 
10
  "MIME-Version: 1.0\n"
11
  "Content-Type: text/plain; charset=UTF-8\n"
12
  "Content-Transfer-Encoding: 8bit\n"
13
+ "Last-Translator: \n"
14
+ "Language-Team: \n"
15
+ "X-Generator: Poedit 2.2.1\n"
16
 
17
  #: ecwid-shopping-cart.php:820
18
  msgid "%s plugin doesn't work well with my \"%s\" theme"
35
  msgstr "Посмотреть FAQ"
36
 
37
  #: ecwid-shopping-cart.php:881
38
+ msgid "https://support.ecwid.com/hc/en-us/articles/360000635709-Customizing-design-of-your-Ecwid-store-on-a-Wordpress-site"
 
39
  msgstr "https://support.ecwid.com/hc/ru/articles/207101259-Wordpress-ORG"
40
 
41
  #: ecwid-shopping-cart.php:890
46
  msgid "<a %s>Online store powered by %s</a>"
47
  msgstr "<a %s>Интернет магазин построен на Эквиде</a>"
48
 
49
+ #: ecwid-shopping-cart.php:1497 includes/class-ecwid-nav-menus.php:111 includes/class-ecwid-nav-menus.php:297 includes/class-ecwid-nav-menus.php:300 includes/class-ecwid-nav-menus.php:308
 
 
 
50
  msgid "Store"
51
  msgstr "Магазин"
52
 
66
  msgid "Dashboard"
67
  msgstr "Консоль"
68
 
69
+ #: ecwid-shopping-cart.php:1801 includes/class-ecwid-admin.php:58 includes/class-ecwid-admin.php:59 includes/class-ecwid-products.php:242
 
70
  msgid "Products"
71
  msgstr "Товары"
72
 
83
  msgstr "Готово"
84
 
85
  #: ecwid-shopping-cart.php:1807 includes/class-ecwid-nav-menus.php:146
86
+ msgid "The store top-level categories are automatically added to this drop-down menu"
 
87
  msgstr "Корневые категории добавляются в выпадающее меню автоматически"
88
 
89
  #: ecwid-shopping-cart.php:1916 includes/class-ecwid-oauth.php:336
90
+ msgid "To be able to choose a product to insert to your posts and pages, you will need to re-connect your site to your %s. This will only require you to accept permissions request – so that the plugin will be able to list your products in the \"Add product\" dialog."
91
+ msgstr "Чтобы показать товары магазина в диалоге вставки товара, плагину нужно подключиться к вашему магазину %s. От вас потребуется только разрешить плагину доступ к вашему магазину."
 
 
 
 
 
 
 
92
 
93
  #: ecwid-shopping-cart.php:2420
94
  msgid "Recommendations for Your Online Store"
110
  msgid "Appearance settings"
111
  msgstr "Настройки внешнего вида"
112
 
113
+ #: includes/class-ecwid-admin.php:69 templates/product-popup.php:183 templates/store-popup.php:13 templates/store-popup.php:31
 
114
  msgid "Appearance"
115
  msgstr "Внешний вид"
116
 
143
  msgstr ""
144
 
145
  #: includes/class-ecwid-integration-divibuilder.php:51
146
+ msgid "This will change the label of the module in the builder for easy identification."
 
 
147
  msgstr ""
148
 
149
  #: includes/class-ecwid-integration-divibuilder.php:54
151
  msgstr ""
152
 
153
  #: includes/class-ecwid-integration-divibuilder.php:57
154
+ msgid "Enter an optional CSS ID to be used for this module. An ID can be used to create custom CSS styling, or to create links to particular sections of your page."
 
 
 
155
  msgstr ""
156
 
157
  #: includes/class-ecwid-integration-divibuilder.php:60
159
  msgstr ""
160
 
161
  #: includes/class-ecwid-integration-divibuilder.php:63
162
+ msgid "Enter optional CSS classes to be used for this module. A CSS class can be used to create custom CSS styling. You can add multiple classes, separated with a space."
 
 
 
163
  msgstr ""
164
 
165
  #: includes/class-ecwid-message-manager.php:45
166
  msgid ""
167
+ "Sorry, there is a problem. This page is supposed to display your store Control Panel. However, this Wordpress site doesn't seem to be able to connect to the Ecwid server to show your store dashboard here. This is likely caused by your server misconfiguration and can be fixed by your hosting "
168
+ "provider. Here is a more techy description of the problem, which you can send to your hosting provider: \"The Wordpress function wp_remote_post() failed to connect a remote server because of some error: \"%s\". Seems like HTTP POST requests are disabled on this server\". <br /><br />Please "
169
+ "feel free to contact us at <a %s>wordpress@ecwid.com</a> and we will help you contact your hosting and ask them to fix the issue. <br /><br /> Meanwhile, to manage your store, you can use the Ecwid Web Control Panel at <a %s>my.ecwid.com</a>. Your store front is working fine as well and you "
170
+ "can check it here: <a %s>%s</a>."
 
 
 
 
 
 
 
 
 
171
  msgstr ""
172
 
173
  #: includes/class-ecwid-message-manager.php:194
195
  msgstr "Продолжить установку"
196
 
197
  #: includes/class-ecwid-message-manager.php:212
198
+ msgid "To add extra functions to your store, drag and drop %s store elements on your site. When you're done, you can get back to modifying your settings."
199
+ msgstr "Добавьте дополнительные элементы магазина, перетащив виджеты %s в нужное место сайта. После установки виджетов можете вернуться к настройкам магазина."
 
 
 
 
200
 
201
  #: includes/class-ecwid-message-manager.php:213
202
  msgid "Back to Store Settings"
203
  msgstr "Вернуться к настройкам"
204
 
205
  #: includes/class-ecwid-message-manager.php:220
206
+ msgid "Do you like your %s online store? We'd appreciate it if you add your review and vote for the plugin on WordPress site."
207
+ msgstr "Вам нравится ваш магазин? Будем благодарны, если вы оставите отзыв и проголосуете за %s на сайте WordPress."
 
 
 
 
208
 
209
  #: includes/class-ecwid-message-manager.php:224
210
  msgid "Rate %s at WordPress.org"
230
  msgid "Cart"
231
  msgstr "Корзина"
232
 
233
+ #: includes/class-ecwid-nav-menus.php:276 includes/widgets/class-ecwid-widget-minicart.php:6
 
234
  msgid "Shopping Cart"
235
  msgstr "Корзина"
236
 
237
+ #: includes/class-ecwid-nav-menus.php:281 includes/class-ecwid-nav-menus.php:284 includes/widgets/class-ecwid-widget-search.php:10
 
 
238
  msgid "Product Search"
239
  msgstr "Поиск товаров"
240
 
241
+ #: includes/class-ecwid-nav-menus.php:289 includes/class-ecwid-nav-menus.php:292
 
242
  msgid "My Account"
243
  msgstr "Профиль"
244
 
266
  msgid "Last Page"
267
  msgstr "Конец"
268
 
269
+ #: includes/class-ecwid-store-editor.php:44 templates/store-popup.php:11 templates/store-popup.php:19
 
270
  msgid "Add Store"
271
  msgstr "Добавить магазин"
272
 
284
 
285
  #: includes/faq_entries.php:6
286
  msgid ""
287
+ "Ecwid is PCI DSS Level 1 certified, which is the gold standard for e-commerce solutions worldwide. This means you won't have any banking compliance issues when selling online with Ecwid. <a target=\"_blank\" href=\"https://support.ecwid.com/hc/en-us/articles/207101259-Wordpress-downloadable-"
288
+ "#security\">More details.</a>"
 
 
 
289
  msgstr ""
290
+ "Эквид сертифицирован по стандарту PCI DSS Level 1. Это высший уровень соответствия мировым требованиям безопасной передачи данных: информация вашего магазина и ваших клиентов надёжно защищена. <a target=\"_blank\" href=\"https://support.ecwid.com/hc/ru/articles/207101259-Wordpress#security"
291
+ "\">Подробнее о безопасности.</a>"
 
 
 
292
 
293
  #: includes/faq_entries.php:12
294
  msgid "How can I manage my store from a mobile device?"
296
 
297
  #: includes/faq_entries.php:13
298
  msgid ""
299
+ "Ecwid provides free mobile applications for iOS and Android to manage your store and sell on the go. Scan products, track inventory, manage sales and accept payments using your mobile device as a POS station. <a target=\"_blank\" href=\"https://www.ecwid.com/ecwid-mobile\">More details.</a>"
 
 
 
300
  msgstr ""
301
+ "Лучший способ быстро изменить что-либо в товаре – воспользоваться мобильным приложение. Приложение Эквида для iOS и Android доступно с любым платным тарифным планом и поможет вам управлять заказами, вносить изменения в каталог товаров и регистрировать новые покупки при личных встречах с "
302
+ "покупателями где бы вы ни находились. <a target=\"_blank\" href=\"https://www.ecwid.ru/blog/quick-mobile-connect.html\">Подробнее о мобильном приложении.</a>"
 
 
 
 
 
303
 
304
  #: includes/faq_entries.php:20
305
  msgid "How to set up a storefront on Facebook with Ecwid?"
307
 
308
  #: includes/faq_entries.php:21
309
  msgid ""
310
+ "You can add your online store to your Facebook business page. No addons needed. Ecwid will automatically synchronize products, customers, orders and inventory between your WordPress and Facebook storefronts. <a target=\"_blank\" href=\"https://support.ecwid.com/hc/en-us/articles/115005892705-"
311
+ "Facebook-Shop\">More details.</a>"
 
 
 
312
  msgstr ""
313
+ "Вы можете разместить магазин не только на своём WordPress-сайте, но и на любой другой странице включая Facebook. Зеркальная копия витрины мгновенно отражает любые изменения в магазине. Новые товары в каталоге, наличие на складе, заказы и покупатели – все данные распространяются между "
314
+ "витринами на лету. <a target=\"_blank\" href=\"https://support.ecwid.com/hc/ru/articles/115005892705-%D0%9C%D0%B0%D0%B3%D0%B0%D0%B7%D0%B8%D0%BD-%D0%BD%D0%B0-%D0%A4%D0%B5%D0%B9%D1%81%D0%B1%D1%83%D0%BA%D0%B5\">Подробнее об установке на Facebook.</a>"
 
 
 
 
 
315
 
316
  #: includes/faq_entries.php:28
317
  msgid "How can I add a cart widget to my site sidebar?"
318
  msgstr "Как добавить корзину в боковую панель сайта (sidebar)?"
319
 
320
  #: includes/faq_entries.php:30
321
+ msgid "You can add product search box, cart widget and more on the <a href=\"%s\">\"Appearance / Widgets page\"</a> here in your site admin. <a target=\"_blank\" href=\"https://support.ecwid.com/hc/en-us/articles/207101259-Wordpress-downloadable-#sidebarwidgets\">More details.</a>"
322
+ msgstr "Вы можете добавить корзину, форму для поиска товаров и другие элементы магазина в боковую панель на странице <a href=\"%s\">«Внешний вид > Виджеты»</a>."
 
 
 
 
 
 
 
323
 
324
  #: includes/faq_entries.php:38
325
  msgid "How much does Ecwid cost?"
326
  msgstr "Сколько стоит Эквид?"
327
 
328
  #: includes/faq_entries.php:39
329
+ msgid "Our 4 account types vary by number of products, types of functionality, and level of support. For more information, check out our <a target=\"_blank\" href=\"%s\">pricing page.</a><br /><br />Pro Tip: You can also save money by enrolling in our annual plans."
330
+ msgstr "Мы предлагаем 4 тарифных плана: от бесплатного с 10 товарами до безлимитного. Платные тарифные планы расширяют возможности магазина и открывают персональную техническую поддержку в реальном времени.<br /><a target=\"_blank\" href=\"%s\">Подробнее о расценках.</a>"
 
 
 
 
 
 
 
 
331
 
332
  #: includes/faq_entries.php:45
333
  msgid "How do I add store categories to the site menu?"
335
 
336
  #: includes/faq_entries.php:46
337
  msgid ""
338
+ "You can add the store categories menu to your site menu to help your customers easily navigate your site. Just open \"Appearance > Menus\" in your WordPress control panel and add the \"Store with Categories Menu\" item to your site menu. A drop-down menu containing your store categories will "
 
 
 
339
  "automatically appear on your site."
340
+ msgstr "Перейдите на страницу «Внешний вид > Меню», добавьте элемент «Магазин с меню категорий» в меню и сохраните изменения. Сразу после сохранения меню сайта пополнится выпадающим списком категорий вашего магазина."
 
 
 
341
 
342
  #: includes/faq_entries.php:52
343
  msgid "How do I put my products in the sitemap?"
345
 
346
  #: includes/faq_entries.php:53
347
  msgid ""
348
+ "To create sitemap for your Wordpress site we suggest using <a target=\"_blank\" href=\"https://wordpress.org/plugins/google-sitemap-generator/\">Google XML Sitemaps</a> or <a target=\"_blank\" href=\"https://wordpress.org/plugins/wordpress-seo/\">Yoast Wordpress SEO</a>. &nbsp;plugins. These "
349
+ "plugins are fully compatible with Ecwid and allow to generate a sitemap that will contain links to categories and product pages, so the store pages will get indexed faster. Please note that this option is available to <a target=\"_blank\" href=\"https://www.ecwid.com/pricing\">paid Ecwid "
350
+ "users</a>."
 
 
 
 
 
351
  msgstr ""
352
+ "Для создания карты сайта мы рекомендуем использовать плагин <a target=\"_blank\" href=\"https://ru.wordpress.org/plugins/google-sitemap-plugin/\">Google XML Sitemaps</a> или <a target=\"_blank\" href=\"https://ru.wordpress.org/plugins/wordpress-seo/\">Yoast Wordpress SEO</a>. После установки "
353
+ "плагин создаст карту сайта, содержащую ссылки на страницы товаров и категорий, и ускорит их индексацию поисковыми движками. Чтобы воспользоваться этой возможностью подпишитесь на любой <a target=\"_blank\" href=\"https://www.ecwid.ru/pricing\">платный тарифный план</a>."
 
 
 
 
 
 
354
 
355
  #: includes/faq_entries.php:58
356
+ msgid "How to add a single product with the add to bag button to the site pages?"
 
357
  msgstr "Как добавить отдельный товар с корзиной на страницу сайта?"
358
 
359
  #: includes/faq_entries.php:59
360
+ msgid "To feature a single product on a separate page or blog post of your site, use <b>[ecwid_product]</b> shortcode. <a target=\"_blank\" href=\"https://support.ecwid.com/hc/en-us/articles/207101259-Wordpress-downloadable-#buynow\">How to use it.</a>"
361
+ msgstr "Чтобы разместить товар магазина на страницах сайта отдельно от остальных, используйте короткий код [ecwid_product]. <a target=\"_blank\" href=\"https://support.ecwid.com/hc/ru/articles/207101259-Wordpress#embedasingleproduct\">Пошаговая инструкция.</a>"
 
 
 
 
 
 
 
 
362
 
363
  #: includes/faq_entries.php:65
364
  msgid "Is it possible to display my store on the site home page?"
365
  msgstr "Как добавить магазин на домашнюю страницу?"
366
 
367
  #: includes/faq_entries.php:66
368
+ msgid "You can display your store on the site main page. Adjust the \"Reading\" settings of your site as described in our <a target=\"_blank\" href=\"https://support.ecwid.com/hc/en-us/articles/207101259-Wordpress-downloadable-#displaystoreonhomepage\">Help Center.</a>"
369
+ msgstr "Перейдите на страницу <a href=\"options-reading.php\">«Настройки > Чтение»</a> и выберите «Магазин\t» в выпадающем списке главной страницы."
 
 
 
 
 
 
370
 
371
  msgid "Is there a WordPress theme for Ecwid?"
372
  msgstr "Существуют ли темы для Эквида?"
373
 
374
  #: includes/faq_entries.php:66
375
  msgid "Ecwid is compatible with any WordPress theme. Be it a free theme from WordPress.org catalog, a premium theme by a third-party vendor or a custom-made theme, your Ecwid store will work good with it. If you want a premium theme, we recommend <a href=\"%s\">TemplateMonster themes</a>"
376
+ msgstr "Эквид совместим с любой темой, будь то бесплатная тема из каталога WordPress.org, платная тема или заказная разработка. Ваш магазин должен работать хорошо в любом случае. Если вы ищете хорошие премиум-темы, мы рекомендуем <a href=\"%s\">TemplateMonster</a>"
 
 
377
 
378
  #: includes/oembed.php:68 includes/oembed.php:97 templates/help.php:96
379
  msgid "See more"
380
  msgstr "Посмотреть все"
381
 
382
+ #: includes/themes/class-ecwid-theme-twentyfifteen.php:32 includes/themes/class-ecwid-theme-twentyfifteen.php:38 includes/themes/class-ecwid-theme-twentyseventeen.php:47 includes/themes/class-ecwid-theme-twentyseventeen.php:53 includes/themes/class-ecwid-theme-twentysixteen.php:35
383
+ #: includes/themes/class-ecwid-theme-twentysixteen.php:41 includes/widgets/class-ecwid-widget-store-link.php:29
 
 
 
 
 
384
  msgid "Shop"
385
  msgstr "Магазин"
386
 
387
  #: includes/widgets/class-ecwid-widget-badge.php:9
388
+ msgid "Do you like Ecwid and want to help it grow? You can add this fancy 'Powered by Ecwid' badge on your site to show your visitors that you're a proud user of Ecwid."
389
+ msgstr "Если вам нравится Эквид и вы хотите помочь ему стать самым популярным конструктором интернет-магазинов, вы можете добавить значок на сайт, чтобы показать посетителям, что вы пользуетесь Эквидом."
 
 
 
 
 
 
390
 
391
  #: includes/widgets/class-ecwid-widget-badge.php:10
392
  msgid "Ecwid Badge"
393
  msgstr "Значок Эквида"
394
 
395
+ #: includes/widgets/class-ecwid-widget-badge.php:17 includes/widgets/class-ecwid-widget-badge.php:23
 
396
  msgid "Ecwid shopping cart widget"
397
  msgstr "Виджет интернет-магазина Эквид"
398
 
399
+ #: includes/widgets/class-ecwid-widget-badge.php:29 includes/widgets/class-ecwid-widget-badge.php:65
 
400
  msgid "Ecwid ecommerce solution"
401
  msgstr "Решение для электронной коммерции Эквид"
402
 
403
+ #: includes/widgets/class-ecwid-widget-badge.php:35 includes/widgets/class-ecwid-widget-badge.php:71
 
404
  msgid "Ecwid free shopping cart"
405
  msgstr "Беспланный конструктов интернет-магазинов Эквид"
406
 
407
+ #: includes/widgets/class-ecwid-widget-badge.php:41 includes/widgets/class-ecwid-widget-badge.php:53
 
408
  msgid "Ecwid shopping cart"
409
  msgstr "Интернет-магазин Эквид"
410
 
411
+ #: includes/widgets/class-ecwid-widget-badge.php:47 includes/widgets/class-ecwid-widget-badge.php:59
 
412
  msgid "Ecwid e-commerce widgets"
413
  msgstr "Виджеты для электронной коммерции Эквид"
414
 
433
  msgstr "Справа вверху"
434
 
435
  #: includes/widgets/class-ecwid-widget-minicart-miniview.php:5
436
+ msgid "Adds a compact cart widget for customer to see the products they added to the cart."
437
+ msgstr "Добавляет компактный виджет корзины покупателя для быстрого доступа к добавленным товарам."
 
 
 
 
438
 
439
  #: includes/widgets/class-ecwid-widget-minicart-miniview.php:6
440
  msgid "Shopping Cart (Mini)"
441
  msgstr "Корзина (Мини)"
442
 
443
+ #: includes/widgets/class-ecwid-widget-minicart-miniview.php:44 includes/widgets/class-ecwid-widget-minicart.php:44 includes/widgets/class-ecwid-widget-search.php:49 includes/widgets/class-ecwid-widget-vcategories.php:43 includes/widgets/class-ecwid-widget-vertical-categories-list.php:71
 
 
 
 
444
  msgid "Title:"
445
  msgstr "Название:"
446
 
447
  #: includes/widgets/class-ecwid-widget-minicart.php:5
448
+ msgid "Adds a cart widget for customer to see the products they added to the cart."
449
+ msgstr "Добавляет виджет корзины покупателя для быстрого доступа к добавленным товарам."
 
 
 
450
 
451
  #: includes/widgets/class-ecwid-widget-recently-viewed.php:9
452
+ msgid "Displays a list of products recently viewed by the customer to easily return to the products they saw in your shop."
453
+ msgstr "Показывает список товаров, просмотренных покупателем. Позволяет покупателю быстро перейти к товарам, которые их заинтересовали раньше."
 
 
 
 
454
 
455
+ #: includes/widgets/class-ecwid-widget-recently-viewed.php:10 includes/widgets/class-ecwid-widget-recently-viewed.php:153
 
456
  msgid "Recently Viewed Products"
457
  msgstr "Просмотренные товары"
458
 
459
+ #: includes/widgets/class-ecwid-widget-recently-viewed.php:124 includes/widgets/class-ecwid-widget-recently-viewed.php:154
 
460
  msgid "You have not viewed any product yet. Open store."
461
  msgstr "Вы пока что не просмотрели ни одного товара. Открыть магазин."
462
 
463
+ #: includes/widgets/class-ecwid-widget-recently-viewed.php:164 templates/product-popup.php:160
 
464
  msgid "Title"
465
  msgstr "Название"
466
 
473
  msgstr "Количество товаров для отображения"
474
 
475
  #: includes/widgets/class-ecwid-widget-search.php:9
476
+ msgid "Displays a simple search box for your customers to find a product in your store"
 
 
477
  msgstr "Показывает покупателю поле поиска товаров в магазине"
478
 
479
  #: includes/widgets/class-ecwid-widget-store-link.php:5
480
+ msgid "Displays a link to the store page in sidebar for customer to quickly access your store from any page on the site."
481
+ msgstr "Показывает ссылку на страницу магазина, позволяющую покупателю быстро открыть магазин из любой страницы на сайте."
 
 
 
 
482
 
483
  #: includes/widgets/class-ecwid-widget-store-link.php:6
484
  msgid "Store Page Link"
490
 
491
  #: includes/widgets/class-ecwid-widget-vcategories.php:5
492
  msgid "Adds vertical categories block to let the customer navigate your store."
493
+ msgstr "Показывает вертикальный список категорий для удобной навигации по магазину."
 
494
 
495
  #: includes/widgets/class-ecwid-widget-vcategories.php:6
496
  msgid "Store Categories"
497
  msgstr "Категории магазина"
498
 
499
  #: includes/widgets/class-ecwid-widget-vertical-categories-list.php:11
500
+ msgid "Adds root categories list to the sidebar to let your customers navigate the store."
501
+ msgstr "Показывает список корневых категорий для удобной навигации по магазину."
 
 
 
502
 
503
  #: includes/widgets/class-ecwid-widget-vertical-categories-list.php:12
504
  msgid "Store Root Categories"
505
  msgstr "Корневые категории магазина"
506
 
507
+ #: includes/widgets/class-ecwid-widget-vertical-categories-list.php:22 includes/widgets/class-ecwid-widget-vertical-categories-list.php:68
 
508
  msgid "Browse by Category"
509
  msgstr "Категории магазина"
510
 
541
  msgstr "Простите, у нас технические проблемы."
542
 
543
  #: templates/admin-timeout.php:11
544
+ msgid "Our team is already working on this issue. Please refresh the page in a few minutes. If the issue persists, please contact <a target=\"_blank\" href=\"https://help.ecwid.com/customer/portal/emails/new\">our customer support team</a>."
545
+ msgstr "Мы уже работаем над исправлением проблемы. Перезагрузите страницу через пару минут. Если проблема сохранится, пожалуйста, <a target=\"_blank\" href=\"https://help.ecwid.com/customer/portal/emails/new\">свяжитесь с нами</a>."
 
 
 
 
 
 
 
546
 
547
  #: templates/advanced-settings.php:1
548
  msgid "%s — Advanced settings"
553
  msgstr "SEO URLs"
554
 
555
  #: templates/advanced-settings.php:34
556
+ msgid "This enables new clean URLs format in your store. The new urls do not contain hash sign ('#'), so they look nicer and are better indexed by Google."
557
+ msgstr "Включает новый \"чистый\" формат ссылок на товары и категории в магазине. Новые ссылки не содержат символа \"#\" и лучше индексируются поисковыми системами."
 
 
 
 
 
558
 
559
  #: templates/advanced-settings.php:38
560
+ msgid "To enable clean URLs in your store, you will need to enable pretty permalinks in your WordPress site settings. Navigate to <a%s>Settings->Permalink</a> and enable the \"Post name\" permalink type."
561
+ msgstr "Чтобы включить SEO URLs в магазине, вам потребуется для начала включить улучшенную структуру постоянных ссылок в настройках Wordpress. Для этого в меню \"<a%s>Настройки -> Постоянные ссылки</a>\" выберите тип ссылок \"Название записи\"."
 
 
 
 
 
 
 
562
 
563
  #: templates/advanced-settings.php:44
564
+ msgid "Note: the new URLs will be automatically enabled for every store in one of upcoming updates so please make sure to check how the new URLs work in your store and <a %s>let us know</a> if you face any trouble with them"
565
+ msgstr "Новые SEO URLs магазина будут включены по умолчанию в одной из будущих версий плагина. Поэтому мы рекомендуем вам включить эту опцию и попробовать SEO URLs на своём сайте. Если вы заметите какие-либо проблемы, пожалуйста, <a %s>дайте нам знать</a>, мы поможем."
 
 
 
 
 
 
 
566
 
567
  #: templates/advanced-settings.php:44 templates/advanced-settings.php:188
568
  msgid "https://support.ecwid.com/hc/en-us/requests/new"
578
 
579
  #: templates/advanced-settings.php:74
580
  msgid ""
581
+ "By default, the storefront shows a list of root categories. You can override this behavior and show a different category when customers open your store for the first time. This is useful if you only have one category or want to display a specific set of items (e.g. \"Featured Products\") to "
582
+ "new visitors."
 
 
583
  msgstr ""
584
+ "По умолчанию, магазин показывает корневые категории. Здесь можно выбрать другую категорию для отображения, когда покупатель впервые открывает ваш магазин. Это может быть полезно, если у вас есть только одна категория или вы хотите показывать определённые набор товаров (например, специальные "
 
 
 
585
  "предложения) новым пользователям."
586
 
587
  #: templates/advanced-settings.php:97
589
  msgstr "Единый вход для покупателей"
590
 
591
  #: templates/advanced-settings.php:102
592
+ msgid "Single Sign-On allows your customers to have a single login for your WordPress site and your %s. When someone logs in to your site, they will automatically be logged in to their customer account in your store as well with no need to enter their email/password again."
 
 
 
 
593
  msgstr ""
594
+ "Объединяет учетную запись покупателя на сайте с его учетной записью в %s. Когда единый вход включен, покупателю не нужно логиниться дважды – на сайте и в магазине. После входа в свой аккаунт на сайте покупатель может смотреть историю своих заказов и оформлять новый заказ с предзаполненным "
595
+ "email и адресом доставки."
 
 
 
596
 
597
  #: templates/advanced-settings.php:109
598
  msgid "Upgrade to get this feature"
603
  msgstr "Подпишитесь на платный план, чтобы получить эту функциональность."
604
 
605
  #: templates/advanced-settings.php:118
606
+ msgid "To allow %s automatically log in customers to your store, please provide it with a permission to use the customer data in the store. <a %s>Please use this link to do that</a>"
607
+ msgstr "Чтобы плагин автоматически объединял учетные записи пользователя на сайте и в магазине %s, нужно дать ему доступ до данных покупателей в магазине. <a %s>Перейдите по этой ссылке, чтобы предоставить доступ</a>."
 
 
 
 
 
 
608
 
609
  #: templates/advanced-settings.php:124
610
+ msgid "To make sure your customer can actually log in to your site and store, enable registration in the <a %s>site settings</a>"
611
+ msgstr "Чтобы покупатели смогли регистрироваться, убедитесь, что регистрация включена в <a %s>настройках сайта</a>"
 
 
 
 
612
 
613
  #: templates/advanced-settings.php:146
614
  msgid "Chameleon skin"
615
  msgstr "Тема \"Хамелеон\""
616
 
617
  #: templates/advanced-settings.php:150
618
+ msgid "Automatic adjustment of your store design to your WordPress theme. Whatever WordPress theme you use, %s will detect predominant colors and font and use them in your product catalog."
619
+ msgstr "Автоматическая подстройка внешнего вида магазина под стили темы сайта. Включите эту опцию, чтобы %s определял цвета и шрифты сайта и использовал их в каталоге товаров."
 
 
 
 
 
 
620
 
621
  #: templates/advanced-settings.php:153
622
+ msgid "Please note this functionality is in beta. So if you run into difficulties or find problems with Chameleon, please <a %s>let us know</a>."
623
+ msgstr "Мы добавили этот инструмент недавно, и он сейчас работает в бета-режиме. Если вы обнаружите какие-либо проблемы в его работе, пожалуйста, <a %s>сообщите нам</a>."
 
 
 
 
 
624
 
625
  #: templates/advanced-settings.php:176
626
  msgid "Integration with search on your site <sup>beta</sup>"
628
 
629
  #: templates/advanced-settings.php:180
630
  msgid ""
631
+ "%s stores your products data in a secure cloud storage. The product pages are displayed on the fly when a customer browses your store. So, basically, the products are not stored on the site, that's why the site search doesn't find product pages while looking through site pages and posts. This "
632
+ "option enables a local storage mode: the products will be stored both in the cloud and on your site. The site search results will list product pages as well as regular pages/posts of your site."
 
 
 
 
 
633
  msgstr ""
634
+ "%s хранит данные товаров магазина в защищенном облачном хранилище, и показывает их прямо на странице магазина, когда посетитель открывает товар. Поэтому данные товаров не хранятся на вашем сайте, а поиск по сайту находит только страницы и записи сайта — не находит товары магазина. Эта "
635
+ "настройка включает локальное хранение товаров: данные товаров будут храниться и в облачном хранилище, и прямо на вашем сайте. Поиск по сайту будет показывать страницы товаров магазина так же, как записи или страницы, размещенные на сайте."
 
 
 
 
 
 
636
 
637
  #: templates/advanced-settings.php:188
638
+ msgid "Please note this functionality is in beta. So if you run into difficulties or find problems with it, please <a %s>let us know</a>."
639
+ msgstr "Эта функция сейчас работает в бета-режиме. Если вы обнаружите проблемы в её работе, пожалуйста, <a %s>сообщите нам</a>."
 
 
 
 
640
 
641
  #: templates/advanced-settings.php:197 templates/appearance-settings.php:217
642
  msgid "Save changes"
651
  msgstr "Показывать форму поиска над списком продуктов"
652
 
653
  #: templates/appearance-settings.php:31
654
+ msgid "Or you can add search box to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
655
+ msgstr "Или вы можете добавить форму поиска на ваш сайт с помощью <a href=\"%s\">виджетов WordPress</a>"
 
 
 
 
656
 
657
  #: templates/appearance-settings.php:51
658
  msgid "Display categories above products"
659
  msgstr "Показывать меню категорий над списком продуктов"
660
 
661
  #: templates/appearance-settings.php:55
662
+ msgid "Or you can add vertical categories to your website's toolbar using <a href=\"%s\">WordPress native widgets</a>"
663
+ msgstr "Или вы можете добавить вертикальное меню категорий на ваш сайт с помощью <a href=\"%s\">виджетов WordPress</a>"
 
 
 
 
664
 
665
  #: templates/appearance-settings.php:76
666
  msgid "Enable minicart attached to categories"
667
  msgstr "Показывать корзину у меню категорий"
668
 
669
  #: templates/appearance-settings.php:80
670
+ msgid "You should disable this option, if you added minicart to your website's&nbsp;sidebar"
671
+ msgstr "Если вы добавили виджет корзины в боковое меню, следует отключить эту настройку"
 
 
 
 
672
 
673
  #: templates/appearance-settings.php:99 templates/store-popup.php:180
674
  msgid "Number of categories per row"
691
  msgstr "Вид \"таблица\""
692
 
693
  #: templates/appearance-settings.php:171 templates/store-popup.php:145
694
+ msgid "Here you can control how many products will be displayed per page. These options define maximum values. If there is not enough space to show all product columns, %s will adapt the number of columns to hold all products."
695
+ msgstr "Здесь вы можете задать количество отображаемых продуктов на странице. Эти цифры определяют максимальные значения. Если на странице в сетке продуктов будет недостаточно места для отображения всех столбцов, %s уменьшит их количество."
 
 
 
 
 
 
 
696
 
697
  #: templates/appearance-settings.php:178 templates/store-popup.php:193
698
  msgid "Default view mode on product pages"
699
  msgstr "Вид страницы продуктов по умолчанию"
700
 
701
+ #: templates/appearance-settings.php:183 templates/appearance-settings.php:201 templates/store-popup.php:197 templates/store-popup.php:215
 
702
  msgid "Grid"
703
  msgstr "Сетка"
704
 
705
+ #: templates/appearance-settings.php:186 templates/appearance-settings.php:204 templates/store-popup.php:200 templates/store-popup.php:218
 
706
  msgid "List"
707
  msgstr "Список"
708
 
709
+ #: templates/appearance-settings.php:189 templates/appearance-settings.php:207 templates/store-popup.php:203 templates/store-popup.php:221
 
710
  msgid "Table"
711
  msgstr "Таблица"
712
 
714
  msgid "Default view mode on search results"
715
  msgstr "Вид страницы результатов поиска по умолчанию"
716
 
717
+ #: templates/connect.php:5 templates/dashboard.php:6 templates/reconnect-sso.php:5 templates/reconnect.php:5
 
718
  msgid "%s Shopping Cart"
719
  msgstr "Интернет-магазин %s"
720
 
726
  msgid "Enter your Store ID"
727
  msgstr "Введите ваш ID Магазина"
728
 
729
+ #: templates/connect.php:20 templates/landing_old.php:27 templates/reconnect.php:23
 
730
  msgid "Connect"
731
  msgstr "Подключите магазин"
732
 
735
  msgstr "Сохранить и присоединить"
736
 
737
  #: templates/connect.php:27 templates/reconnect.php:46
738
+ msgid "To display your store on this site, you need to allow WordPress to access your %1$s products. Please press connect to provide permission."
739
+ msgstr "Нажмите на кнопку, авторизуйтесь в %1$s и выдайте запрошенные права доступа"
 
 
 
740
 
741
  #: templates/connect.php:32
742
  msgid "Where to find your Store ID:"
743
  msgstr "Где найти ID Магазина:"
744
 
745
  #: templates/connect.php:34
746
+ msgid "Store ID is a unique identifier of your %1$s account. You can find it in your %1$s control panel: open the <a %2$s>Dashboard page</a> and find the \"<b>Store ID: NNNNNNN</b>\" text, where <b>NNNNNNN</b> is your Store&nbsp;ID."
747
+ msgstr "ID магазина это уникальный номер аккаунта в %1$s. Вы можете его найти в панели управления %1$s-магазина: откройте страницу \"<a %2$s>Консоль</a>\" и найдите текст \"<b>ID&nbsp;Магазина&nbsp;NNNNNNN</b>\". "
 
 
 
 
 
 
 
748
 
749
  #: templates/connect.php:39
750
  msgid "Don't have an %s account? Create one now."
751
  msgstr "Ещё нет аккаунта в %s? Зарегистрируйтесь"
752
 
753
+ #: templates/dashboard.php:10 templates/store-popup.php:231 templates/store-svg.php:15
 
754
  msgid "Store ID"
755
  msgstr "ID Магазина"
756
 
800
 
801
  #: templates/help.php:29
802
  msgid "https://support.ecwid.com/hc/en-us/sections/201706719-Ecwid-Basics"
803
+ msgstr "https://support.ecwid.com/hc/ru/sections/201706719-%D0%9D%D0%B0%D1%87%D0%B0%D0%BB%D0%BE-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B-"
 
 
804
 
805
  #: templates/help.php:31
806
  msgid "Ecwid Basics"
807
  msgstr "Начало работы"
808
 
809
  #: templates/help.php:35
810
+ msgid "https://support.ecwid.com/hc/en-us/sections/201758475-Manage-Your-Ecwid-Store"
811
+ msgstr "https://support.ecwid.com/hc/ru/sections/201758475-%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BC%D0%B0%D0%B3%D0%B0%D0%B7%D0%B8%D0%BD%D0%BE%D0%BC"
 
 
 
 
812
 
813
  #: templates/help.php:37
814
  msgid "Manage Your Ecwid Store"
815
  msgstr "Управление магазином"
816
 
817
  #: templates/help.php:41
818
+ msgid "https://support.ecwid.com/hc/en-us/sections/201758445-Customize-Your-Store"
819
+ msgstr "https://support.ecwid.com/hc/ru/sections/201758445-%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B4%D0%B8%D0%B7%D0%B0%D0%B9%D0%BD%D0%B0-"
 
 
 
 
820
 
821
  #: templates/help.php:43
822
  msgid "Customize Your Store"
824
 
825
  #: templates/help.php:47
826
  msgid "https://support.ecwid.com/hc/en-us/sections/201706799-Billing-Questions"
827
+ msgstr "https://support.ecwid.com/hc/ru/sections/201706799-%D0%9F%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D0%BA%D0%B0"
 
 
828
 
829
  #: templates/help.php:49
830
  msgid "Billing Questions"
831
  msgstr "Подписка"
832
 
833
  #: templates/help.php:53
834
+ msgid "https://support.ecwid.com/hc/en-us/sections/201702859-Technical-Reference"
835
+ msgstr "https://support.ecwid.com/hc/ru/sections/201702859-%D0%A2%D0%B5%D1%85%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F-%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8F"
 
 
 
 
836
 
837
  #: templates/help.php:55
838
  msgid "Technical Reference"
859
  msgstr "Форум"
860
 
861
  #: templates/help.php:212
862
+ msgid "Join the Ecwid community. Discuss support topics and store ideas with other Ecwid users."
863
+ msgstr "Общайтесь с другими пользователями Эквида и командой поддержки клиентов по любым вопросам, связанным с работой вашего магазина."
 
 
 
 
864
 
865
  #: templates/help.php:221
866
  msgid "Send a message to our support team"
887
  msgstr "Сообщение отправлено"
888
 
889
  #: templates/help.php:249
890
+ msgid " Thank you very much for contacting us! We will get back to you shortly."
 
891
  msgstr "Спасибо! Мы скоро свяжемся с вами."
892
 
893
  #: templates/help.php:250
899
  msgstr "Добро пожаловать в %s!"
900
 
901
  #: templates/landing.php:9
902
+ msgid "Thank you for choosing %s to build your online store. The first step to sell successfully online is to set up your store! Let’s get started and add a store to your website in a few simple steps."
903
+ msgstr "Спасибо, что выбрали %s для создания вашего интернет-магазина. Первый шаг к успешной онлайн торговле — настройка магазина! Давайте добавим магазин на ваш сайт за несколько простых шагов."
 
 
 
 
 
 
904
 
905
  #: templates/landing.php:15 templates/landing.php:132
906
  msgid "Create Store"
923
  msgstr "Регистрация бесплатна, кредитная карта не требуется"
924
 
925
  #: templates/landing.php:46
926
+ msgid "Connection error: please click the button again and give permissions for this plugin<br /> to show your %s store on this site."
927
+ msgstr "Ошибка подключения: после нажатия на кнопку, авторизуйтесь в %s и предоставьте запрашиваемые права."
 
 
 
 
928
 
929
  #: templates/landing.php:49 templates/landing.php:160
930
  msgid "Already have %s account?"
931
  msgstr "Уже есть аккаунт в %s?"
932
 
933
  #: templates/landing.php:53
934
+ msgid "You will be asked to log in to your %s Control Panel<br />and give permissions to show your store on this site"
935
+ msgstr "Вам будет предложено войти в панель управления %s<br />и предоставить права доступа для отображения магазина на вашем сайте"
 
 
 
 
936
 
937
  #: templates/landing.php:56 templates/landing_old.php:75
938
  msgid "Get ready to sell online"
943
  msgstr "Продавайте там,<br> где ваши клиенты"
944
 
945
  #: templates/landing.php:68 templates/landing_old.php:87
946
+ msgid "Start selling on your WordPress site. Then mirror your shop on your Facebook page, blog and marketplaces like Google Shopping, Yahoo and Shopping.com."
947
+ msgstr "Откройте продажи на своём WordPress сайте, а затем разместите витрину магазина в социальных сетях, блоге, и выгрузите товары на торговые площадки Яндекс.Маркет, eBay и Google Shopping."
 
 
 
 
 
948
 
949
  #: templates/landing.php:69
950
+ msgid "Use %s's mobile-POS to swipe credit cards and sell on the go. Your orders and inventory are always synchronized with your online store."
951
+ msgstr "Используйте мобильное приложение %s, чтобы получать и обрабатывать заказы в любой точке продаж. Все изменения синхронизируются с магазином на лету."
 
 
 
 
952
 
953
  #: templates/landing.php:75 templates/landing_old.php:94
954
  msgid "Features"
967
  msgstr "Бесплатный план и обновления"
968
 
969
  #: templates/landing.php:92 templates/landing_old.php:111
970
+ msgid "Free plan always available with tons of features<br>at no additional cost. Updates are seamless, automatic<br>and free of charge."
971
+ msgstr "Всегда доступный бесплатный план с множеством<br>возможностей. Обновления магазина автоматизированы,<br> бесплатны и не требуют вашего участия."
 
 
 
 
972
 
973
  #: templates/landing.php:102 templates/landing_old.php:121
974
  msgid "Responsive design"
976
 
977
  #: templates/landing.php:103 templates/landing_old.php:122
978
  msgid "Your store looks perfect<br />on all devices"
979
+ msgstr "Ваш магазин выглядит превосходно<br />на любом устройстве: планшете, смартфоне и ноутбуке."
 
 
980
 
981
  #: templates/landing.php:111 templates/landing_old.php:130
982
  msgid "PCI DSS Certified"
984
 
985
  #: templates/landing.php:112 templates/landing_old.php:131
986
  msgid "Secure checkout with over 40<br />payment options"
987
+ msgstr "Эквид сертифицирован по стандарту Level 1 PCI DSS – самому высокому уровню безопасности передачи данных."
 
 
988
 
989
  #: templates/landing.php:120 templates/landing_old.php:139
990
  msgid "Global Reach"
1007
  msgstr "Плагин успешно установлен!"
1008
 
1009
  #: templates/landing_old.php:9
1010
+ msgid "There are just a few steps left to start selling<br /> on your WordPress site"
1011
+ msgstr "До открытия магазина на вашем WordPress сайте<br /> осталось несколько простых шагов"
 
 
 
1012
 
1013
  #: templates/landing_old.php:13
1014
+ msgid "There are few little steps left to start selling<br /> on your WordPress site"
1015
+ msgstr "До открытия магазина на вашем WordPress сайте<br /> осталось несколько простых шагов"
 
 
 
1016
 
1017
  #: templates/landing_old.php:19
1018
  msgid "Register"
1019
  msgstr "Зарегистрируйтесь"
1020
 
1021
  #: templates/landing_old.php:20
1022
+ msgid "Create a free Ecwid account to manage your store and inventory.<br /> No credit card required"
1023
+ msgstr "Зарегистрируйте бесплатный аккаунт в Эквиде.<br /> Кредитная карта не требуется"
 
 
 
 
1024
 
1025
  #: templates/landing_old.php:29
1026
  msgid "Add your Ecwid store to your site <nobr>in two clicks</nobr>"
1047
  msgstr "Подключить магазин"
1048
 
1049
  #: templates/landing_old.php:55
1050
+ msgid "Connection error: please click the button again and give permissions for this plugin<br /> to show your Ecwid store on this site."
1051
+ msgstr "Ошибка подключения: пожалуйста, нажмите кнопку ещё раз и предоставьте права доступа плагину<br /> для публикации своего Эквид-магазина на этом сайте."
 
 
 
 
1052
 
1053
  #: templates/landing_old.php:58 templates/landing_old.php:69
1054
+ msgid "You will be asked to log in to your Ecwid Control Panel<br />and give permissions to show your store on this site"
1055
+ msgstr "Вам будет предложено войти в панель управления Эквида<br />и предоставить права доступа для отображения магазина на вашем сайте"
 
 
 
 
1056
 
1057
  #: templates/landing_old.php:61 templates/landing_old.php:157
1058
  msgid "Already have Ecwid account?"
1075
  msgstr "Продавайте там,<br> где ваши клиенты"
1076
 
1077
  #: templates/landing_old.php:88
1078
+ msgid "Use Ecwid's mobile-POS to swipe credit cards and sell on the go. Your orders and inventory are always synchronized with your online store."
1079
+ msgstr "Используйте наше мобильное приложение, чтобы получать и обрабатывать заказы в любой точке продаж. Все изменения синхронизируются с магазином на лету."
 
 
 
 
1080
 
1081
  #: templates/landing_old.php:102
1082
+ msgid "Ecwid is compatible with your<br>“%s” WordPress theme<br>out of the box."
 
1083
  msgstr "Эквид совместим с темой<br>\"%s\" вашего сайта из коробки."
1084
 
1085
  #: templates/landing_old.php:140
1098
  msgid "SKU"
1099
  msgstr "Артикул"
1100
 
1101
+ #: templates/product-popup.php:47 templates/product-popup.php:53 templates/product-popup.php:56
 
1102
  msgid "Search"
1103
  msgstr "Поиск"
1104
 
1115
  msgstr "Следующая"
1116
 
1117
  #: templates/product-popup.php:94
1118
+ msgid "Nothing found for <span class=\"empty-page__term\">\"{{ data.term }}\"</span>"
1119
+ msgstr "По запросу <span class=\"empty-page__term\">\"{{ data.term }}\"</span> ничего не найдено"
 
 
 
1120
 
1121
  #: templates/product-popup.php:96
1122
  msgid "Try another search."
1209
  msgstr "Панель управления магазином, встроенная в Wordpress."
1210
 
1211
  #: templates/reconnect-sso.php:12
1212
+ msgid "Manage products, track sales, adjust settings - <nobr>All without</nobr> leaving this page."
1213
+ msgstr "Вы сможете добавлять товары, обрабатывать заказы и управлять магазином прямо на этой странице."
 
 
 
 
1214
 
1215
  #: templates/reconnect-sso.php:14
1216
  msgid "Re-connect to Enable Control Panel"
1217
  msgstr "Подключить панель управления"
1218
 
1219
  #: templates/reconnect.php:31
1220
+ msgid "Connection error - after clicking button you need to login and accept permissions to use our plugin. Please, try again."
1221
+ msgstr "Ошибка подключения: после нажатия на кнопку, авторизуйтесь в Эквиде и предоставьте запрашиваемые права."
 
 
 
 
1222
 
1223
  #: templates/reconnect.php:39
1224
+ msgid "Looks like your site does not support remote POST requests that are required for %s API to work. Please, contact your hosting provider to enable cURL."
1225
+ msgstr "Похоже, что ваш сервер не поддерживает удаленные POST запросы, которые необходимы для работы %s API. Пожалуйста, свяжитесь с хостинг-провайдером, чтобы исправить это."
 
 
 
 
 
1226
 
1227
  #: templates/store-popup.php:12 templates/store-popup.php:25
1228
  msgid "Store elements"
1249
  msgstr "Меню категорий"
1250
 
1251
  #: templates/store-popup.php:72
1252
+ msgid "Additionally, you can add store controls to your website's toolbar using <a %s>WordPress native widgets</a>"
1253
+ msgstr "Кроме того, вы можете добавить отдельные элементы магазина в сайдбар сайта используя <a %s>встроенные виджеты WordPress</a>"
 
 
 
 
1254
 
1255
  #: templates/store-popup.php:233
1256
  msgid "Demo store"
1277
  msgstr "Демонстрационный магазин"
1278
 
1279
  #: templates/sync.php:161
1280
+ msgid "To enable this feature, the plugin needs a permission to read your store product information."
1281
+ msgstr "Чтобы включить интеграцию с поиском, нужно дать плагину доступ до данных товаров в магазине."
 
 
 
 
1282
 
1283
  #: templates/sync.php:162
1284
  msgid "Provide access."
1289
  msgstr "Синхронизировать товары"
1290
 
1291
  #: templates/sync.php:175
1292
+ msgid "We're synchronizing your products. This may take a few minutes. Please do not reload the page."
1293
+ msgstr "Товары загружаются. Это может занять несколько минут. Пожалуйста, не перезагружайте страницу."
 
 
 
 
1294
 
1295
  #: templates/sync.php:179
1296
  msgid "Products synchronized: %s out of %s"
1297
  msgstr "Загружено товаров: %s из %s"
1298
 
1299
  #: templates/sync.php:186
1300
+ msgid "Products are successfully synchronized. The product pages are up to date."
 
1301
  msgstr "Товары успешно синхронизированы. Страницы товаров обновлены."
1302
 
1303
  #: templates/sync.php:190
1334
 
1335
  #. Plugin Name of the plugin/theme
1336
  msgid "Ecwid Shopping Cart"
1337
+ msgstr ""
1338
 
1339
  msgid "%s products and categories"
1340
  msgstr "Товары и категории магазина %s"
1528
  msgid "Landscape 3:2"
1529
  msgstr "Горизонтальные 3:2"
1530
 
1531
+ msgid "Online Store Apps"
1532
+ msgstr "Приложения для магазина"
1533
+
1534
  msgid "Migration warning"
1535
  msgstr ""
1536
 
1645
  msgid "To improve the look and feel of your product page and manage your its appearance here, please enable the “Next-gen look and feel of the product page on the storefront” option in your store dashboard (<a href=\"admin.php?page=ec-store-admin-whatsnew\">Settings → What’s New</a>)."
1646
  msgstr "Чтобы обновить дизайн страницы товара и управлять настройками вида в редакторе, включите опцию “Обновленный внешний вид страницы товара” в панели управления магазина (<a href=\"admin.php?page=ec-store-admin-whatsnew\">Настройки → Обновления</a>)"
1647
 
 
1648
  #. Plugin URI of the plugin/theme
 
1649
  #. Author URI of the plugin/theme
1650
  msgid "http://www.ecwid.com?source=wporg"
1651
  msgstr ""
1652
 
1653
  #. Description of the plugin/theme
1654
+ msgid "Ecwid is a free full-featured shopping cart. It can be easily integrated with any Wordpress blog and takes less than 5 minutes to set up."
 
 
1655
  msgstr "Эквид — это конструктор интернет-магазина."
1656
 
1657
  #. Author of the plugin/theme
1658
  msgid "Ecwid Team"
1659
  msgstr ""
1660
 
1661
+ #~ msgid "Updated %s widgets are available for your %s store. They are more mobile friendly and look better. Please enable them on the plugin settings page and check how they work in your store. The new widgets will be enabled automatically for all users in one of the upcoming plugin versions."
1662
+ #~ msgstr "Блоки %s в вашем %s-магазине обновлены теперь они выглядят приятнее и лучше работают на мобильных. Пожалуйста, включите новый вид блоков поиска и категорий на странице настроек плагина. В одном следующих обновлений плагина они будут включены автоматически для всех пользователей."
 
 
 
 
 
 
 
 
1663
 
1664
  #~ msgctxt "upgrade widgets message"
1665
  #~ msgid "Categories"
1668
  #~ msgid "Open %s store settings"
1669
  #~ msgstr "Открыть настройки плагина %s"
1670
 
1671
+ #~ msgid "<a href=\"admin.php?page=ecwid-help\">Read FAQ or contact support</a>"
1672
+ #~ msgstr "<a href=\"admin.php?page=ecwid-help\">Посетите Центр поддержки Эквида или напишите нам</a>"
 
 
 
1673
 
1674
  #~ msgid "Enable the new category menu"
1675
  #~ msgstr "Включить новое меню категорий"
1676
 
1677
+ #~ msgid "The new category menu looks better and is more mobile-friendly. If you haven't yet added category menu to your store page, you can do that in the <a %s>store page editor</a> (enable the \"Show categories\" option)"
1678
+ #~ msgstr "Новое меню категорий лучше выглядит и отлично работает на мобильных устройствах. Если у вас на странице магазина пока нет меню категорий, добавьте его в <a %s>настройках страницы магазина</a> (включите виджет \"Категории\")."
 
 
 
 
 
 
 
languages/ecwid-shopping-cart-tr_TR.mo CHANGED
Binary file
languages/ecwid-shopping-cart-tr_TR.po CHANGED
@@ -1,5 +1,5 @@
1
  msgid "Ecwid Shopping Cart"
2
- msgstr "Ecwid alışveriş sepeti"
3
 
4
  msgid "Ecwid Team"
5
  msgstr "Ecwid Team"
1
  msgid "Ecwid Shopping Cart"
2
+ msgstr ""
3
 
4
  msgid "Ecwid Team"
5
  msgstr "Ecwid Team"
lib/ecwid_api_v3.php CHANGED
@@ -93,6 +93,11 @@ class Ecwid_Api_V3
93
  {
94
  $api = new Ecwid_Api_V3();
95
 
 
 
 
 
 
96
  $profile = $api->get_store_profile();
97
 
98
  if ( $profile ) {
@@ -119,11 +124,6 @@ class Ecwid_Api_V3
119
  if (-$tls_fails ) {
120
  return self::set_api_status( self::API_STATUS_ERROR_TLS );
121
  }
122
-
123
- $token = self::_load_token();
124
- if ( !$token ) {
125
- return self::set_api_status( self::API_STATUS_ERROR_TOKEN );
126
- }
127
 
128
  return self::set_api_status( self::API_STATUS_ERROR_OTHER );
129
  }
93
  {
94
  $api = new Ecwid_Api_V3();
95
 
96
+ $token = self::_load_token();
97
+ if ( !$token ) {
98
+ return self::set_api_status( self::API_STATUS_ERROR_TOKEN );
99
+ }
100
+
101
  $profile = $api->get_store_profile();
102
 
103
  if ( $profile ) {
124
  if (-$tls_fails ) {
125
  return self::set_api_status( self::API_STATUS_ERROR_TLS );
126
  }
 
 
 
 
 
127
 
128
  return self::set_api_status( self::API_STATUS_ERROR_OTHER );
129
  }
lib/ecwid_catalog_entry.php CHANGED
@@ -6,9 +6,6 @@ abstract class Ecwid_Catalog_Entry {
6
  protected $_cache_name_prefix = null;
7
  protected $_link_prefix = null;
8
 
9
- abstract protected function _get_from_local_object_cache( $id );
10
- abstract protected function _put_into_local_object_cache( $id );
11
-
12
  protected function __construct()
13
  {
14
  $this->_data = new stdClass();
@@ -20,7 +17,11 @@ abstract class Ecwid_Catalog_Entry {
20
  return $this->get_link();
21
  }
22
 
23
- return $this->_data->$name;
 
 
 
 
24
  }
25
 
26
  public function __isset( $name ) {
6
  protected $_cache_name_prefix = null;
7
  protected $_link_prefix = null;
8
 
 
 
 
9
  protected function __construct()
10
  {
11
  $this->_data = new stdClass();
17
  return $this->get_link();
18
  }
19
 
20
+ if ( isset($this->_data->$name) ) {
21
+ return $this->_data->$name;
22
+ }
23
+
24
+ return null;
25
  }
26
 
27
  public function __isset( $name ) {
lib/ecwid_platform.php CHANGED
@@ -43,24 +43,43 @@ class EcwidPlatform {
43
  $filename = substr( $filename, 0, strlen( $file ) - 3 );
44
  }
45
 
46
- if ( !$handle ) {
47
- $handle = self::slugify( $filename );
48
- }
49
 
50
- $handle = 'ecwid-' . $handle;
51
-
52
- $file .= '.js';
53
 
54
  if ( defined( 'WP_DEBUG' ) ) {
55
- $path = ECWID_PLUGIN_DIR . 'js/' . $file;
56
 
57
  $ver = filemtime( $path );
58
  } else {
59
  $ver = get_option( 'ecwid_plugin_version' );
60
  }
61
 
62
- wp_enqueue_script( $handle, ECWID_PLUGIN_URL . 'js/' . $file, $deps, $ver, $in_footer );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  }
 
 
64
 
65
  /*
66
  * @throws InvalidArgumentException if $file can't be slugified at all
@@ -100,14 +119,25 @@ class EcwidPlatform {
100
  if ( $result && count( @$match[0] ) > 0 ) {
101
  $handle = implode('-', $match[0] );
102
  } else {
103
- throw new InvalidArgumentException( 'Can\'t make slug from ' . $file );
104
  }
105
  return $handle;
106
  }
107
 
108
  static protected function _init_crypt()
109
  {
110
- self::$crypt->setIV( substr( md5( SECURE_AUTH_SALT . get_option('ecwid_store_id') ), 0, 16 ) );
 
 
 
 
 
 
 
 
 
 
 
111
  self::$crypt->setKey( SECURE_AUTH_KEY );
112
  }
113
 
43
  $filename = substr( $filename, 0, strlen( $file ) - 3 );
44
  }
45
 
46
+ $handle = self::make_handle( $file );
 
 
47
 
48
+ $filename .= '.js';
 
 
49
 
50
  if ( defined( 'WP_DEBUG' ) ) {
51
+ $path = ECWID_PLUGIN_DIR . 'js/' . $filename;
52
 
53
  $ver = filemtime( $path );
54
  } else {
55
  $ver = get_option( 'ecwid_plugin_version' );
56
  }
57
 
58
+ wp_enqueue_script( $handle, ECWID_PLUGIN_URL . 'js/' . $filename, $deps, $ver, $in_footer );
59
+ }
60
+
61
+ static public function make_handle( $file )
62
+ {
63
+ $filename = $file;
64
+
65
+ if ( strpos( $file, '.js' ) == strlen( $file ) - 3 ) {
66
+ $filename = substr( $filename, 0, strlen( $file ) - 3 );
67
+ }
68
+
69
+ $prefix = 'ecwid-';
70
+
71
+ if ( strpos( $file, $prefix ) === 0 ) {
72
+ $filename = substr( $filename, strlen( $prefix ) );
73
+ }
74
+
75
+ $handle = self::slugify( $filename );
76
+
77
+ $handle = $prefix . $handle;
78
+
79
+ return $handle;
80
  }
81
+
82
+
83
 
84
  /*
85
  * @throws InvalidArgumentException if $file can't be slugified at all
119
  if ( $result && count( @$match[0] ) > 0 ) {
120
  $handle = implode('-', $match[0] );
121
  } else {
122
+ throw new InvalidArgumentException( 'Can\'t make slug from ' . $string );
123
  }
124
  return $handle;
125
  }
126
 
127
  static protected function _init_crypt()
128
  {
129
+ $salt = '';
130
+
131
+ // It turns out sometimes there is no salt is wp-config. And since it is already seeded
132
+ // with the SECURE_AUTH_KEY, and to avoid breaking someones encryption
133
+ // we use 'SECURE_AUTH_SALT' as string
134
+ if ( defined( 'SECURE_AUTH_SALT' ) ) {
135
+ $salt = SECURE_AUTH_SALT;
136
+ } else {
137
+ $salt = 'SECURE_AUTH_SALT';
138
+ }
139
+
140
+ self::$crypt->setIV( substr( md5( $salt . get_option('ecwid_store_id') ), 0, 16 ) );
141
  self::$crypt->setKey( SECURE_AUTH_KEY );
142
  }
143
 
lib/ecwid_product.php CHANGED
@@ -8,32 +8,12 @@ class Ecwid_Product extends Ecwid_Catalog_Entry
8
  protected $_cache_name_prefix = 'ecwid-product-';
9
  protected $_link_prefix = 'p';
10
 
11
- protected function _get_from_local_object_cache( $id ) {
12
- if ( isset( self::$products[$id] ) ) {
13
- return self::$products[$id];
14
- }
15
-
16
- return null;
17
- }
18
-
19
- protected function _put_into_local_object_cache( $obj ) {
20
- if ( !isset( $obj->id ) ) {
21
- return false;
22
- }
23
-
24
- self::$products[$obj->id] = $obj;
25
- }
26
-
27
  public static function get_by_id( $id )
28
  {
29
  $p = new Ecwid_Product();
30
 
31
- if ( $product = $p->_get_from_local_object_cache( $id ) ) {
32
- return $product;
33
- }
34
-
35
  $product_data = $p->_get_from_cache( $id );
36
-
37
  if ( !$product_data ) {
38
  $p->_load($id);
39
  if ( !$p->_data ) {
@@ -42,10 +22,7 @@ class Ecwid_Product extends Ecwid_Catalog_Entry
42
  $p->_persist();
43
  } else {
44
  $p->_data = $product_data;
45
- }
46
-
47
- $p->_put_into_local_object_cache( $p );
48
-
49
 
50
  return $p;
51
  }
@@ -83,7 +60,12 @@ class Ecwid_Product extends Ecwid_Catalog_Entry
83
  return null;
84
  }
85
 
86
- $random_product_id = $result->items[$index - $offset]->id;
 
 
 
 
 
87
  }
88
 
89
  return Ecwid_Product::get_by_id( $random_product_id );
@@ -93,10 +75,6 @@ class Ecwid_Product extends Ecwid_Catalog_Entry
93
  {
94
  $p = new Ecwid_Product();
95
 
96
- if ( $product = $p->_get_from_local_object_cache( $id ) ) {
97
- return $product;
98
- }
99
-
100
  $product_data = $p->_get_from_cache( $id );
101
  if ( !$product_data ) {
102
  if ( $fallback_object ) {
@@ -123,7 +101,7 @@ class Ecwid_Product extends Ecwid_Catalog_Entry
123
  return $p;
124
  }
125
 
126
- public static function load_by_ids($ids)
127
  {
128
  if ( !is_array( $ids ) || empty( $ids ) || !Ecwid_Api_V3::is_available() ) {
129
  return;
@@ -133,7 +111,15 @@ class Ecwid_Product extends Ecwid_Catalog_Entry
133
 
134
  $api = new Ecwid_Api_V3();
135
 
136
- $api->search_products( array( 'productId' => $ids_string ) );
 
 
 
 
 
 
 
 
137
  }
138
 
139
  protected function _get_from_cache( $id ) {
8
  protected $_cache_name_prefix = 'ecwid-product-';
9
  protected $_link_prefix = 'p';
10
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  public static function get_by_id( $id )
12
  {
13
  $p = new Ecwid_Product();
14
 
 
 
 
 
15
  $product_data = $p->_get_from_cache( $id );
16
+
17
  if ( !$product_data ) {
18
  $p->_load($id);
19
  if ( !$p->_data ) {
22
  $p->_persist();
23
  } else {
24
  $p->_data = $product_data;
25
+ }
 
 
 
26
 
27
  return $p;
28
  }
60
  return null;
61
  }
62
 
63
+ if( count($result->items) < ($index - $offset) ) {
64
+ $random_product = current($result->items);
65
+ $random_product_id = $random_product->id;
66
+ } else {
67
+ $random_product_id = $result->items[$index - $offset]->id;
68
+ }
69
  }
70
 
71
  return Ecwid_Product::get_by_id( $random_product_id );
75
  {
76
  $p = new Ecwid_Product();
77
 
 
 
 
 
78
  $product_data = $p->_get_from_cache( $id );
79
  if ( !$product_data ) {
80
  if ( $fallback_object ) {
101
  return $p;
102
  }
103
 
104
+ public static function preload_by_ids($ids)
105
  {
106
  if ( !is_array( $ids ) || empty( $ids ) || !Ecwid_Api_V3::is_available() ) {
107
  return;
111
 
112
  $api = new Ecwid_Api_V3();
113
 
114
+ $data = $api->search_products( array( 'productId' => $ids_string ) );
115
+
116
+ if ($data && $data->count > 0) {
117
+ foreach($data->items as $product_data){
118
+ $p = new Ecwid_Product();
119
+ $p->_data = $product_data;
120
+ $p->_persist();
121
+ }
122
+ }
123
  }
124
 
125
  protected function _get_from_cache( $id ) {
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: Ecwid
3
  Tags: ecommerce, downloadable products, Facebook ecommerce, online store, paypal, product catalog, shop, shopping cart, store
4
  Requires at least: 3.7
5
  Tested up to: 5.1
6
- Stable tag: 6.4.11
7
 
8
  Powerful, easy to use ecommerce shopping cart. Sell on Facebook and Instagram. iPhone & Android apps. Superb support. Free plan available.
9
 
@@ -150,8 +150,15 @@ You can use Ecwid’s built-in import tools to copy your store products from any
150
  * [Ecwid eCommerce Forums](https://www.ecwid.com/forums/forumdisplay.php?f=19)
151
 
152
  == Changelog ==
 
 
 
 
 
 
 
153
  = 6.4.11 - Feb 26, 2019 =
154
- - Minor fixes and improvements.
155
 
156
  = 6.4.9 - Feb 7, 2019 =
157
  - **Fixes for the Open Graph image tag (og:image tag) .** When you share a page from your ecommerce site on Facebook or in a messenger, you should see the product title, description and image in the sharing preview snippet.
3
  Tags: ecommerce, downloadable products, Facebook ecommerce, online store, paypal, product catalog, shop, shopping cart, store
4
  Requires at least: 3.7
5
  Tested up to: 5.1
6
+ Stable tag: 6.4.12
7
 
8
  Powerful, easy to use ecommerce shopping cart. Sell on Facebook and Instagram. iPhone & Android apps. Superb support. Free plan available.
9
 
150
  * [Ecwid eCommerce Forums](https://www.ecwid.com/forums/forumdisplay.php?f=19)
151
 
152
  == Changelog ==
153
+ = 6.4.12 - Mar 11, 2019 =
154
+ - Improvement for the sharing buttons on the product pages. "Share to Facebook", "Tweet" and other share buttons now uses the actual product page URLs instead of a "proxy" Ecwid URL. This should make shared links look more appealing in social networks and improve the SEO of your ecommerce store.
155
+ - Fixed an issue in the "Import products from WooCommerce" tool. In some cases, import failed and stopped importing products — we fixed that, now it should work fine and you can import your products from WooCommerce to Ecwid when you need it.
156
+ - Fixed a Javascript warning message in the browser console when the Recently viewed products widget is used.
157
+ - Minor fixes and improvements for SEO, stability and performance.
158
+ - Besides the changes in the plugin, Ecwid e-commerce functionality is constantly updated with new features and tools. One of the recent major updates is product filters — you can now add product filtering panel to your store search page without dealing with custom code or an external plugin. Check it out in our [blog](https://www.ecwid.com/blog/all-sorted-introducing-storefront-product-filters.html).
159
+
160
  = 6.4.11 - Feb 26, 2019 =
161
+ - Minor fixes and improvements.
162
 
163
  = 6.4.9 - Feb 7, 2019 =
164
  - **Fixes for the Open Graph image tag (og:image tag) .** When you share a page from your ecommerce site on Facebook or in a messenger, you should see the product title, description and image in the sharing preview snippet.
templates/admin-params.php CHANGED
@@ -34,4 +34,8 @@
34
  </div>
35
  <?php endforeach; ?>
36
  <button class="btn btn-primary">submit</button>
37
- </form>
 
 
 
 
34
  </div>
35
  <?php endforeach; ?>
36
  <button class="btn btn-primary">submit</button>
37
+ </form>
38
+
39
+ <br />
40
+ <h2>Clear plugin cache</h2>
41
+ <a href="?<?php echo ecwid_get_clear_all_cache_action(); ?>&redirect_back">Clear all caches</a>
templates/importer/woo-main.tpl.php CHANGED
@@ -47,6 +47,9 @@
47
  <p>
48
  <label><input type="checkbox" class="import-settings" name="<?php echo Ecwid_Importer::SETTING_DELETE_DEMO; ?>"><?php _e( 'Remove demo products', 'ecwid-shopping-cart' ); ?></label>
49
  </p>
 
 
 
50
  <p>
51
  <label><input type="checkbox" class="import-settings" name="<?php echo Ecwid_Importer::SETTING_UPDATE_BY_SKU; ?>"><?php _e( 'Overwrite existing products with matching SKU', 'ecwid-shopping-cart' ); ?></label>
52
  </p>
47
  <p>
48
  <label><input type="checkbox" class="import-settings" name="<?php echo Ecwid_Importer::SETTING_DELETE_DEMO; ?>"><?php _e( 'Remove demo products', 'ecwid-shopping-cart' ); ?></label>
49
  </p>
50
+ <?php endif; ?>
51
+
52
+ <?php if ( Ecwid_Importer::count_ecwid_demo_products() < Ecwid_Importer::count_ecwid_products() ): ?>
53
  <p>
54
  <label><input type="checkbox" class="import-settings" name="<?php echo Ecwid_Importer::SETTING_UPDATE_BY_SKU; ?>"><?php _e( 'Overwrite existing products with matching SKU', 'ecwid-shopping-cart' ); ?></label>
55
  </p>