Music Player for WooCommerce - Version 1.0.167

Version Description

  • Include the purchased_times attribute in the playlist shortcode to show how many times a product has been purchased.
Download this release

Release Info

Developer codepeople
Plugin Icon 128x128 Music Player for WooCommerce
Version 1.0.167
Comparing to
See all releases

Code changes from version 1.0.161 to 1.0.167

css/style.css CHANGED
@@ -60,4 +60,5 @@
60
  .wcmp-player.track.mejs-classic .mejs-controls{padding:0 !important; height:26px;}
61
  .wcmp-player.track.mejs-classic .mejs-playpause-button button{position: absolute;top: 50%;left: 50%;margin:0;transform: translate(-50%, -50%);}
62
 
 
63
  .mini_cart_item .wcmp-player{display:none !important;}
60
  .wcmp-player.track.mejs-classic .mejs-controls{padding:0 !important; height:26px;}
61
  .wcmp-player.track.mejs-classic .mejs-playpause-button button{position: absolute;top: 50%;left: 50%;margin:0;transform: translate(-50%, -50%);}
62
 
63
+ .wcmp-purchased-times{display:inline-block;margin-left:10px;margin-right:10px;font-size:0.8em;}
64
  .mini_cart_item .wcmp-player{display:none !important;}
js/public.js CHANGED
@@ -10,4 +10,4 @@ p||!a.currentTime||(a.bkVolume=a.volume)});a.addEventListener("ended",function(a
10
  console.log(l)}e++});t.each(function(){var b=c(this);b.find("source").attr("src");b.attr("playernumber",e);n.features=["playpause"];try{a[e]=new MediaElementPlayer(b[0],n)}catch(l){"console"in window&&console.log(l)}e++;h(b);c(window).resize(function(){h(b)})});c(k).length||(k=".product-type-grouped [data-product_id]");c(k).length||(k=".woocommerce-grouped-product-list [data-product_id]");c(k).length||(k='.woocommerce-grouped-product-list [id*="product-"]');c(k).each(function(){try{var a=c(this),
11
  b=(a.data("product_id")||a.attr("name")||a.attr("id")).replace(/[^\d]/g,""),d=c(".wcmp-player-list.merge_in_grouped_products .product-"+b+":first .wcmp-player-title"),e=c("<table></table>");d.length&&!d.closest(".wcmp-first-in-product").length&&(d.closest("tr").addClass("wcmp-first-in-product"),0==d.closest("form").length&&d.closest(".wcmp-player-list").prependTo(a.closest("form")),e.append(a.closest("tr").prepend("<td>"+d.html()+"</td>")),d.html("").append(e))}catch(u){}})}};window.wcmp_force_init=
12
  function(){delete window.generated_the_wcmp;generate_the_wcmp(!0)};jQuery(generate_the_wcmp);jQuery(window).on("load",function(){generate_the_wcmp(!0);var a=jQuery,e=window.navigator.userAgent;a("[data-lazyloading]").each(function(){var b=a(this);b.attr("preload",b.data("lazyloading"))});if(e.match(/iPad/i)||e.match(/iPhone/i))if("undefined"!=typeof wcmp_global_settings?wcmp_global_settings.play_all:1)a(".wcmp-player .mejs-play button").one("click",function(){if("undefined"==typeof wcmp_preprocessed_players){wcmp_preprocessed_players=
13
- !0;var b=a(this);a(".wcmp-player audio").each(function(){this.play();this.pause()});setTimeout(function(){b.click()},500)}})}).on("popstate",function(){jQuery("audio[data-product]:not([playernumber])").length&&wcmp_force_init()});jQuery(document).on("scroll wpfAjaxSuccess woof_ajax_done yith-wcan-ajax-filtered wpf_ajax_success",wcmp_force_init)})();
10
  console.log(l)}e++});t.each(function(){var b=c(this);b.find("source").attr("src");b.attr("playernumber",e);n.features=["playpause"];try{a[e]=new MediaElementPlayer(b[0],n)}catch(l){"console"in window&&console.log(l)}e++;h(b);c(window).resize(function(){h(b)})});c(k).length||(k=".product-type-grouped [data-product_id]");c(k).length||(k=".woocommerce-grouped-product-list [data-product_id]");c(k).length||(k='.woocommerce-grouped-product-list [id*="product-"]');c(k).each(function(){try{var a=c(this),
11
  b=(a.data("product_id")||a.attr("name")||a.attr("id")).replace(/[^\d]/g,""),d=c(".wcmp-player-list.merge_in_grouped_products .product-"+b+":first .wcmp-player-title"),e=c("<table></table>");d.length&&!d.closest(".wcmp-first-in-product").length&&(d.closest("tr").addClass("wcmp-first-in-product"),0==d.closest("form").length&&d.closest(".wcmp-player-list").prependTo(a.closest("form")),e.append(a.closest("tr").prepend("<td>"+d.html()+"</td>")),d.html("").append(e))}catch(u){}})}};window.wcmp_force_init=
12
  function(){delete window.generated_the_wcmp;generate_the_wcmp(!0)};jQuery(generate_the_wcmp);jQuery(window).on("load",function(){generate_the_wcmp(!0);var a=jQuery,e=window.navigator.userAgent;a("[data-lazyloading]").each(function(){var b=a(this);b.attr("preload",b.data("lazyloading"))});if(e.match(/iPad/i)||e.match(/iPhone/i))if("undefined"!=typeof wcmp_global_settings?wcmp_global_settings.play_all:1)a(".wcmp-player .mejs-play button").one("click",function(){if("undefined"==typeof wcmp_preprocessed_players){wcmp_preprocessed_players=
13
+ !0;var b=a(this);a(".wcmp-player audio").each(function(){this.play();this.pause()});setTimeout(function(){b.click()},500)}})}).on("popstate",function(){jQuery("audio[data-product]:not([playernumber])").length&&wcmp_force_init()});jQuery(document).on("scroll wpfAjaxSuccess woof_ajax_done yith-wcan-ajax-filtered wpf_ajax_success berocket_ajax_products_loaded berocket_ajax_products_infinite_loaded",wcmp_force_init)})();
js/public_src.js CHANGED
@@ -250,5 +250,5 @@
250
  if(jQuery('audio[data-product]:not([playernumber])').length) wcmp_force_init();
251
  });
252
 
253
- jQuery(document).on('scroll wpfAjaxSuccess woof_ajax_done yith-wcan-ajax-filtered wpf_ajax_success', wcmp_force_init);
254
  })()
250
  if(jQuery('audio[data-product]:not([playernumber])').length) wcmp_force_init();
251
  });
252
 
253
+ jQuery(document).on('scroll wpfAjaxSuccess woof_ajax_done yith-wcan-ajax-filtered wpf_ajax_success berocket_ajax_products_loaded berocket_ajax_products_infinite_loaded', wcmp_force_init);
254
  })()
languages/music-player-for-woocommerce-en_US.mo CHANGED
Binary file
languages/music-player-for-woocommerce-en_US.po CHANGED
@@ -1,70 +1,82 @@
1
  msgid ""
2
  msgstr ""
3
  "Project-Id-Version: music-player-for-woocommerce\n"
4
- "POT-Creation-Date: 2021-08-13 17:03+0200\n"
5
- "PO-Revision-Date: 2021-08-13 17:03+0200\n"
6
  "Last-Translator: CodePeople\n"
7
  "Language-Team: CodePeople\n"
8
  "Language: en_US\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "X-Generator: Poedit 3.0\n"
13
- "X-Poedit-Basepath: ..\n"
14
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 
15
  "X-Poedit-KeywordsList: __;_e;esc_attr__;esc_attr_e\n"
16
  "X-Poedit-SearchPath-0: .\n"
17
 
18
- #: addons/ap-compact-audio-player.addon.php:32
19
  msgid "Use Compact Audio Player instead of the current plugin players"
20
  msgstr ""
21
 
22
- #: addons/ap-compact-audio-player.addon.php:32
23
  msgid "Use \"Compact Audio Player\" instead of the current plugin players"
24
  msgstr ""
25
 
26
- #: addons/ap-compact-audio-player.addon.php:34
27
- #: addons/ap-cp-media-player.addon.php:75
28
- #: addons/ap-html5-audio-player.addon.php:36
29
  msgid ""
30
  "The player functions configured above do not apply, except for audio "
31
  "protection if applicable.<br>This player <b>will take precedence</b> over "
32
  "the player configured in the products' settings."
33
  msgstr ""
34
 
35
- #: addons/ap-compact-audio-player.addon.php:35
36
  msgid ""
37
  "The \"Compact WP Audio Player\" plugin is not installed on your WordPress."
38
  msgstr ""
39
 
40
- #: addons/ap-cp-media-player.addon.php:71
41
  msgid "Use CP Media Player instead of the current plugin players"
42
  msgstr ""
43
 
44
- #: addons/ap-cp-media-player.addon.php:71
45
  msgid "Use \"CP Media Player\" instead of the current plugin players"
46
  msgstr ""
47
 
48
- #: addons/ap-cp-media-player.addon.php:72
49
  msgid "Select player skin"
50
  msgstr ""
51
 
52
- #: addons/ap-cp-media-player.addon.php:76
53
  msgid "The \"CP Media Player\" plugin is not installed on your WordPress."
54
  msgstr ""
55
 
56
- #: addons/ap-html5-audio-player.addon.php:34
57
  msgid "Use HTML5 Audio Player instead of the current plugin players"
58
  msgstr ""
59
 
60
- #: addons/ap-html5-audio-player.addon.php:34
61
  msgid "Use \"HTML5 Audio Player\" instead of the current plugin players"
62
  msgstr ""
63
 
64
- #: addons/ap-html5-audio-player.addon.php:37
65
  msgid "The \"HTML5 Audio Player\" plugin is not installed on your WordPress."
66
  msgstr ""
67
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  #: addons/dokan.addon.php:26
69
  msgid "Activate the Dokan add-on"
70
  msgstr ""
@@ -184,12 +196,12 @@ msgid ""
184
  "modified as <b>dl=1</b>"
185
  msgstr ""
186
 
187
- #: addons/dokan/player_options.php:181 views/global_options.php:246
188
  #: views/player_options.php:181
189
  msgid "Enable player"
190
  msgstr ""
191
 
192
- #: addons/dokan/player_options.php:181 views/global_options.php:246
193
  msgid ""
194
  "The player is shown only if the product is \"downloadable\" with at least an "
195
  "audio file between the \"Downloadable files\", or you have selected your own "
@@ -200,7 +212,7 @@ msgstr ""
200
  msgid "Include music player"
201
  msgstr ""
202
 
203
- #: addons/dokan/player_options.php:185 views/global_options.php:249
204
  #: views/player_options.php:184
205
  msgid "Include in"
206
  msgstr ""
@@ -209,7 +221,7 @@ msgstr ""
209
  msgid "Include on products pages only"
210
  msgstr ""
211
 
212
- #: addons/dokan/player_options.php:188 views/global_options.php:252
213
  #: views/player_options.php:187
214
  msgid "single-entry pages <i>(Product's page only)</i>"
215
  msgstr ""
@@ -218,7 +230,7 @@ msgstr ""
218
  msgid "Include on multiple-entry pages"
219
  msgstr ""
220
 
221
- #: addons/dokan/player_options.php:191 views/global_options.php:255
222
  #: views/player_options.php:190
223
  msgid ""
224
  "multiple entries pages <i>(Shop pages, archive pages, but not in the "
@@ -229,103 +241,103 @@ msgstr ""
229
  msgid "Include on products and multiple-entry pages"
230
  msgstr ""
231
 
232
- #: addons/dokan/player_options.php:194 views/global_options.php:258
233
  #: views/player_options.php:193
234
  msgid "all pages <i>(with single or multiple-entries)</i>"
235
  msgstr ""
236
 
237
  #: addons/dokan/player_options.php:198 addons/dokan/player_options.php:199
238
- #: views/global_options.php:268 views/global_options.php:269
239
  #: views/player_options.php:197 views/player_options.php:198
240
  msgid "Merge in grouped products"
241
  msgstr ""
242
 
243
- #: addons/dokan/player_options.php:200 views/global_options.php:269
244
  #: views/player_options.php:198
245
  msgid ""
246
  "In grouped products, display the \"Add to cart\" buttons and quantity fields "
247
  "in the players rows"
248
  msgstr ""
249
 
250
- #: addons/dokan/player_options.php:203 views/global_options.php:272
251
- #: views/player_options.php:201 widgets/playlist_widget.php:75
252
  msgid "Player layout"
253
  msgstr ""
254
 
255
- #: addons/dokan/player_options.php:206 views/global_options.php:276
256
- #: views/global_options.php:277 views/player_options.php:205
257
  #: views/player_options.php:206
258
  msgid "Skin 1"
259
  msgstr ""
260
 
261
- #: addons/dokan/player_options.php:211 views/global_options.php:282
262
  #: views/player_options.php:210 views/player_options.php:211
263
  msgid "Skin 2"
264
  msgstr ""
265
 
266
- #: addons/dokan/player_options.php:216 views/global_options.php:286
267
- #: views/global_options.php:287 views/player_options.php:215
268
  #: views/player_options.php:216
269
  msgid "Skin 3"
270
  msgstr ""
271
 
272
- #: addons/dokan/player_options.php:222 views/global_options.php:294
273
- #: views/player_options.php:223 widgets/playlist_widget.php:91
274
  msgid "Preload"
275
  msgstr ""
276
 
277
- #: addons/dokan/player_options.php:224 views/global_options.php:297
278
  #: views/player_options.php:226
279
  msgid "Preload - none"
280
  msgstr ""
281
 
282
- #: addons/dokan/player_options.php:225 views/global_options.php:298
283
  #: views/player_options.php:227
284
  msgid "Preload - metadata"
285
  msgstr ""
286
 
287
- #: addons/dokan/player_options.php:226 views/global_options.php:299
288
  #: views/player_options.php:228
289
  msgid "Preload - auto"
290
  msgstr ""
291
 
292
- #: addons/dokan/player_options.php:230 views/global_options.php:304
293
- #: views/global_options.php:307 views/player_options.php:233
294
- #: views/player_options.php:236 widgets/playlist_widget.php:87
295
  msgid "Play all"
296
  msgstr ""
297
 
298
- #: addons/dokan/player_options.php:233 views/global_options.php:328
299
  #: views/player_options.php:246
300
  msgid "Player controls"
301
  msgstr ""
302
 
303
- #: addons/dokan/player_options.php:235 views/global_options.php:330
304
  #: views/player_options.php:248
305
  msgid "Play/pause button"
306
  msgstr ""
307
 
308
- #: addons/dokan/player_options.php:235 views/global_options.php:330
309
  #: views/player_options.php:248
310
  msgid "the play/pause button only"
311
  msgstr ""
312
 
313
- #: addons/dokan/player_options.php:236 views/global_options.php:331
314
  #: views/player_options.php:249
315
  msgid "All controls"
316
  msgstr ""
317
 
318
- #: addons/dokan/player_options.php:236 views/global_options.php:331
319
  #: views/player_options.php:249
320
  msgid "all controls"
321
  msgstr ""
322
 
323
- #: addons/dokan/player_options.php:237 views/global_options.php:332
324
  #: views/player_options.php:250
325
  msgid "Depending on context"
326
  msgstr ""
327
 
328
- #: addons/dokan/player_options.php:237 views/global_options.php:332
329
  #: views/player_options.php:250
330
  msgid "the play/pause button only, or all controls depending on context"
331
  msgstr ""
@@ -334,19 +346,19 @@ msgstr ""
334
  msgid "Player on cover"
335
  msgstr ""
336
 
337
- #: addons/dokan/player_options.php:241 views/global_options.php:337
338
  #: views/player_options.php:255
339
  msgid "for play/pause button players display them on cover images."
340
  msgstr ""
341
 
342
- #: addons/dokan/player_options.php:242 views/global_options.php:340
343
  #: views/player_options.php:258
344
  msgid ""
345
  "(This feature is experimental, and will depend on the theme active on the "
346
  "website.)"
347
  msgstr ""
348
 
349
- #: addons/dokan/player_options.php:247 views/global_options.php:347
350
  #: views/player_options.php:265
351
  msgid "Display the player's title"
352
  msgstr ""
@@ -402,7 +414,7 @@ msgstr ""
402
  #: pagebuilders/beaverbuilder/wcmp/wcmp.pb.php:9
403
  #: pagebuilders/beaverbuilder/wcmp/wcmp.pb.php:11
404
  #: pagebuilders/beaverbuilder/wcmp/wcmp.pb.php:12 pagebuilders/builders.php:130
405
- #: pagebuilders/siteorigin/siteorigin-wcmp/siteorigin-wcmp.php:17 wcmp.php:220
406
  msgid "Music Player for WooCommerce"
407
  msgstr ""
408
 
@@ -440,11 +452,11 @@ msgstr ""
440
  msgid "Insert a playlist with the products players"
441
  msgstr ""
442
 
443
- #: views/global_options.php:40
444
  msgid "Music Player for WooCommerce - Global Settings"
445
  msgstr ""
446
 
447
- #: views/global_options.php:44
448
  msgid ""
449
  "For reporting any issue or to request a customization, <a href=\"https://"
450
  "wordpress.dwbooster.com/contact-us\" target=\"_blank\">CLICK HERE</a><br />\n"
@@ -456,23 +468,23 @@ msgid ""
456
  "target=\"_blank\">Public page: Click to visit the WooCommerce Store</a>"
457
  msgstr ""
458
 
459
- #: views/global_options.php:53
460
  msgid "Registering of Plugin"
461
  msgstr ""
462
 
463
- #: views/global_options.php:55
464
  msgid "Enter the email address of buyer"
465
  msgstr ""
466
 
467
- #: views/global_options.php:56
468
  msgid "Buyer email"
469
  msgstr ""
470
 
471
- #: views/global_options.php:56
472
  msgid "Register"
473
  msgstr ""
474
 
475
- #: views/global_options.php:68 views/player_options.php:46
476
  msgid ""
477
  "<p>The player uses the audio files associated to the product. If you want "
478
  "protecting the audio files for selling, tick the checkbox: <b>\"Protect the "
@@ -484,163 +496,177 @@ msgid ""
484
  "pay for them.</b></p>"
485
  msgstr ""
486
 
487
- #: views/global_options.php:79
488
  msgid "General Settings"
489
  msgstr ""
490
 
491
- #: views/global_options.php:82 views/global_options.php:83
492
  msgid "Include the players only for registered users"
493
  msgstr ""
494
 
495
- #: views/global_options.php:86 views/global_options.php:87
496
  msgid "Apply fade out to playing audio when possible"
497
  msgstr ""
498
 
499
- #: views/global_options.php:90
 
 
 
 
 
 
 
 
 
 
 
 
 
 
500
  msgid "The general settings affect only the PRO version of the plugin"
501
  msgstr ""
502
 
503
- #: views/global_options.php:90 views/global_options.php:353
504
  #: views/player_options.php:50 views/player_options.php:271
505
  msgid "CLICK HERE TO GET THE PRO VERSION OF THE PLUGIN"
506
  msgstr ""
507
 
508
- #: views/global_options.php:93 views/global_options.php:95
509
  msgid ""
510
  "For buyers, play the purchased audio files instead of the truncated files "
511
  "for demo"
512
  msgstr ""
513
 
514
- #: views/global_options.php:96
515
  msgid "Reset the files"
516
  msgstr ""
517
 
518
- #: views/global_options.php:97
519
  msgid "Reset files interval"
520
  msgstr ""
521
 
522
- #: views/global_options.php:98
523
  msgid "daily"
524
  msgstr ""
525
 
526
- #: views/global_options.php:106 views/global_options.php:107
527
  msgid "Truncate the audio files for demo with ffmpeg"
528
  msgstr ""
529
 
530
- #: views/global_options.php:110 views/global_options.php:111
531
  msgid "ffmpeg path"
532
  msgstr ""
533
 
534
- #: views/global_options.php:114 views/global_options.php:116
535
  msgid "Watermark audio"
536
  msgstr ""
537
 
538
- #: views/global_options.php:116
539
  msgid "Select"
540
  msgstr ""
541
 
542
- #: views/global_options.php:117
543
  msgid ""
544
  "Select an audio file if you want to apply a watermark to the audio files for "
545
  "demos. The watermark will be applied to the protected demos (Experimental "
546
  "feature)."
547
  msgstr ""
548
 
549
- #: views/global_options.php:124 views/global_options.php:125
550
  msgid "Delete the demo files generated previously"
551
  msgstr ""
552
 
553
- #: views/global_options.php:131 views/global_options.php:132
554
  msgid "Store demo files on Google Drive"
555
  msgstr ""
556
 
557
- #: views/global_options.php:135
558
  msgid "Import a JSON Key file"
559
  msgstr ""
560
 
561
- #: views/global_options.php:137
562
  msgid "JSON Key file"
563
  msgstr ""
564
 
565
- #: views/global_options.php:181
566
  msgid "Troubleshoot Area"
567
  msgstr ""
568
 
569
- #: views/global_options.php:185 views/global_options.php:188
570
  msgid "On iPads and iPhones, use native controls"
571
  msgstr ""
572
 
573
- #: views/global_options.php:189
574
  msgid ""
575
  "tick the checkbox if the players do not work properly on iPads or iPhones"
576
  msgstr ""
577
 
578
- #: views/global_options.php:194
579
  msgid "Loading players in the onload event"
580
  msgstr ""
581
 
582
- #: views/global_options.php:197
583
  msgid "Loading placeholder in the onload event"
584
  msgstr ""
585
 
586
- #: views/global_options.php:198
587
  msgid "tick the checkbox if the players are not being loaded properly"
588
  msgstr ""
589
 
590
- #: views/global_options.php:203
591
  msgid "For files whose extensions cannot be determined"
592
  msgstr ""
593
 
594
- #: views/global_options.php:206
595
  msgid ""
596
  "For files whose extensions cannot be determined, handle them as mp3 files"
597
  msgstr ""
598
 
599
- #: views/global_options.php:207
600
  msgid "handle them as mp3 files"
601
  msgstr ""
602
 
603
- #: views/global_options.php:212 views/global_options.php:215
604
  msgid ""
605
  "For the WooCommerce Gutenberg Blocks, include the main player in the "
606
  "products titles"
607
  msgstr ""
608
 
609
- #: views/global_options.php:216
610
  msgid "Includes the main player in front of products titles"
611
  msgstr ""
612
 
613
- #: views/global_options.php:221 views/global_options.php:224
614
  msgid "WooCommerce hook used to display the players in the shop pages"
615
  msgstr ""
616
 
617
- #: views/global_options.php:225
618
  msgid ""
619
  "The plugin uses by default the <b>woocommerce_shop_loop_item_title</b> hook. "
620
  "If the player is not being displayed, enter the hook used by the theme "
621
  "active on your website."
622
  msgstr ""
623
 
624
- #: views/global_options.php:226
625
  msgid "Force the player in the title"
626
  msgstr ""
627
 
628
- #: views/global_options.php:226
629
  msgid "Forces the audio player to be displayed in the product title."
630
  msgstr ""
631
 
632
- #: views/global_options.php:231 views/global_options.php:234
633
  msgid "WooCommerce hook used to display the players in the products pages"
634
  msgstr ""
635
 
636
- #: views/global_options.php:235
637
  msgid ""
638
  "The plugin uses by default the <b>woocommerce_single_product_summary</b> "
639
  "hook. If the player is not being displayed, enter the hook used by the theme "
640
  "active on your website."
641
  msgstr ""
642
 
643
- #: views/global_options.php:240
644
  msgid ""
645
  "Click on the <a href=\"https://docs.woocommerce.com/wc-apidocs/hook-docs.html"
646
  "\" target=\"_blank\">THIS LINK</a> for the list of available <a href="
@@ -648,136 +674,136 @@ msgid ""
648
  "style=\"font-weight:bold;font-size:1.3em;\">WooCommerce Hooks</a>"
649
  msgstr ""
650
 
651
- #: views/global_options.php:245
652
  msgid "Include music player in all products"
653
  msgstr ""
654
 
655
- #: views/global_options.php:251
656
  msgid "Products pages only"
657
  msgstr ""
658
 
659
- #: views/global_options.php:254
660
  msgid "Multiple-entry pages"
661
  msgstr ""
662
 
663
- #: views/global_options.php:257
664
  msgid "Product and multiple-entry pages"
665
  msgstr ""
666
 
667
- #: views/global_options.php:262 views/global_options.php:264
668
  msgid "Include players in cart"
669
  msgstr ""
670
 
671
- #: views/global_options.php:281
672
  msgid "skin 2"
673
  msgstr ""
674
 
675
- #: views/global_options.php:312 views/global_options.php:315
676
  msgid "Allow multiple players to play simultaneously"
677
  msgstr ""
678
 
679
- #: views/global_options.php:317
680
  msgid ""
681
  "By default, only one player would be playing at once. By pressing the play "
682
  "button of a player, the other players would stop. By ticking the checkbox, "
683
  "multiple players could play simultaneously."
684
  msgstr ""
685
 
686
- #: views/global_options.php:322 views/player_options.php:240
687
  msgid "Player volume (from 0 to 1)"
688
  msgstr ""
689
 
690
- #: views/global_options.php:324 views/player_options.php:242
691
  msgid "Player volume"
692
  msgstr ""
693
 
694
- #: views/global_options.php:334 views/player_options.php:252
695
  msgid "On cover"
696
  msgstr ""
697
 
698
- #: views/global_options.php:349 views/player_options.php:267
699
  msgid "Display the player title"
700
  msgstr ""
701
 
702
- #: views/global_options.php:353 views/player_options.php:271
703
  msgid "The security feature is only available in the PRO version of the plugin"
704
  msgstr ""
705
 
706
- #: views/global_options.php:356 views/global_options.php:357
707
  #: views/player_options.php:274 views/player_options.php:275
708
  msgid "Protect the file"
709
  msgstr ""
710
 
711
- #: views/global_options.php:360 views/global_options.php:362
712
  #: views/player_options.php:278 views/player_options.php:280
713
  msgid "Percent of audio used for protected playbacks"
714
  msgstr ""
715
 
716
- #: views/global_options.php:363 views/player_options.php:281
717
  msgid ""
718
  "To prevent unauthorized copying of audio files, the files will be partially "
719
  "accessible"
720
  msgstr ""
721
 
722
- #: views/global_options.php:368
723
  msgid ""
724
  "Text to display beside the player explaining that demos are partial versions "
725
  "of the original files"
726
  msgstr ""
727
 
728
- #: views/global_options.php:370
729
  msgid "Explaining that demos are partial versions of the original files"
730
  msgstr ""
731
 
732
- #: views/global_options.php:384
733
  msgid "Scope"
734
  msgstr ""
735
 
736
- #: views/global_options.php:385
737
  msgid ""
738
  "Ticking the checkbox the previous settings are applied to all products, even "
739
  "if they have a player enabled."
740
  msgstr ""
741
 
742
- #: views/global_options.php:385
743
  msgid "Apply the previous settings to all products"
744
  msgstr ""
745
 
746
- #: views/global_options.php:385
747
  msgid "Apply the previous settings to all products pages in the website."
748
  msgstr ""
749
 
750
- #: views/global_options.php:397
751
  msgid "Analytics"
752
  msgstr ""
753
 
754
- #: views/global_options.php:401
755
  msgid ""
756
  "Allows the integration with Google Analytics for registering new events when "
757
  "the songs are played. The event information would include: the URL to the "
758
  "audio file as the event label and the product's id as its value."
759
  msgstr ""
760
 
761
- #: views/global_options.php:402
762
  msgid "Note"
763
  msgstr ""
764
 
765
- #: views/global_options.php:402
766
  msgid ""
767
  "If the preload option is configured as Metadata or Auto in the players "
768
  "settings, the event would be registered when the audio file is loaded by the "
769
  "player and not exactly when they are playing."
770
  msgstr ""
771
 
772
- #: views/global_options.php:407 views/global_options.php:408
773
  msgid "Tracking Id"
774
  msgstr ""
775
 
776
- #: views/global_options.php:420
777
  msgid "Add ons"
778
  msgstr ""
779
 
780
- #: views/global_options.php:427
781
  msgid "Save settings"
782
  msgstr ""
783
 
@@ -839,57 +865,57 @@ msgstr ""
839
  msgid "Add File"
840
  msgstr ""
841
 
842
- #: wcmp.php:230
843
  msgid "Help"
844
  msgstr ""
845
 
846
- #: wcmp.php:1015
847
  msgid "There are no products that satisfy the block's settings"
848
  msgstr ""
849
 
850
- #: widgets/playlist_widget.php:52
851
  msgid "Title"
852
  msgstr ""
853
 
854
- #: widgets/playlist_widget.php:55
855
  msgid "Products IDs"
856
  msgstr ""
857
 
858
- #: widgets/playlist_widget.php:55
859
  msgid "Products IDs separated by comma, or a * for all"
860
  msgstr ""
861
 
862
- #: widgets/playlist_widget.php:59
863
  msgid ""
864
  "Enter the ID of products separated by comma, or a * symbol to includes all "
865
  "products in the playlist."
866
  msgstr ""
867
 
868
- #: widgets/playlist_widget.php:63
869
  msgid "Volume (enter a number between 0 and 1)"
870
  msgstr ""
871
 
872
- #: widgets/playlist_widget.php:66
873
  msgid "Playlist layout"
874
  msgstr ""
875
 
876
- #: widgets/playlist_widget.php:69
877
  msgid "New layout"
878
  msgstr ""
879
 
880
- #: widgets/playlist_widget.php:72
881
  msgid "Original layout"
882
  msgstr ""
883
 
884
- #: widgets/playlist_widget.php:97
885
  msgid "Highlight the current product"
886
  msgstr ""
887
 
888
- #: widgets/playlist_widget.php:100
889
  msgid "Continue playing after navigate"
890
  msgstr ""
891
 
892
- #: widgets/playlist_widget.php:104
893
  msgid ""
894
  "Continue playing the same song at same position after navigate. You can "
895
  "experiment some delay because the music player should to load the audio file "
1
  msgid ""
2
  msgstr ""
3
  "Project-Id-Version: music-player-for-woocommerce\n"
4
+ "POT-Creation-Date: 2022-03-03 00:43+0100\n"
5
+ "PO-Revision-Date: 2022-03-03 00:43+0100\n"
6
  "Last-Translator: CodePeople\n"
7
  "Language-Team: CodePeople\n"
8
  "Language: en_US\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
 
 
12
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
13
+ "X-Generator: Poedit 3.0.1\n"
14
+ "X-Poedit-Basepath: ..\n"
15
  "X-Poedit-KeywordsList: __;_e;esc_attr__;esc_attr_e\n"
16
  "X-Poedit-SearchPath-0: .\n"
17
 
18
+ #: addons/ap-compact-audio-player.addon.php:33
19
  msgid "Use Compact Audio Player instead of the current plugin players"
20
  msgstr ""
21
 
22
+ #: addons/ap-compact-audio-player.addon.php:33
23
  msgid "Use \"Compact Audio Player\" instead of the current plugin players"
24
  msgstr ""
25
 
26
+ #: addons/ap-compact-audio-player.addon.php:35
27
+ #: addons/ap-cp-media-player.addon.php:76
28
+ #: addons/ap-html5-audio-player.addon.php:37 addons/ap-mp3-jplayer.addon.php:35
29
  msgid ""
30
  "The player functions configured above do not apply, except for audio "
31
  "protection if applicable.<br>This player <b>will take precedence</b> over "
32
  "the player configured in the products' settings."
33
  msgstr ""
34
 
35
+ #: addons/ap-compact-audio-player.addon.php:36
36
  msgid ""
37
  "The \"Compact WP Audio Player\" plugin is not installed on your WordPress."
38
  msgstr ""
39
 
40
+ #: addons/ap-cp-media-player.addon.php:72
41
  msgid "Use CP Media Player instead of the current plugin players"
42
  msgstr ""
43
 
44
+ #: addons/ap-cp-media-player.addon.php:72
45
  msgid "Use \"CP Media Player\" instead of the current plugin players"
46
  msgstr ""
47
 
48
+ #: addons/ap-cp-media-player.addon.php:73
49
  msgid "Select player skin"
50
  msgstr ""
51
 
52
+ #: addons/ap-cp-media-player.addon.php:77
53
  msgid "The \"CP Media Player\" plugin is not installed on your WordPress."
54
  msgstr ""
55
 
56
+ #: addons/ap-html5-audio-player.addon.php:35
57
  msgid "Use HTML5 Audio Player instead of the current plugin players"
58
  msgstr ""
59
 
60
+ #: addons/ap-html5-audio-player.addon.php:35
61
  msgid "Use \"HTML5 Audio Player\" instead of the current plugin players"
62
  msgstr ""
63
 
64
+ #: addons/ap-html5-audio-player.addon.php:38
65
  msgid "The \"HTML5 Audio Player\" plugin is not installed on your WordPress."
66
  msgstr ""
67
 
68
+ #: addons/ap-mp3-jplayer.addon.php:33
69
+ msgid "Use MP3 jPlayer instead of the current plugin players"
70
+ msgstr ""
71
+
72
+ #: addons/ap-mp3-jplayer.addon.php:33
73
+ msgid "Use \"MP3 jPlayer\" instead of the current plugin players"
74
+ msgstr ""
75
+
76
+ #: addons/ap-mp3-jplayer.addon.php:36
77
+ msgid "The \"MP3 jPlayer\" plugin is not installed on your WordPress."
78
+ msgstr ""
79
+
80
  #: addons/dokan.addon.php:26
81
  msgid "Activate the Dokan add-on"
82
  msgstr ""
196
  "modified as <b>dl=1</b>"
197
  msgstr ""
198
 
199
+ #: addons/dokan/player_options.php:181 views/global_options.php:253
200
  #: views/player_options.php:181
201
  msgid "Enable player"
202
  msgstr ""
203
 
204
+ #: addons/dokan/player_options.php:181 views/global_options.php:253
205
  msgid ""
206
  "The player is shown only if the product is \"downloadable\" with at least an "
207
  "audio file between the \"Downloadable files\", or you have selected your own "
212
  msgid "Include music player"
213
  msgstr ""
214
 
215
+ #: addons/dokan/player_options.php:185 views/global_options.php:256
216
  #: views/player_options.php:184
217
  msgid "Include in"
218
  msgstr ""
221
  msgid "Include on products pages only"
222
  msgstr ""
223
 
224
+ #: addons/dokan/player_options.php:188 views/global_options.php:259
225
  #: views/player_options.php:187
226
  msgid "single-entry pages <i>(Product's page only)</i>"
227
  msgstr ""
230
  msgid "Include on multiple-entry pages"
231
  msgstr ""
232
 
233
+ #: addons/dokan/player_options.php:191 views/global_options.php:262
234
  #: views/player_options.php:190
235
  msgid ""
236
  "multiple entries pages <i>(Shop pages, archive pages, but not in the "
241
  msgid "Include on products and multiple-entry pages"
242
  msgstr ""
243
 
244
+ #: addons/dokan/player_options.php:194 views/global_options.php:265
245
  #: views/player_options.php:193
246
  msgid "all pages <i>(with single or multiple-entries)</i>"
247
  msgstr ""
248
 
249
  #: addons/dokan/player_options.php:198 addons/dokan/player_options.php:199
250
+ #: views/global_options.php:275 views/global_options.php:276
251
  #: views/player_options.php:197 views/player_options.php:198
252
  msgid "Merge in grouped products"
253
  msgstr ""
254
 
255
+ #: addons/dokan/player_options.php:200 views/global_options.php:276
256
  #: views/player_options.php:198
257
  msgid ""
258
  "In grouped products, display the \"Add to cart\" buttons and quantity fields "
259
  "in the players rows"
260
  msgstr ""
261
 
262
+ #: addons/dokan/player_options.php:203 views/global_options.php:279
263
+ #: views/player_options.php:201 widgets/playlist_widget.php:76
264
  msgid "Player layout"
265
  msgstr ""
266
 
267
+ #: addons/dokan/player_options.php:206 views/global_options.php:283
268
+ #: views/global_options.php:284 views/player_options.php:205
269
  #: views/player_options.php:206
270
  msgid "Skin 1"
271
  msgstr ""
272
 
273
+ #: addons/dokan/player_options.php:211 views/global_options.php:289
274
  #: views/player_options.php:210 views/player_options.php:211
275
  msgid "Skin 2"
276
  msgstr ""
277
 
278
+ #: addons/dokan/player_options.php:216 views/global_options.php:293
279
+ #: views/global_options.php:294 views/player_options.php:215
280
  #: views/player_options.php:216
281
  msgid "Skin 3"
282
  msgstr ""
283
 
284
+ #: addons/dokan/player_options.php:222 views/global_options.php:301
285
+ #: views/player_options.php:223 widgets/playlist_widget.php:92
286
  msgid "Preload"
287
  msgstr ""
288
 
289
+ #: addons/dokan/player_options.php:224 views/global_options.php:304
290
  #: views/player_options.php:226
291
  msgid "Preload - none"
292
  msgstr ""
293
 
294
+ #: addons/dokan/player_options.php:225 views/global_options.php:305
295
  #: views/player_options.php:227
296
  msgid "Preload - metadata"
297
  msgstr ""
298
 
299
+ #: addons/dokan/player_options.php:226 views/global_options.php:306
300
  #: views/player_options.php:228
301
  msgid "Preload - auto"
302
  msgstr ""
303
 
304
+ #: addons/dokan/player_options.php:230 views/global_options.php:311
305
+ #: views/global_options.php:314 views/player_options.php:233
306
+ #: views/player_options.php:236 widgets/playlist_widget.php:88
307
  msgid "Play all"
308
  msgstr ""
309
 
310
+ #: addons/dokan/player_options.php:233 views/global_options.php:335
311
  #: views/player_options.php:246
312
  msgid "Player controls"
313
  msgstr ""
314
 
315
+ #: addons/dokan/player_options.php:235 views/global_options.php:337
316
  #: views/player_options.php:248
317
  msgid "Play/pause button"
318
  msgstr ""
319
 
320
+ #: addons/dokan/player_options.php:235 views/global_options.php:337
321
  #: views/player_options.php:248
322
  msgid "the play/pause button only"
323
  msgstr ""
324
 
325
+ #: addons/dokan/player_options.php:236 views/global_options.php:338
326
  #: views/player_options.php:249
327
  msgid "All controls"
328
  msgstr ""
329
 
330
+ #: addons/dokan/player_options.php:236 views/global_options.php:338
331
  #: views/player_options.php:249
332
  msgid "all controls"
333
  msgstr ""
334
 
335
+ #: addons/dokan/player_options.php:237 views/global_options.php:339
336
  #: views/player_options.php:250
337
  msgid "Depending on context"
338
  msgstr ""
339
 
340
+ #: addons/dokan/player_options.php:237 views/global_options.php:339
341
  #: views/player_options.php:250
342
  msgid "the play/pause button only, or all controls depending on context"
343
  msgstr ""
346
  msgid "Player on cover"
347
  msgstr ""
348
 
349
+ #: addons/dokan/player_options.php:241 views/global_options.php:344
350
  #: views/player_options.php:255
351
  msgid "for play/pause button players display them on cover images."
352
  msgstr ""
353
 
354
+ #: addons/dokan/player_options.php:242 views/global_options.php:347
355
  #: views/player_options.php:258
356
  msgid ""
357
  "(This feature is experimental, and will depend on the theme active on the "
358
  "website.)"
359
  msgstr ""
360
 
361
+ #: addons/dokan/player_options.php:247 views/global_options.php:354
362
  #: views/player_options.php:265
363
  msgid "Display the player's title"
364
  msgstr ""
414
  #: pagebuilders/beaverbuilder/wcmp/wcmp.pb.php:9
415
  #: pagebuilders/beaverbuilder/wcmp/wcmp.pb.php:11
416
  #: pagebuilders/beaverbuilder/wcmp/wcmp.pb.php:12 pagebuilders/builders.php:130
417
+ #: pagebuilders/siteorigin/siteorigin-wcmp/siteorigin-wcmp.php:17 wcmp.php:225
418
  msgid "Music Player for WooCommerce"
419
  msgstr ""
420
 
452
  msgid "Insert a playlist with the products players"
453
  msgstr ""
454
 
455
+ #: views/global_options.php:41
456
  msgid "Music Player for WooCommerce - Global Settings"
457
  msgstr ""
458
 
459
+ #: views/global_options.php:45
460
  msgid ""
461
  "For reporting any issue or to request a customization, <a href=\"https://"
462
  "wordpress.dwbooster.com/contact-us\" target=\"_blank\">CLICK HERE</a><br />\n"
468
  "target=\"_blank\">Public page: Click to visit the WooCommerce Store</a>"
469
  msgstr ""
470
 
471
+ #: views/global_options.php:54
472
  msgid "Registering of Plugin"
473
  msgstr ""
474
 
475
+ #: views/global_options.php:56
476
  msgid "Enter the email address of buyer"
477
  msgstr ""
478
 
479
+ #: views/global_options.php:57
480
  msgid "Buyer email"
481
  msgstr ""
482
 
483
+ #: views/global_options.php:57
484
  msgid "Register"
485
  msgstr ""
486
 
487
+ #: views/global_options.php:69 views/player_options.php:46
488
  msgid ""
489
  "<p>The player uses the audio files associated to the product. If you want "
490
  "protecting the audio files for selling, tick the checkbox: <b>\"Protect the "
496
  "pay for them.</b></p>"
497
  msgstr ""
498
 
499
+ #: views/global_options.php:80
500
  msgid "General Settings"
501
  msgstr ""
502
 
503
+ #: views/global_options.php:83 views/global_options.php:84
504
  msgid "Include the players only for registered users"
505
  msgstr ""
506
 
507
+ #: views/global_options.php:87 views/global_options.php:88
508
  msgid "Apply fade out to playing audio when possible"
509
  msgstr ""
510
 
511
+ #: views/global_options.php:91
512
+ msgid "Text for product purchased times in playlists"
513
+ msgstr ""
514
+
515
+ #: views/global_options.php:92
516
+ msgid "Purchased times text"
517
+ msgstr ""
518
+
519
+ #: views/global_options.php:93
520
+ msgid ""
521
+ "Texts to display when the playlist shortcode includes the purchased_times "
522
+ "attribute.<br>Ex."
523
+ msgstr ""
524
+
525
+ #: views/global_options.php:97
526
  msgid "The general settings affect only the PRO version of the plugin"
527
  msgstr ""
528
 
529
+ #: views/global_options.php:97 views/global_options.php:360
530
  #: views/player_options.php:50 views/player_options.php:271
531
  msgid "CLICK HERE TO GET THE PRO VERSION OF THE PLUGIN"
532
  msgstr ""
533
 
534
+ #: views/global_options.php:100 views/global_options.php:102
535
  msgid ""
536
  "For buyers, play the purchased audio files instead of the truncated files "
537
  "for demo"
538
  msgstr ""
539
 
540
+ #: views/global_options.php:103
541
  msgid "Reset the files"
542
  msgstr ""
543
 
544
+ #: views/global_options.php:104
545
  msgid "Reset files interval"
546
  msgstr ""
547
 
548
+ #: views/global_options.php:105
549
  msgid "daily"
550
  msgstr ""
551
 
552
+ #: views/global_options.php:113 views/global_options.php:114
553
  msgid "Truncate the audio files for demo with ffmpeg"
554
  msgstr ""
555
 
556
+ #: views/global_options.php:117 views/global_options.php:118
557
  msgid "ffmpeg path"
558
  msgstr ""
559
 
560
+ #: views/global_options.php:121 views/global_options.php:123
561
  msgid "Watermark audio"
562
  msgstr ""
563
 
564
+ #: views/global_options.php:123
565
  msgid "Select"
566
  msgstr ""
567
 
568
+ #: views/global_options.php:124
569
  msgid ""
570
  "Select an audio file if you want to apply a watermark to the audio files for "
571
  "demos. The watermark will be applied to the protected demos (Experimental "
572
  "feature)."
573
  msgstr ""
574
 
575
+ #: views/global_options.php:131 views/global_options.php:132
576
  msgid "Delete the demo files generated previously"
577
  msgstr ""
578
 
579
+ #: views/global_options.php:138 views/global_options.php:139
580
  msgid "Store demo files on Google Drive"
581
  msgstr ""
582
 
583
+ #: views/global_options.php:142
584
  msgid "Import a JSON Key file"
585
  msgstr ""
586
 
587
+ #: views/global_options.php:144
588
  msgid "JSON Key file"
589
  msgstr ""
590
 
591
+ #: views/global_options.php:188
592
  msgid "Troubleshoot Area"
593
  msgstr ""
594
 
595
+ #: views/global_options.php:192 views/global_options.php:195
596
  msgid "On iPads and iPhones, use native controls"
597
  msgstr ""
598
 
599
+ #: views/global_options.php:196
600
  msgid ""
601
  "tick the checkbox if the players do not work properly on iPads or iPhones"
602
  msgstr ""
603
 
604
+ #: views/global_options.php:201
605
  msgid "Loading players in the onload event"
606
  msgstr ""
607
 
608
+ #: views/global_options.php:204
609
  msgid "Loading placeholder in the onload event"
610
  msgstr ""
611
 
612
+ #: views/global_options.php:205
613
  msgid "tick the checkbox if the players are not being loaded properly"
614
  msgstr ""
615
 
616
+ #: views/global_options.php:210
617
  msgid "For files whose extensions cannot be determined"
618
  msgstr ""
619
 
620
+ #: views/global_options.php:213
621
  msgid ""
622
  "For files whose extensions cannot be determined, handle them as mp3 files"
623
  msgstr ""
624
 
625
+ #: views/global_options.php:214
626
  msgid "handle them as mp3 files"
627
  msgstr ""
628
 
629
+ #: views/global_options.php:219 views/global_options.php:222
630
  msgid ""
631
  "For the WooCommerce Gutenberg Blocks, include the main player in the "
632
  "products titles"
633
  msgstr ""
634
 
635
+ #: views/global_options.php:223
636
  msgid "Includes the main player in front of products titles"
637
  msgstr ""
638
 
639
+ #: views/global_options.php:228 views/global_options.php:231
640
  msgid "WooCommerce hook used to display the players in the shop pages"
641
  msgstr ""
642
 
643
+ #: views/global_options.php:232
644
  msgid ""
645
  "The plugin uses by default the <b>woocommerce_shop_loop_item_title</b> hook. "
646
  "If the player is not being displayed, enter the hook used by the theme "
647
  "active on your website."
648
  msgstr ""
649
 
650
+ #: views/global_options.php:233
651
  msgid "Force the player in the title"
652
  msgstr ""
653
 
654
+ #: views/global_options.php:233
655
  msgid "Forces the audio player to be displayed in the product title."
656
  msgstr ""
657
 
658
+ #: views/global_options.php:238 views/global_options.php:241
659
  msgid "WooCommerce hook used to display the players in the products pages"
660
  msgstr ""
661
 
662
+ #: views/global_options.php:242
663
  msgid ""
664
  "The plugin uses by default the <b>woocommerce_single_product_summary</b> "
665
  "hook. If the player is not being displayed, enter the hook used by the theme "
666
  "active on your website."
667
  msgstr ""
668
 
669
+ #: views/global_options.php:247
670
  msgid ""
671
  "Click on the <a href=\"https://docs.woocommerce.com/wc-apidocs/hook-docs.html"
672
  "\" target=\"_blank\">THIS LINK</a> for the list of available <a href="
674
  "style=\"font-weight:bold;font-size:1.3em;\">WooCommerce Hooks</a>"
675
  msgstr ""
676
 
677
+ #: views/global_options.php:252
678
  msgid "Include music player in all products"
679
  msgstr ""
680
 
681
+ #: views/global_options.php:258
682
  msgid "Products pages only"
683
  msgstr ""
684
 
685
+ #: views/global_options.php:261
686
  msgid "Multiple-entry pages"
687
  msgstr ""
688
 
689
+ #: views/global_options.php:264
690
  msgid "Product and multiple-entry pages"
691
  msgstr ""
692
 
693
+ #: views/global_options.php:269 views/global_options.php:271
694
  msgid "Include players in cart"
695
  msgstr ""
696
 
697
+ #: views/global_options.php:288
698
  msgid "skin 2"
699
  msgstr ""
700
 
701
+ #: views/global_options.php:319 views/global_options.php:322
702
  msgid "Allow multiple players to play simultaneously"
703
  msgstr ""
704
 
705
+ #: views/global_options.php:324
706
  msgid ""
707
  "By default, only one player would be playing at once. By pressing the play "
708
  "button of a player, the other players would stop. By ticking the checkbox, "
709
  "multiple players could play simultaneously."
710
  msgstr ""
711
 
712
+ #: views/global_options.php:329 views/player_options.php:240
713
  msgid "Player volume (from 0 to 1)"
714
  msgstr ""
715
 
716
+ #: views/global_options.php:331 views/player_options.php:242
717
  msgid "Player volume"
718
  msgstr ""
719
 
720
+ #: views/global_options.php:341 views/player_options.php:252
721
  msgid "On cover"
722
  msgstr ""
723
 
724
+ #: views/global_options.php:356 views/player_options.php:267
725
  msgid "Display the player title"
726
  msgstr ""
727
 
728
+ #: views/global_options.php:360 views/player_options.php:271
729
  msgid "The security feature is only available in the PRO version of the plugin"
730
  msgstr ""
731
 
732
+ #: views/global_options.php:363 views/global_options.php:364
733
  #: views/player_options.php:274 views/player_options.php:275
734
  msgid "Protect the file"
735
  msgstr ""
736
 
737
+ #: views/global_options.php:367 views/global_options.php:369
738
  #: views/player_options.php:278 views/player_options.php:280
739
  msgid "Percent of audio used for protected playbacks"
740
  msgstr ""
741
 
742
+ #: views/global_options.php:370 views/player_options.php:281
743
  msgid ""
744
  "To prevent unauthorized copying of audio files, the files will be partially "
745
  "accessible"
746
  msgstr ""
747
 
748
+ #: views/global_options.php:375
749
  msgid ""
750
  "Text to display beside the player explaining that demos are partial versions "
751
  "of the original files"
752
  msgstr ""
753
 
754
+ #: views/global_options.php:377
755
  msgid "Explaining that demos are partial versions of the original files"
756
  msgstr ""
757
 
758
+ #: views/global_options.php:391
759
  msgid "Scope"
760
  msgstr ""
761
 
762
+ #: views/global_options.php:392
763
  msgid ""
764
  "Ticking the checkbox the previous settings are applied to all products, even "
765
  "if they have a player enabled."
766
  msgstr ""
767
 
768
+ #: views/global_options.php:392
769
  msgid "Apply the previous settings to all products"
770
  msgstr ""
771
 
772
+ #: views/global_options.php:392
773
  msgid "Apply the previous settings to all products pages in the website."
774
  msgstr ""
775
 
776
+ #: views/global_options.php:404
777
  msgid "Analytics"
778
  msgstr ""
779
 
780
+ #: views/global_options.php:408
781
  msgid ""
782
  "Allows the integration with Google Analytics for registering new events when "
783
  "the songs are played. The event information would include: the URL to the "
784
  "audio file as the event label and the product's id as its value."
785
  msgstr ""
786
 
787
+ #: views/global_options.php:409
788
  msgid "Note"
789
  msgstr ""
790
 
791
+ #: views/global_options.php:409
792
  msgid ""
793
  "If the preload option is configured as Metadata or Auto in the players "
794
  "settings, the event would be registered when the audio file is loaded by the "
795
  "player and not exactly when they are playing."
796
  msgstr ""
797
 
798
+ #: views/global_options.php:414 views/global_options.php:415
799
  msgid "Tracking Id"
800
  msgstr ""
801
 
802
+ #: views/global_options.php:427
803
  msgid "Add ons"
804
  msgstr ""
805
 
806
+ #: views/global_options.php:434
807
  msgid "Save settings"
808
  msgstr ""
809
 
865
  msgid "Add File"
866
  msgstr ""
867
 
868
+ #: wcmp.php:235
869
  msgid "Help"
870
  msgstr ""
871
 
872
+ #: wcmp.php:1144
873
  msgid "There are no products that satisfy the block's settings"
874
  msgstr ""
875
 
876
+ #: widgets/playlist_widget.php:53
877
  msgid "Title"
878
  msgstr ""
879
 
880
+ #: widgets/playlist_widget.php:56
881
  msgid "Products IDs"
882
  msgstr ""
883
 
884
+ #: widgets/playlist_widget.php:56
885
  msgid "Products IDs separated by comma, or a * for all"
886
  msgstr ""
887
 
888
+ #: widgets/playlist_widget.php:60
889
  msgid ""
890
  "Enter the ID of products separated by comma, or a * symbol to includes all "
891
  "products in the playlist."
892
  msgstr ""
893
 
894
+ #: widgets/playlist_widget.php:64
895
  msgid "Volume (enter a number between 0 and 1)"
896
  msgstr ""
897
 
898
+ #: widgets/playlist_widget.php:67
899
  msgid "Playlist layout"
900
  msgstr ""
901
 
902
+ #: widgets/playlist_widget.php:70
903
  msgid "New layout"
904
  msgstr ""
905
 
906
+ #: widgets/playlist_widget.php:73
907
  msgid "Original layout"
908
  msgstr ""
909
 
910
+ #: widgets/playlist_widget.php:98
911
  msgid "Highlight the current product"
912
  msgstr ""
913
 
914
+ #: widgets/playlist_widget.php:101
915
  msgid "Continue playing after navigate"
916
  msgstr ""
917
 
918
+ #: widgets/playlist_widget.php:105
919
  msgid ""
920
  "Continue playing the same song at same position after navigate. You can "
921
  "experiment some delay because the music player should to load the audio file "
pagebuilders/beaverbuilder/wcmp/includes/frontend.php CHANGED
@@ -1,8 +1,12 @@
1
  <?php
2
- if(!empty($settings->products_ids)) $products_ids = preg_replace('/[^\d\,]/', '', $settings->products_ids);
3
- if(empty($products_ids)) $products_ids = '*';
 
 
 
 
4
 
5
- $output = '[wcmp-playlist products_ids="'.sanitize_text_field($products_ids).'"';
6
 
7
  if(!empty($settings->attributes)) $output .= ' '.sanitize_text_field($settings->attributes);
8
 
1
  <?php
2
+ if(!empty($settings->products_ids))
3
+ {
4
+ $products_ids = preg_replace('/[^\d\,]/', '', $settings->products_ids);
5
+ $products_ids = trim($products_ids, ',');
6
+ }
7
+ if(!empty($products_ids)) $products_ids = ' products_ids="'.sanitize_text_field($products_ids).'"';
8
 
9
+ $output = '[wcmp-playlist'.$products_ids;
10
 
11
  if(!empty($settings->attributes)) $output .= ' '.sanitize_text_field($settings->attributes);
12
 
pagebuilders/divi/divi.pb.php CHANGED
@@ -39,13 +39,13 @@ class WCMP_DIVI extends ET_Builder_Module
39
  );
40
  }
41
 
42
- public function render($unprocessed_props, $content = null, $render_slug)
43
  {
44
  $output = '';
45
  $products = sanitize_text_field($this->props['wcmp_products_ids']);
46
- if(empty($products)) $products = '*';
47
 
48
- $output = '[wcmp-playlist products_ids="'.esc_attr($products).'"';
49
 
50
  $attributes = sanitize_text_field($this->props['wcmp_attributes']);
51
  if(!empty($attributes)) $output .= ' '.$attributes;
39
  );
40
  }
41
 
42
+ public function render($unprocessed_props, $content = null, $render_slug = null)
43
  {
44
  $output = '';
45
  $products = sanitize_text_field($this->props['wcmp_products_ids']);
46
+ if(!empty($products)) $products = ' products_ids="'.esc_attr($products).'"';
47
 
48
+ $output = '[wcmp-playlist'.$products;
49
 
50
  $attributes = sanitize_text_field($this->props['wcmp_attributes']);
51
  if(!empty($attributes)) $output .= ' '.$attributes;
pagebuilders/visualcomposer/WCMPplaylist/public/dist/element.bundle.js CHANGED
@@ -8,7 +8,7 @@
8
  /***/ (function(module, exports, __webpack_require__) {
9
 
10
  "use strict";
11
- eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"./node_modules/babel-runtime/helpers/extends.js\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nvar _getPrototypeOf = __webpack_require__(/*! babel-runtime/core-js/object/get-prototype-of */ \"./node_modules/babel-runtime/core-js/object/get-prototype-of.js\");\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"./node_modules/babel-runtime/helpers/classCallCheck.js\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"./node_modules/babel-runtime/helpers/createClass.js\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ \"./node_modules/babel-runtime/helpers/possibleConstructorReturn.js\");\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\n\nvar _get2 = __webpack_require__(/*! babel-runtime/helpers/get */ \"./node_modules/babel-runtime/helpers/get.js\");\n\nvar _get3 = _interopRequireDefault(_get2);\n\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ \"./node_modules/babel-runtime/helpers/inherits.js\");\n\nvar _inherits3 = _interopRequireDefault(_inherits2);\n\nvar _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _vcCake = __webpack_require__(/*! vc-cake */ \"./node_modules/vc-cake/index.js\");\n\nvar _vcCake2 = _interopRequireDefault(_vcCake);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar vcvAPI = _vcCake2.default.getService('api');\n\nvar WCMPplaylistElement = function (_vcvAPI$elementCompon) {\n\t(0, _inherits3.default)(WCMPplaylistElement, _vcvAPI$elementCompon);\n\n\tfunction WCMPplaylistElement() {\n\t\t(0, _classCallCheck3.default)(this, WCMPplaylistElement);\n\t\treturn (0, _possibleConstructorReturn3.default)(this, (WCMPplaylistElement.__proto__ || (0, _getPrototypeOf2.default)(WCMPplaylistElement)).apply(this, arguments));\n\t}\n\n\t(0, _createClass3.default)(WCMPplaylistElement, [{\n\t\tkey: 'sanitize',\n\t\tvalue: function sanitize(str, args) {\n\t\t\tif (typeof args == 'undefined') args = {};\n\t\t\tif (!('quotes' in args)) args['quotes'] = false;\n\t\t\tif (!('spaces' in args)) args['spaces'] = false;\n\n\t\t\tstr = str.replace(/[^a-zA-Z0-9\\.\\-*_\\s\"'=]/g, '');\n\t\t\tif (!args.quotes) str = str.replace(/'\"/g, '');\n\t\t\tif (!args.spaces) str = str.replace(/\\s/g, '');\n\n\t\t\treturn str;\n\t\t}\n\t}, {\n\t\tkey: 'getTheShortcode',\n\t\tvalue: function getTheShortcode(atts) {\n\t\t\t// Generates the form's shortcode\n\t\t\tvar _atts$products_ids = atts.products_ids,\n\t\t\t products_ids = _atts$products_ids === undefined ? \"\" : _atts$products_ids,\n\t\t\t _atts$attrs = atts.attrs,\n\t\t\t attrs = _atts$attrs === undefined ? \"\" : _atts$attrs;\n\n\t\t\tif (products_ids == '') products_ids = '*';\n\t\t\tvar shortcode = '[wcmp-playlist products_ids=\"' + this.sanitize(products_ids, { spaces: true }) + '\"';\n\t\t\tif (attrs != '') shortcode += ' ' + this.sanitize(attrs, { quotes: true, spaces: true });\n\t\t\tshortcode += ']';\n\n\t\t\treturn shortcode;\n\t\t}\n\t}, {\n\t\tkey: 'addFormGeneratorForVSEditor',\n\t\tvalue: function addFormGeneratorForVSEditor(base) {\n\t\t\treturn base != '' ? base + '<script>delete generated_the_wcmp; generate_the_wcmp();</script>' : base;\n\t\t}\n\t}, {\n\t\tkey: 'componentDidMount',\n\t\tvalue: function componentDidMount() {\n\n\t\t\tvar shortcode = this.addFormGeneratorForVSEditor(this.getTheShortcode(this.props.atts));\n\t\t\t(0, _get3.default)(WCMPplaylistElement.prototype.__proto__ || (0, _getPrototypeOf2.default)(WCMPplaylistElement.prototype), 'updateShortcodeToHtml', this).call(this, shortcode, this.refs.vcvhelper);\n\t\t\tif (!window.wp || !window.wp.shortcode || !window.VCV_API_WPBAKERY_WPB_MAP) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.multipleShortcodesRegex = window.wp.shortcode.regexp(window.VCV_API_WPBAKERY_WPB_MAP().join('|'));\n\t\t\tthis.localShortcodesRegex = new RegExp(this.multipleShortcodesRegex.source);\n\t\t}\n\t}, {\n\t\tkey: 'componentDidUpdate',\n\t\tvalue: function componentDidUpdate(props) {\n\n\t\t\tvar shortcode = this.addFormGeneratorForVSEditor(this.getTheShortcode(this.props.atts));\n\t\t\tvar shortcodeCmp = this.getTheShortcode(props.atts);\n\t\t\t// update only if shortcode changed\n\t\t\tif (shortcode !== shortcodeCmp) {\n\t\t\t\t(0, _get3.default)(WCMPplaylistElement.prototype.__proto__ || (0, _getPrototypeOf2.default)(WCMPplaylistElement.prototype), 'updateShortcodeToHtml', this).call(this, shortcode, this.refs.vcvhelper);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'render',\n\t\tvalue: function render() {\n\t\t\tvar _props = this.props,\n\t\t\t id = _props.id,\n\t\t\t atts = _props.atts,\n\t\t\t editor = _props.editor;\n\n\n\t\t\tvar shortcode = this.getTheShortcode(atts);\n\t\t\tvar elementClasses = 'vce-wcmp-playlist';\n\t\t\tvar wrapperClasses = 'vce-wcmp-playlist-wrapper vce';\n\t\t\tvar customProps = {};\n\n\t\t\tvar doAll = this.applyDO('all');\n\n\t\t\treturn _react2.default.createElement(\n\t\t\t\t'div',\n\t\t\t\t(0, _extends3.default)({ className: elementClasses }, editor, customProps),\n\t\t\t\t_react2.default.createElement(\n\t\t\t\t\t'div',\n\t\t\t\t\t(0, _extends3.default)({ className: wrapperClasses, id: 'el-' + id }, doAll),\n\t\t\t\t\t_react2.default.createElement('style', { className: 'vcvhelper', ref: 'style' }),\n\t\t\t\t\t_react2.default.createElement('div', { className: 'vcvhelper', ref: 'vcvhelper', 'data-vcvs-html': shortcode })\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}]);\n\treturn WCMPplaylistElement;\n}(vcvAPI.elementComponent);\n\nexports.default = WCMPplaylistElement;\n\n//# sourceURL=webpack:///./WCMPplaylist/component.js?");
12
 
13
  /***/ }),
14
 
8
  /***/ (function(module, exports, __webpack_require__) {
9
 
10
  "use strict";
11
+ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"./node_modules/babel-runtime/helpers/extends.js\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nvar _getPrototypeOf = __webpack_require__(/*! babel-runtime/core-js/object/get-prototype-of */ \"./node_modules/babel-runtime/core-js/object/get-prototype-of.js\");\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"./node_modules/babel-runtime/helpers/classCallCheck.js\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"./node_modules/babel-runtime/helpers/createClass.js\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ \"./node_modules/babel-runtime/helpers/possibleConstructorReturn.js\");\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\n\nvar _get2 = __webpack_require__(/*! babel-runtime/helpers/get */ \"./node_modules/babel-runtime/helpers/get.js\");\n\nvar _get3 = _interopRequireDefault(_get2);\n\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ \"./node_modules/babel-runtime/helpers/inherits.js\");\n\nvar _inherits3 = _interopRequireDefault(_inherits2);\n\nvar _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _vcCake = __webpack_require__(/*! vc-cake */ \"./node_modules/vc-cake/index.js\");\n\nvar _vcCake2 = _interopRequireDefault(_vcCake);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar vcvAPI = _vcCake2.default.getService('api');\n\nvar WCMPplaylistElement = function (_vcvAPI$elementCompon) {\n\t(0, _inherits3.default.default)(WCMPplaylistElement, _vcvAPI$elementCompon);\n\n\tfunction WCMPplaylistElement() {\n\t\t(0, _classCallCheck3.default.default)(this, WCMPplaylistElement);\n\t\treturn (0, _possibleConstructorReturn3.default.default)(this, (WCMPplaylistElement.__proto__ || (0, _getPrototypeOf2.default)(WCMPplaylistElement)).apply(this, arguments));\n\t}\n\n\t(0, _createClass3.default.default)(WCMPplaylistElement, [{\n\t\tkey: 'sanitize',\n\t\tvalue: function sanitize(str, args) {\n\t\t\tif (typeof args == 'undefined') args = {};\n\t\t\tif (!('quotes' in args)) args['quotes'] = false;\n\t\t\tif (!('spaces' in args)) args['spaces'] = false;\n\n\t\t\tstr = str.replace(/[^a-zA-Z0-9\\.\\-*_\\s\"'=]/g, '');\n\t\t\tif (!args.quotes) str = str.replace(/'\"/g, '');\n\t\t\tif (!args.spaces) str = str.replace(/\\s/g, '');\n\n\t\t\treturn str;\n\t\t}\n\t}, {\n\t\tkey: 'getTheShortcode',\n\t\tvalue: function getTheShortcode(atts) {\n\t\t\t// Generates the form's shortcode\n\t\t\tvar _atts$products_ids = atts.products_ids,\n\t\t\t products_ids = _atts$products_ids === undefined ? \"\" : _atts$products_ids,\n\t\t\t _atts$attrs = atts.attrs,\n\t\t\t attrs = _atts$attrs === undefined ? \"\" : _atts$attrs;\n\n\t\t\tif (products_ids != '') products_ids = ' products_ids=\"' + this.sanitize(products_ids, { spaces: true }) + '\"';\n\t\t\tvar shortcode = '[wcmp-playlist' + products_ids;\n\t\t\tif (attrs != '') shortcode += ' ' + this.sanitize(attrs, { quotes: true, spaces: true });\n\t\t\tshortcode += ']';\n\n\t\t\treturn shortcode;\n\t\t}\n\t}, {\n\t\tkey: 'addFormGeneratorForVSEditor',\n\t\tvalue: function addFormGeneratorForVSEditor(base) {\n\t\t\treturn base != '' ? base + '<script>delete generated_the_wcmp; if(typeof generate_the_wcmp!=\"undefined\")generate_the_wcmp();</script>' : base;\n\t\t}\n\t}, {\n\t\tkey: 'componentDidMount',\n\t\tvalue: function componentDidMount() {\n\n\t\t\tvar shortcode = this.addFormGeneratorForVSEditor(this.getTheShortcode(this.props.atts));\n\t\t\t(0, _get3.default.default)(WCMPplaylistElement.prototype.__proto__ || (0, _getPrototypeOf2.default)(WCMPplaylistElement.prototype), 'updateShortcodeToHtml', this).call(this, shortcode, this.refs.vcvhelper);\n\t\t\tif (!window.wp || !window.wp.shortcode || !window.VCV_API_WPBAKERY_WPB_MAP) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.multipleShortcodesRegex = window.wp.shortcode.regexp(window.VCV_API_WPBAKERY_WPB_MAP().join('|'));\n\t\t\tthis.localShortcodesRegex = new RegExp(this.multipleShortcodesRegex.source);\n\t\t}\n\t}, {\n\t\tkey: 'componentDidUpdate',\n\t\tvalue: function componentDidUpdate(props) {\n\n\t\t\tvar shortcode = this.addFormGeneratorForVSEditor(this.getTheShortcode(this.props.atts));\n\t\t\tvar shortcodeCmp = this.getTheShortcode(props.atts);\n\t\t\t// update only if shortcode changed\n\t\t\tif (shortcode !== shortcodeCmp) {\n\t\t\t\t(0, _get3.default.default)(WCMPplaylistElement.prototype.__proto__ || (0, _getPrototypeOf2.default)(WCMPplaylistElement.prototype), 'updateShortcodeToHtml', this).call(this, shortcode, this.refs.vcvhelper);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'render',\n\t\tvalue: function render() {\n\t\t\tvar _props = this.props,\n\t\t\t id = _props.id,\n\t\t\t atts = _props.atts,\n\t\t\t editor = _props.editor;\n\n\n\t\t\tvar shortcode = this.getTheShortcode(atts);\n\t\t\tvar elementClasses = 'vce-wcmp-playlist';\n\t\t\tvar wrapperClasses = 'vce-wcmp-playlist-wrapper vce';\n\t\t\tvar customProps = {};\n\n\t\t\tvar doAll = this.applyDO('all');\n\n\t\t\treturn _react2.default.createElement(\n\t\t\t\t'div',\n\t\t\t\t(0, _extends3.default.default)({ className: elementClasses }, editor, customProps),\n\t\t\t\t_react2.default.createElement(\n\t\t\t\t\t'div',\n\t\t\t\t\t(0, _extends3.default.default)({ className: wrapperClasses, id: 'el-' + id }, doAll),\n\t\t\t\t\t_react2.default.createElement('style', { className: 'vcvhelper', ref: 'style' }),\n\t\t\t\t\t_react2.default.createElement('div', { className: 'vcvhelper', ref: 'vcvhelper', 'data-vcvs-html': shortcode })\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}]);\n\treturn WCMPplaylistElement;\n}(vcvAPI.elementComponent);\n\nexports.default = WCMPplaylistElement;\n\n//# sourceURL=webpack:///./WCMPplaylist/component.js?");
12
 
13
  /***/ }),
14
 
readme.txt CHANGED
@@ -40,6 +40,28 @@ The basic version of the plugin, available for free from the WordPress Directory
40
  * Allows playing the audio files in secure mode to prevent unauthorized downloading of the audio files.
41
  * Allows to define the percent of the audio file's size to be played in secure mode.
42
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  == Installation ==
44
 
45
  **To install Music Player for WooCommerce, follow these steps:**
@@ -204,6 +226,33 @@ Each time save the data of a product, the files for demo are deleted and generat
204
 
205
  == Changelog ==
206
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
207
  = 1.0.161 =
208
 
209
  * Fixes an issue with the players in the WooCommerce products list (backend).
@@ -214,19 +263,19 @@ Each time save the data of a product, the files for demo are deleted and generat
214
 
215
  = 1.0.159 =
216
 
217
- * Implements the integration with the 'Themify WooCommerce Product Filter' plugin By Themify.
218
 
219
  = 1.0.158 =
220
 
221
- * Implements the integration with the 'YITH WooCommerce Ajax Product Filter' plugin By YITH.
222
 
223
  = 1.0.157 =
224
 
225
- * Implements the integration with the 'WOOF Products Filter for WooCommerce' plugin By realmag777.
226
 
227
  = 1.0.156 =
228
 
229
- * Implements the integration with the 'Product Filter by WooBeWoo' plugin.
230
 
231
  = 1.0.155 =
232
 
40
  * Allows playing the audio files in secure mode to prevent unauthorized downloading of the audio files.
41
  * Allows to define the percent of the audio file's size to be played in secure mode.
42
 
43
+ **Supports integration with plugins:**
44
+
45
+ * WooCommerce
46
+ * Dokan
47
+ * WCFM - Marketplace
48
+ * WC Vendors
49
+ * Advanced AJAX Product Filters by berocket
50
+ * Load More Products for WooCommerce by berocket
51
+ * Themify - WooCommerce Product Filter by Themify
52
+ * YITH WooCommerce Ajax Product Filter by YITH
53
+ * WOOF - Products Filter for WooCommerce by realmag777
54
+ * Product Filter by WooBeWoo
55
+
56
+ Support post_type like auctions, included by third-party plugins.
57
+
58
+ And third-party players like:
59
+
60
+ * Compact Audio Player
61
+ * CP Media Player
62
+ * HTML5 Audio Player
63
+ * MP3 jPlayer
64
+
65
  == Installation ==
66
 
67
  **To install Music Player for WooCommerce, follow these steps:**
226
 
227
  == Changelog ==
228
 
229
+ = 1.0.167 =
230
+
231
+ * Include the purchased_times attribute in the playlist shortcode to show how many times a product has been purchased.
232
+
233
+ = 1.0.166 =
234
+
235
+ * It checks if WooCommerce is installed before running the player's code.
236
+
237
+ = 1.0.165 =
238
+
239
+ * Includes a new validation rule to prevent conflicts with third-party plugins.
240
+ * Fixes a conflict with PHP 8.1.1
241
+
242
+ = 1.0.164 =
243
+
244
+ * Implements the integration with the 'Load More Products for WooCommerce' plugin by berocket.
245
+
246
+ = 1.0.163 =
247
+
248
+ * Enables the player in the products titles by default.
249
+ * Fixes an issue in the integration with the latest version of Visual Composer.
250
+ * Modifies the integration with the other pages builders.
251
+
252
+ = 1.0.162 =
253
+
254
+ * Implements the integration with the 'Advanced AJAX Product Filters' plugin by berocket.
255
+
256
  = 1.0.161 =
257
 
258
  * Fixes an issue with the players in the WooCommerce products list (backend).
263
 
264
  = 1.0.159 =
265
 
266
+ * Implements the integration with the 'Themify - WooCommerce Product Filter' plugin by Themify.
267
 
268
  = 1.0.158 =
269
 
270
+ * Implements the integration with the 'YITH WooCommerce Ajax Product Filter' plugin by YITH.
271
 
272
  = 1.0.157 =
273
 
274
+ * Implements the integration with the 'WOOF - Products Filter for WooCommerce' plugin by realmag777.
275
 
276
  = 1.0.156 =
277
 
278
+ * Implements the integration with the 'Product Filter' plugin by WooBeWoo.
279
 
280
  = 1.0.155 =
281
 
views/global_options.php CHANGED
@@ -10,7 +10,7 @@ $force_main_player_in_title = $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_a
10
  $ios_controls = $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr( '_wcmp_ios_controls', false );
11
  $troubleshoot_onload = $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr( '_wcmp_onload', false );
12
  $include_main_player_hook = trim($GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr('_wcmp_main_player_hook', ''));
13
- $main_player_hook_title = trim($GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr('_wcmp_main_player_hook_title', ''));
14
  $include_all_players_hook = trim($GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr('_wcmp_all_players_hook', ''));
15
 
16
  $enable_player = $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr( '_wcmp_enable_player', false );
@@ -36,6 +36,7 @@ $on_cover = intval( $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr( '_w
36
  $analytics_property = $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr( '_wcmp_analytics_property', '' );
37
  $registered_only = $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr( '_wcmp_registered_only', 0 );
38
  $fade_out = $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr( '_wcmp_fade_out', 1 );
 
39
  ?>
40
  <h1><?php _e('Music Player for WooCommerce - Global Settings', 'music-player-for-woocommerce'); ?></h1>
41
  <div style="border:1px solid #E6DB55;margin-bottom:10px;padding:5px;background-color: #FFFFE0;">
@@ -86,6 +87,12 @@ _e(
86
  <td width="30%"><?php _e( 'Apply fade out to playing audio when possible', 'music-player-for-woocommerce' ); ?></td>
87
  <td><input aria-label="<?php print esc_attr(__('Apply fade out to playing audio when possible', 'music-player-for-woocommerce')); ?>" type="checkbox" name="_wcmp_fade_out" <?php print(($fade_out) ? 'CHECKED' : '' ); ?> /></td>
88
  </tr>
 
 
 
 
 
 
89
  <tr>
90
  <td colspan="2" style="color:red;"><?php _e( 'The general settings affect only the PRO version of the plugin', 'music-player-for-woocommerce'); ?>. <a target="_blank" href="https://wcmp.dwbooster.com"><?php _e('CLICK HERE TO GET THE PRO VERSION OF THE PLUGIN', 'music-player-for-woocommerce'); ?></a></td>
91
  </tr>
10
  $ios_controls = $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr( '_wcmp_ios_controls', false );
11
  $troubleshoot_onload = $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr( '_wcmp_onload', false );
12
  $include_main_player_hook = trim($GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr('_wcmp_main_player_hook', ''));
13
+ $main_player_hook_title = trim($GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr('_wcmp_main_player_hook_title', 1));
14
  $include_all_players_hook = trim($GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr('_wcmp_all_players_hook', ''));
15
 
16
  $enable_player = $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr( '_wcmp_enable_player', false );
36
  $analytics_property = $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr( '_wcmp_analytics_property', '' );
37
  $registered_only = $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr( '_wcmp_registered_only', 0 );
38
  $fade_out = $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr( '_wcmp_fade_out', 1 );
39
+ $purchased_times_text = $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr( '_wcmp_purchased_times_text', '- purchased %d time(s)' );
40
  ?>
41
  <h1><?php _e('Music Player for WooCommerce - Global Settings', 'music-player-for-woocommerce'); ?></h1>
42
  <div style="border:1px solid #E6DB55;margin-bottom:10px;padding:5px;background-color: #FFFFE0;">
87
  <td width="30%"><?php _e( 'Apply fade out to playing audio when possible', 'music-player-for-woocommerce' ); ?></td>
88
  <td><input aria-label="<?php print esc_attr(__('Apply fade out to playing audio when possible', 'music-player-for-woocommerce')); ?>" type="checkbox" name="_wcmp_fade_out" <?php print(($fade_out) ? 'CHECKED' : '' ); ?> /></td>
89
  </tr>
90
+ <tr>
91
+ <td width="30%"><?php _e( 'Text for product purchased times in playlists', 'music-player-for-woocommerce' ); ?></td>
92
+ <td><input aria-label="<?php print esc_attr(__('Purchased times text', 'music-player-for-woocommerce')); ?>" type="text" name="_wcmp_purchased_times_text" value="<?php print esc_attr($purchased_times_text);?>" style="width:100%;" /><br>
93
+ <i><?php _e('Texts to display when the playlist shortcode includes the purchased_times attribute.<br>Ex.', 'music-player-for-woocommerce'); ?>[wcmp-playlist products_ids="*" controls="track" purchased_times="1"]</i>
94
+ </td>
95
+ </tr>
96
  <tr>
97
  <td colspan="2" style="color:red;"><?php _e( 'The general settings affect only the PRO version of the plugin', 'music-player-for-woocommerce'); ?>. <a target="_blank" href="https://wcmp.dwbooster.com"><?php _e('CLICK HERE TO GET THE PRO VERSION OF THE PLUGIN', 'music-player-for-woocommerce'); ?></a></td>
98
  </tr>
wcmp.php CHANGED
@@ -2,7 +2,7 @@
2
  /*
3
  Plugin Name: Music Player for WooCommerce
4
  Plugin URI: https://wcmp.dwbooster.com
5
- Version: 1.0.161
6
  Text Domain: music-player-for-woocommerce
7
  Author: CodePeople
8
  Author URI: https://wcmp.dwbooster.com
@@ -59,18 +59,9 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
59
  register_activation_hook( __FILE__, array( &$this, 'activation' ) );
60
  register_deactivation_hook( __FILE__, array( &$this, 'deactivation' ) );
61
 
62
- $this->_init_force_in_title();
63
-
64
- add_action( 'plugins_loaded', array(&$this, 'load_textdomain') );
65
  add_action('init', array(&$this, 'init'));
66
  add_action('admin_init', array(&$this, 'admin_init'), 99);
67
- add_filter( 'the_title', array(&$this, 'include_main_player_filter'), 11, 2);
68
-
69
- $this->_load_addons();
70
-
71
- // Integration with the content editors
72
- require_once dirname(__FILE__).'/pagebuilders/builders.php';
73
- WCMP_BUILDERS::run();
74
  } // End __constructor
75
 
76
  public function activation()
@@ -84,9 +75,18 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
84
  $this->_deleteDir( $this->_files_directory_path );
85
  }
86
 
87
- public function load_textdomain()
88
  {
 
89
  load_plugin_textdomain( 'music-player-for-woocommerce', FALSE, basename( dirname( __FILE__ ) ) . '/languages/' );
 
 
 
 
 
 
 
 
90
  }
91
 
92
  public function get_product_attr( $product_id, $attr, $default = false )
@@ -253,6 +253,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
253
  // Save the player settings
254
  $registered_only = (isset($_REQUEST['_wcmp_registered_only'])) ? 1 : 0;
255
  $fade_out = (isset($_REQUEST['_wcmp_fade_out'])) ? 1 : 0;
 
256
  $troubleshoot_default_extension = (isset($_REQUEST['_wcmp_default_extension'])) ? true : false;
257
  $force_main_player_in_title = (isset($_REQUEST['_wcmp_force_main_player_in_title'])) ? 1 : 0;
258
  $ios_controls = (isset($_REQUEST['_wcmp_ios_controls'])) ? true : false;
@@ -288,6 +289,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
288
  $global_settings = array(
289
  '_wcmp_registered_only' => $registered_only,
290
  '_wcmp_fade_out' => $fade_out,
 
291
  '_wcmp_enable_player' => $enable_player,
292
  '_wcmp_show_in' => $show_in,
293
  '_wcmp_players_in_cart' => $players_in_cart,
@@ -431,7 +433,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
431
  wp_enqueue_style( 'wcmp-style', plugin_dir_url(__FILE__).'css/style.css' );
432
  wp_enqueue_script('jquery');
433
  wp_enqueue_script('wp-mediaelement');
434
- wp_enqueue_script('wcmp-script', plugin_dir_url(__FILE__).'js/public.js', array('jquery', 'wp-mediaelement'), '1.0.161');
435
 
436
  $play_all = $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr(
437
  '_wcmp_play_all',
@@ -479,6 +481,19 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
479
  public function replace_playlist_shortcode($atts)
480
  {
481
  if(!class_exists('woocommerce')) return '';
 
 
 
 
 
 
 
 
 
 
 
 
 
482
  global $post;
483
 
484
  $output = '';
@@ -525,7 +540,8 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
525
  'volume' => 1,
526
  'hide_purchase_buttons' => 0,
527
  'class' => '',
528
- 'loop' => 0
 
529
  ),
530
  $atts
531
  )
@@ -534,6 +550,12 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
534
  // Typecasting variables.
535
  $cover = @intval($cover);
536
  $volume = @floatval($volume);
 
 
 
 
 
 
537
 
538
  // get the produts ids
539
  $products_ids = preg_replace( '/[^\d\,\*]/', '', $products_ids);
@@ -572,7 +594,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
572
  if(empty($customer_orders)) return $output;
573
 
574
  // LOOP THROUGH ORDERS AND GET PRODUCT IDS
575
- $product_ids = array();
576
 
577
  foreach($customer_orders as $customer_order)
578
  {
@@ -581,14 +603,14 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
581
  foreach($items as $item)
582
  {
583
  $product_id = $item->get_product_id();
584
- $product_ids[] = $product_id;
585
  }
586
  }
587
- $product_ids = array_unique( $product_ids );
588
- $product_ids_str = implode( ",", $product_ids );
589
 
590
- $query .= ' AND posts.ID IN ('.$product_ids_str.')';
591
- $query .= ' ORDER BY FIELD(posts.ID,'.$product_ids_str.')';
592
  }
593
  else
594
  {
@@ -607,6 +629,19 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
607
 
608
  if( !empty( $products ) )
609
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
610
  // Enqueue resources
611
 
612
  $this->enqueue_resources();
@@ -618,7 +653,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
618
  array('continue_playing' => $continue_playing)
619
  );
620
  $counter = 0;
621
- $output .= '<div data-loop="'.(is_numeric($loop) && intval($loop) ? 1 : 0).'">';
622
  foreach( $products as $product )
623
  {
624
  $product_obj = wc_get_product( $product->ID );
@@ -642,10 +677,18 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
642
  <div class="wcmp-widget-product controls-'.esc_attr($controls).' '.esc_attr($class).' '.esc_attr( $row_class ).' '.esc_attr( ( $product->ID == $current_post_id && $highlight_current_product) ? 'wcmp-current-product' : '' ).'">
643
  <div class="wcmp-widget-product-header">
644
  <div class="wcmp-widget-product-title">
645
- <a href="'.esc_url( get_permalink( $product->ID ) ).'">'.$product_obj->get_name().'</a>
646
- </div><!-- product title -->
 
 
 
 
 
 
 
 
647
  ';
648
- if(@floatval($price) != 0 && @intval($hide_purchase_buttons) == 0)
649
  {
650
  $output .= '<div class="wcmp-widget-product-purchase">
651
  '.wc_price($product_obj->get_price(), '').' <a href="?add-to-cart='.$product->ID.'"></a>
@@ -730,7 +773,16 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
730
  );
731
  $file_title = esc_html(apply_filters('wcmp_widget_file_name', ( ( !empty( $file[ 'name' ] ) ) ? $file[ 'name' ] : $product->post_title ),$product->ID, $index));
732
 
733
- $output .= '<li class="wcmp-widget-playlist-item">'.$audio_tag.'<a href="'.esc_url( get_permalink( $product->ID ) ).'">'.$file_title.'</a><div style="clear:both;"/></li>';
 
 
 
 
 
 
 
 
 
734
  }
735
  if(!empty($featured_image))
736
  {
@@ -821,7 +873,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
821
  if($this->_force_hook_title)
822
  {
823
  try{
824
- if(!is_admin() && !is_product() && !is_cart() && !is_page('cart') && !is_checkout() && is_int($id))
825
  {
826
  $p = wc_get_product($id);
827
  if(!empty($p))
@@ -850,8 +902,8 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
850
 
851
  $show_in = $this->get_product_attr( $id, '_wcmp_show_in', 'all' );
852
  if(
853
- ($show_in == 'single' && !is_product()) ||
854
- ($show_in == 'multiple' && is_product() && get_queried_object_id() == $id)
855
  ) return;
856
  $preload = $this->get_product_attr($id, '_wcmp_preload', '');
857
  $this->enqueue_resources();
@@ -1033,7 +1085,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
1033
 
1034
  private function _init_force_in_title()
1035
  {
1036
- $this->_force_hook_title = $this->get_global_attr('_wcmp_main_player_hook_title', 0);
1037
 
1038
  // Integration with "WOOF – Products Filter for WooCommerce" by realmag777
1039
  if(isset($_REQUEST['action']) && $_REQUEST['action'] == 'woof_draw_products') $this->_force_hook_title = 1;
2
  /*
3
  Plugin Name: Music Player for WooCommerce
4
  Plugin URI: https://wcmp.dwbooster.com
5
+ Version: 1.0.167
6
  Text Domain: music-player-for-woocommerce
7
  Author: CodePeople
8
  Author URI: https://wcmp.dwbooster.com
59
  register_activation_hook( __FILE__, array( &$this, 'activation' ) );
60
  register_deactivation_hook( __FILE__, array( &$this, 'deactivation' ) );
61
 
62
+ add_action('plugins_loaded', array(&$this, 'plugins_loaded'));
 
 
63
  add_action('init', array(&$this, 'init'));
64
  add_action('admin_init', array(&$this, 'admin_init'), 99);
 
 
 
 
 
 
 
65
  } // End __constructor
66
 
67
  public function activation()
75
  $this->_deleteDir( $this->_files_directory_path );
76
  }
77
 
78
+ public function plugins_loaded()
79
  {
80
+ if(!class_exists('woocommerce')) return;
81
  load_plugin_textdomain( 'music-player-for-woocommerce', FALSE, basename( dirname( __FILE__ ) ) . '/languages/' );
82
+
83
+ add_filter('the_title', array(&$this, 'include_main_player_filter'), 11, 2);
84
+ $this->_init_force_in_title();
85
+ $this->_load_addons();
86
+
87
+ // Integration with the content editors
88
+ require_once dirname(__FILE__).'/pagebuilders/builders.php';
89
+ WCMP_BUILDERS::run();
90
  }
91
 
92
  public function get_product_attr( $product_id, $attr, $default = false )
253
  // Save the player settings
254
  $registered_only = (isset($_REQUEST['_wcmp_registered_only'])) ? 1 : 0;
255
  $fade_out = (isset($_REQUEST['_wcmp_fade_out'])) ? 1 : 0;
256
+ $purchased_times_text = sanitize_text_field($_REQUEST['_wcmp_purchased_times_text']);
257
  $troubleshoot_default_extension = (isset($_REQUEST['_wcmp_default_extension'])) ? true : false;
258
  $force_main_player_in_title = (isset($_REQUEST['_wcmp_force_main_player_in_title'])) ? 1 : 0;
259
  $ios_controls = (isset($_REQUEST['_wcmp_ios_controls'])) ? true : false;
289
  $global_settings = array(
290
  '_wcmp_registered_only' => $registered_only,
291
  '_wcmp_fade_out' => $fade_out,
292
+ '_wcmp_purchased_times_text' => $purchased_times_text,
293
  '_wcmp_enable_player' => $enable_player,
294
  '_wcmp_show_in' => $show_in,
295
  '_wcmp_players_in_cart' => $players_in_cart,
433
  wp_enqueue_style( 'wcmp-style', plugin_dir_url(__FILE__).'css/style.css' );
434
  wp_enqueue_script('jquery');
435
  wp_enqueue_script('wp-mediaelement');
436
+ wp_enqueue_script('wcmp-script', plugin_dir_url(__FILE__).'js/public.js', array('jquery', 'wp-mediaelement'), '1.0.167');
437
 
438
  $play_all = $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr(
439
  '_wcmp_play_all',
481
  public function replace_playlist_shortcode($atts)
482
  {
483
  if(!class_exists('woocommerce')) return '';
484
+
485
+ $get_times = function($product_id, $products_list)
486
+ {
487
+ if(!empty($products_list))
488
+ {
489
+ foreach($products_list as $product)
490
+ {
491
+ if($product->product_id == $product_id) return $product->times;
492
+ }
493
+ }
494
+ return 0;
495
+ };
496
+
497
  global $post;
498
 
499
  $output = '';
540
  'volume' => 1,
541
  'hide_purchase_buttons' => 0,
542
  'class' => '',
543
+ 'loop' => 0,
544
+ 'purchased_times' => 0
545
  ),
546
  $atts
547
  )
550
  // Typecasting variables.
551
  $cover = @intval($cover);
552
  $volume = @floatval($volume);
553
+ $purchased_products = @intval($purchased_products);
554
+ $highlight_current_product = @intval($highlight_current_product);
555
+ $continue_playing = @intval($continue_playing);
556
+ $hide_purchase_buttons = @intval($hide_purchase_buttons);
557
+ $loop = @intval($loop);
558
+ $purchased_times = @intval($purchased_times);
559
 
560
  // get the produts ids
561
  $products_ids = preg_replace( '/[^\d\,\*]/', '', $products_ids);
594
  if(empty($customer_orders)) return $output;
595
 
596
  // LOOP THROUGH ORDERS AND GET PRODUCT IDS
597
+ $products_ids = array();
598
 
599
  foreach($customer_orders as $customer_order)
600
  {
603
  foreach($items as $item)
604
  {
605
  $product_id = $item->get_product_id();
606
+ $products_ids[] = $product_id;
607
  }
608
  }
609
+ $products_ids = array_unique( $products_ids );
610
+ $products_ids_str = implode( ",", $products_ids );
611
 
612
+ $query .= ' AND posts.ID IN ('.$products_ids_str.')';
613
+ $query .= ' ORDER BY FIELD(posts.ID,'.$products_ids_str.')';
614
  }
615
  else
616
  {
629
 
630
  if( !empty( $products ) )
631
  {
632
+ $product_purchased_times = [];
633
+ if($purchased_times)
634
+ {
635
+ $products_ids_str = (is_array($products_ids)) ? implode( ",", $products_ids ) : $products_ids;
636
+
637
+ $product_purchased_times = $wpdb->get_results('SELECT order_itemmeta.meta_value product_id, COUNT(order_itemmeta.meta_value) as times
638
+ FROM
639
+ '.$wpdb->prefix.'posts as orders INNER JOIN '.$wpdb->prefix.'woocommerce_order_items as order_items ON (orders.ID=order_items.order_id)
640
+ INNER JOIN '.$wpdb->prefix.'woocommerce_order_itemmeta as order_itemmeta ON (order_items.order_item_id=order_itemmeta.order_item_id)
641
+ WHERE orders.post_type="shop_order" AND orders.post_status="wc-completed" AND order_itemmeta.meta_key="_product_id" '.( strlen($products_ids_str) && strpos('*', $products_ids_str) === false ? ' AND order_itemmeta.meta_value IN ('.$products_ids_str.')' : '').'
642
+ GROUP BY order_itemmeta.meta_value');
643
+ }
644
+
645
  // Enqueue resources
646
 
647
  $this->enqueue_resources();
653
  array('continue_playing' => $continue_playing)
654
  );
655
  $counter = 0;
656
+ $output .= '<div data-loop="'.($loop ? 1 : 0).'">';
657
  foreach( $products as $product )
658
  {
659
  $product_obj = wc_get_product( $product->ID );
677
  <div class="wcmp-widget-product controls-'.esc_attr($controls).' '.esc_attr($class).' '.esc_attr( $row_class ).' '.esc_attr( ( $product->ID == $current_post_id && $highlight_current_product) ? 'wcmp-current-product' : '' ).'">
678
  <div class="wcmp-widget-product-header">
679
  <div class="wcmp-widget-product-title">
680
+ <a href="'.esc_url( get_permalink( $product->ID ) ).'">'.$product_obj->get_name().'</a>'.
681
+ (
682
+ $purchased_times ?
683
+ '<span class="wcmp-purchased-times">'.
684
+ sprintf(
685
+ __($this->get_global_attr( '_wcmp_purchased_times_text', '- purchased %d time(s)')),
686
+ $get_times($product->ID, $product_purchased_times)
687
+ ).'</span>' : ''
688
+ ).
689
+ '</div><!-- product title -->
690
  ';
691
+ if(@floatval($price) != 0 && $hide_purchase_buttons == 0)
692
  {
693
  $output .= '<div class="wcmp-widget-product-purchase">
694
  '.wc_price($product_obj->get_price(), '').' <a href="?add-to-cart='.$product->ID.'"></a>
773
  );
774
  $file_title = esc_html(apply_filters('wcmp_widget_file_name', ( ( !empty( $file[ 'name' ] ) ) ? $file[ 'name' ] : $product->post_title ),$product->ID, $index));
775
 
776
+ $output .= '<li class="wcmp-widget-playlist-item">'.$audio_tag.'<a href="'.esc_url( get_permalink( $product->ID ) ).'">'.$file_title.'</a>'.
777
+ (
778
+ $purchased_times ?
779
+ '<span class="wcmp-purchased-times">'.
780
+ sprintf(
781
+ __($this->get_global_attr( '_wcmp_purchased_times_text', '- purchased %d time(s)')),
782
+ $get_times($product->ID, $product_purchased_times)
783
+ ).'</span>' : ''
784
+ )
785
+ .'<div style="clear:both;"/></li>';
786
  }
787
  if(!empty($featured_image))
788
  {
873
  if($this->_force_hook_title)
874
  {
875
  try{
876
+ if(!is_admin() && (!function_exists('is_product') || !is_product()) && !is_cart() && !is_page('cart') && !is_checkout() && is_int($id))
877
  {
878
  $p = wc_get_product($id);
879
  if(!empty($p))
902
 
903
  $show_in = $this->get_product_attr( $id, '_wcmp_show_in', 'all' );
904
  if(
905
+ ($show_in == 'single' && (!function_exists('is_product') || !is_product())) ||
906
+ ($show_in == 'multiple' && (function_exists('is_product') && is_product()) && get_queried_object_id() == $id)
907
  ) return;
908
  $preload = $this->get_product_attr($id, '_wcmp_preload', '');
909
  $this->enqueue_resources();
1085
 
1086
  private function _init_force_in_title()
1087
  {
1088
+ $this->_force_hook_title = $this->get_global_attr('_wcmp_main_player_hook_title', 1);
1089
 
1090
  // Integration with "WOOF – Products Filter for WooCommerce" by realmag777
1091
  if(isset($_REQUEST['action']) && $_REQUEST['action'] == 'woof_draw_products') $this->_force_hook_title = 1;
widgets/playlist_widget.php CHANGED
@@ -3,6 +3,7 @@ if(!function_exists('wcmp_register_playlist_widget'))
3
  {
4
  function wcmp_register_playlist_widget()
5
  {
 
6
  return register_widget("WCMP_PLAYLIST_WIDGET");
7
  }
8
  }
3
  {
4
  function wcmp_register_playlist_widget()
5
  {
6
+ if(!class_exists('woocommerce')) return;
7
  return register_widget("WCMP_PLAYLIST_WIDGET");
8
  }
9
  }