Version Description
- Fixes an issue with the players in the WooCommerce products list (backend).
Download this release
Release Info
Developer | codepeople |
Plugin | Music Player for WooCommerce |
Version | 1.0.161 |
Comparing to | |
See all releases |
Code changes from version 1.0.141 to 1.0.161
- addons/ap-compact-audio-player.addon.php +84 -0
- addons/ap-cp-media-player.addon.php +130 -0
- addons/ap-cp-media-player/style.css +1 -0
- addons/ap-html5-audio-player.addon.php +110 -0
- addons/ap-html5-audio-player/style.css +1 -0
- addons/ap-mp3-jplayer.addon.php +91 -0
- addons/ap-mp3-jplayer/style.css +1 -0
- addons/dokan.addon.php +11 -2
- addons/wcfm.addon.php +10 -2
- addons/wcv.addon.php +19 -30
- css/style.css +3 -2
- js/admin.js +29 -0
- js/public.js +13 -12
- js/public_src.js +23 -9
- languages/music-player-for-woocommerce-en_US.mo +0 -0
- languages/music-player-for-woocommerce-en_US.po +242 -172
- pagebuilders/elementor/elementor.pb.php +1 -2
- readme.txt +85 -3
- views/global_options.php +9 -2
- wcmp.php +122 -41
- widgets/playlist_widget/css/style.css +2 -1
addons/ap-compact-audio-player.addon.php
ADDED
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
if(!class_exists('WCMP_COMPACTAUDIOPLAYER_ADDON'))
|
3 |
+
{
|
4 |
+
class WCMP_COMPACTAUDIOPLAYER_ADDON
|
5 |
+
{
|
6 |
+
private $_wcmp;
|
7 |
+
|
8 |
+
function __construct($wcmp)
|
9 |
+
{
|
10 |
+
$this->_wcmp = $wcmp;
|
11 |
+
add_action('wcmp_addon_general_settings', array($this, 'general_settings'));
|
12 |
+
add_action('wcmp_save_setting', array($this, 'save_general_settings'));
|
13 |
+
add_filter('wcmp_audio_tag', array($this, 'generate_player'), 99, 4);
|
14 |
+
add_filter('wcmp_widget_audio_tag', array($this, 'generate_player'), 99, 4);
|
15 |
+
add_filter('wcmp_product_attr', array($this, 'product_attr'), 99, 3);
|
16 |
+
add_filter('wcmp_global_attr', array($this, 'global_attr'), 99, 2);
|
17 |
+
} // End __construct
|
18 |
+
|
19 |
+
private function _player_exists()
|
20 |
+
{
|
21 |
+
return defined('SC_AUDIO_PLUGIN_VERSION');
|
22 |
+
} // End _player_exists
|
23 |
+
|
24 |
+
private function _is_enabled()
|
25 |
+
{
|
26 |
+
return get_option('wcmp_addon_player') == 'compactaudioplayer';
|
27 |
+
} // End _is_enabled
|
28 |
+
|
29 |
+
public function general_settings()
|
30 |
+
{
|
31 |
+
$enabled = ($this->_player_exists() && $this->_is_enabled());
|
32 |
+
|
33 |
+
print '<tr><td><input aria-label="'.esc_attr(__('Use Compact Audio Player instead of the current plugin players','music-player-for-woocommerce')).'" type="radio" value="compactaudioplayer" name="wcmp_addon_player" '.($enabled ? 'CHECKED' : '').($this->_player_exists() ? '' : ' DISABLED').' class="wcmp_radio"></td><td width="100%"><b>'.__('Use "Compact Audio Player" instead of the current plugin players', 'music-player-for-woocommerce').'</b><br><i>'.
|
34 |
+
($this->_player_exists()
|
35 |
+
? __('The player functions configured above do not apply, except for audio protection if applicable.<br>This player <b>will take precedence</b> over the player configured in the products\' settings.', 'music-player-for-woocommerce')
|
36 |
+
: __('The "Compact WP Audio Player" plugin is not installed on your WordPress.', 'music-player-for-woocommerce')
|
37 |
+
)
|
38 |
+
.'</i></td></tr>';
|
39 |
+
} // End general_settings
|
40 |
+
|
41 |
+
public function save_general_settings()
|
42 |
+
{
|
43 |
+
if($this->_player_exists())
|
44 |
+
{
|
45 |
+
if(isset($_POST['wcmp_addon_player'])) update_option('wcmp_addon_player', sanitize_text_field($_POST['wcmp_addon_player']));
|
46 |
+
else delete_option('wcmp_addon_player');
|
47 |
+
}
|
48 |
+
} // End save_general_settings
|
49 |
+
|
50 |
+
public function generate_player($player, $product_id, $file_index, $url)
|
51 |
+
{
|
52 |
+
if($this->_player_exists() && $this->_is_enabled())
|
53 |
+
return do_shortcode('[sc_embed_player fileurl="'.esc_attr($url).'"]');
|
54 |
+
return $player;
|
55 |
+
} // End generate_player
|
56 |
+
|
57 |
+
public function product_attr($value, $product_id, $attribute)
|
58 |
+
{
|
59 |
+
if(
|
60 |
+
!is_admin() &&
|
61 |
+
$this->_player_exists() &&
|
62 |
+
$this->_is_enabled() &&
|
63 |
+
$attribute == '_wcmp_player_controls'
|
64 |
+
) return 'button';
|
65 |
+
|
66 |
+
return $value;
|
67 |
+
} // End product_attr
|
68 |
+
|
69 |
+
public function global_attr($value, $attribute)
|
70 |
+
{
|
71 |
+
if(
|
72 |
+
!is_admin() &&
|
73 |
+
$this->_player_exists() &&
|
74 |
+
$this->_is_enabled() &&
|
75 |
+
$attribute == '_wcmp_player_controls'
|
76 |
+
) return 'button';
|
77 |
+
|
78 |
+
return $value;
|
79 |
+
} // End global_attr
|
80 |
+
|
81 |
+
} // End WCMP_COMPACTAUDIOPLAYER_ADDON
|
82 |
+
}
|
83 |
+
|
84 |
+
new WCMP_COMPACTAUDIOPLAYER_ADDON($wcmp);
|
addons/ap-cp-media-player.addon.php
ADDED
@@ -0,0 +1,130 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
if(!class_exists('WCMP_CPMEDIAPLAYER_ADDON'))
|
3 |
+
{
|
4 |
+
class WCMP_CPMEDIAPLAYER_ADDON
|
5 |
+
{
|
6 |
+
private $_wcmp;
|
7 |
+
|
8 |
+
function __construct($wcmp)
|
9 |
+
{
|
10 |
+
$this->_wcmp = $wcmp;
|
11 |
+
add_action('wcmp_addon_general_settings', array($this, 'general_settings'));
|
12 |
+
add_action('wcmp_save_setting', array($this, 'save_general_settings'));
|
13 |
+
add_filter('wcmp_audio_tag', array($this, 'generate_player'), 99, 4);
|
14 |
+
add_filter('wcmp_widget_audio_tag', array($this, 'generate_player'), 99, 4);
|
15 |
+
add_filter('wcmp_product_attr', array($this, 'product_attr'), 99, 3);
|
16 |
+
add_filter('wcmp_global_attr', array($this, 'global_attr'), 99, 2);
|
17 |
+
} // End __construct
|
18 |
+
|
19 |
+
private function _player_exists()
|
20 |
+
{
|
21 |
+
return defined('CPMP_VERSION');
|
22 |
+
} // End _player_exists
|
23 |
+
|
24 |
+
private function _is_enabled()
|
25 |
+
{
|
26 |
+
return get_option('wcmp_addon_player') == 'cpmediaplayer';
|
27 |
+
} // End _is_enabled
|
28 |
+
|
29 |
+
private function _load_skins($selected_option)
|
30 |
+
{
|
31 |
+
// Skins
|
32 |
+
$options = '';
|
33 |
+
if(defined('CPMP_PLUGIN_DIR'))
|
34 |
+
{
|
35 |
+
$skins = array();
|
36 |
+
$skin_dir = CPMP_PLUGIN_DIR.'/skins';
|
37 |
+
if(file_exists($skin_dir))
|
38 |
+
{
|
39 |
+
$d = dir($skin_dir);
|
40 |
+
while (false !== ($entry = $d->read()))
|
41 |
+
{
|
42 |
+
if($entry != '.' && $entry != '..' && is_dir($skin_dir.'/'.$entry))
|
43 |
+
{
|
44 |
+
$this_skin = $skin_dir.'/'.$entry.'/';
|
45 |
+
if(file_exists($this_skin))
|
46 |
+
{
|
47 |
+
$skin_data = parse_ini_file($this_skin.'config.ini', true);
|
48 |
+
$options .='<option value="'.$skin_data['id'].'" '.($skin_data['id'] == $selected_option ? 'SELECTED' : '').'>'.esc_html($skin_data['name']).'</option>';
|
49 |
+
}
|
50 |
+
}
|
51 |
+
}
|
52 |
+
$d->close();
|
53 |
+
}
|
54 |
+
}
|
55 |
+
return $options;
|
56 |
+
} // End _load_skins
|
57 |
+
|
58 |
+
private function _get_skin()
|
59 |
+
{
|
60 |
+
return get_option('wcmp_cpmediaplayer_addon_skin', 'classic-skin');
|
61 |
+
} // End _get_skin
|
62 |
+
|
63 |
+
private function _set_skin($v)
|
64 |
+
{
|
65 |
+
update_option('wcmp_cpmediaplayer_addon_skin', $v);
|
66 |
+
} // End _set_skin
|
67 |
+
|
68 |
+
public function general_settings()
|
69 |
+
{
|
70 |
+
$enabled = ($this->_player_exists() && $this->_is_enabled());
|
71 |
+
|
72 |
+
print '<tr><td><input aria-label="'.esc_attr(__('Use CP Media Player instead of the current plugin players','music-player-for-woocommerce')).'" type="radio" value="cpmediaplayer" name="wcmp_addon_player" '.($enabled ? 'CHECKED' : '').($this->_player_exists() ? '' : ' DISABLED').' class="wcmp_radio"></td><td width="100%"><b>'.__('Use "CP Media Player" instead of the current plugin players', 'music-player-for-woocommerce').'</b><br>
|
73 |
+
'.__('Select player skin', 'music-player-for-woocommerce').': <select name="wcmp_cpmediaplayer_addon_skin" '.($this->_player_exists() ? '' : ' DISABLED').'>'.$this->_load_skins($this->_get_skin()).'</select>
|
74 |
+
<br><i>'.
|
75 |
+
($this->_player_exists()
|
76 |
+
? __('The player functions configured above do not apply, except for audio protection if applicable.<br>This player <b>will take precedence</b> over the player configured in the products\' settings.', 'music-player-for-woocommerce')
|
77 |
+
: __('The "CP Media Player" plugin is not installed on your WordPress.', 'music-player-for-woocommerce')
|
78 |
+
)
|
79 |
+
.'</i></td></tr>';
|
80 |
+
} // End general_settings
|
81 |
+
|
82 |
+
public function save_general_settings()
|
83 |
+
{
|
84 |
+
if($this->_player_exists())
|
85 |
+
{
|
86 |
+
if(isset($_POST['wcmp_addon_player'])) update_option('wcmp_addon_player', sanitize_text_field($_POST['wcmp_addon_player']));
|
87 |
+
else delete_option('wcmp_addon_player');
|
88 |
+
|
89 |
+
if(isset($_POST['wcmp_cpmediaplayer_addon_skin'])) $this->_set_skin(sanitize_text_field($_POST['wcmp_cpmediaplayer_addon_skin']));
|
90 |
+
}
|
91 |
+
} // End save_general_settings
|
92 |
+
|
93 |
+
public function generate_player($player, $product_id, $file_index, $url)
|
94 |
+
{
|
95 |
+
if($this->_player_exists() && $this->_is_enabled())
|
96 |
+
{
|
97 |
+
wp_enqueue_style('wcmp-ap-cp-media-player-style', plugin_dir_url(__FILE__).'ap-cp-media-player/style.css');
|
98 |
+
return do_shortcode('[cpm-player skin="'.esc_attr($this->_get_skin()).'" playlist="false" type="audio"][cpm-item file="'.esc_attr($url).'"][/cpm-player]');
|
99 |
+
}
|
100 |
+
return $player;
|
101 |
+
} // End generate_player
|
102 |
+
|
103 |
+
public function product_attr($value, $product_id, $attribute)
|
104 |
+
{
|
105 |
+
if(
|
106 |
+
!is_admin() &&
|
107 |
+
$this->_player_exists() &&
|
108 |
+
$this->_is_enabled() &&
|
109 |
+
$attribute == '_wcmp_player_controls'
|
110 |
+
) return 'all';
|
111 |
+
|
112 |
+
return $value;
|
113 |
+
} // End product_attr
|
114 |
+
|
115 |
+
public function global_attr($value, $attribute)
|
116 |
+
{
|
117 |
+
if(
|
118 |
+
!is_admin() &&
|
119 |
+
$this->_player_exists() &&
|
120 |
+
$this->_is_enabled() &&
|
121 |
+
$attribute == '_wcmp_player_controls'
|
122 |
+
) return 'all';
|
123 |
+
|
124 |
+
return $value;
|
125 |
+
} // End global_attr
|
126 |
+
|
127 |
+
} // End WCMP_CPMEDIAPLAYER_ADDON
|
128 |
+
}
|
129 |
+
|
130 |
+
new WCMP_CPMEDIAPLAYER_ADDON($wcmp);
|
addons/ap-cp-media-player/style.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
.wcmp-widget-product .wcmp-widget-product-file{display:block !important;}
|
addons/ap-html5-audio-player.addon.php
ADDED
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
if(!class_exists('WCMP_HTML5AUDIOPLAYER_ADDON'))
|
3 |
+
{
|
4 |
+
class WCMP_HTML5AUDIOPLAYER_ADDON
|
5 |
+
{
|
6 |
+
private $_wcmp;
|
7 |
+
private $_player_flag = false;
|
8 |
+
|
9 |
+
function __construct($wcmp)
|
10 |
+
{
|
11 |
+
$this->_wcmp = $wcmp;
|
12 |
+
add_action('wcmp_addon_general_settings', array($this, 'general_settings'));
|
13 |
+
add_action('wcmp_save_setting', array($this, 'save_general_settings'));
|
14 |
+
add_filter('wcmp_audio_tag', array($this, 'generate_player'), 99, 4);
|
15 |
+
add_filter('wcmp_widget_audio_tag', array($this, 'generate_player'), 99, 4);
|
16 |
+
add_filter('wcmp_product_attr', array($this, 'product_attr'), 99, 3);
|
17 |
+
add_filter('wcmp_global_attr', array($this, 'global_attr'), 99, 2);
|
18 |
+
add_action('wp_footer', array($this, 'add_script'));
|
19 |
+
} // End __construct
|
20 |
+
|
21 |
+
private function _player_exists()
|
22 |
+
{
|
23 |
+
return class_exists('H5APPlayer\Template\Player');
|
24 |
+
} // End _player_exists
|
25 |
+
|
26 |
+
private function _is_enabled()
|
27 |
+
{
|
28 |
+
return get_option('wcmp_addon_player') == 'html5audioplayer';
|
29 |
+
} // End _is_enabled
|
30 |
+
|
31 |
+
public function general_settings()
|
32 |
+
{
|
33 |
+
$enabled = ($this->_player_exists() && $this->_is_enabled());
|
34 |
+
|
35 |
+
print '<tr><td><input aria-label="'.esc_attr(__('Use HTML5 Audio Player instead of the current plugin players','music-player-for-woocommerce')).'" type="radio" value="html5audioplayer" name="wcmp_addon_player" '.($enabled ? 'CHECKED' : '').($this->_player_exists() ? '' : ' DISABLED').' class="wcmp_radio"></td><td width="100%"><b>'.__('Use "HTML5 Audio Player" instead of the current plugin players', 'music-player-for-woocommerce').'</b><br><i>'.
|
36 |
+
($this->_player_exists()
|
37 |
+
? __('The player functions configured above do not apply, except for audio protection if applicable.<br>This player <b>will take precedence</b> over the player configured in the products\' settings.', 'music-player-for-woocommerce')
|
38 |
+
: __('The "HTML5 Audio Player" plugin is not installed on your WordPress.', 'music-player-for-woocommerce')
|
39 |
+
)
|
40 |
+
.'</i></td></tr>';
|
41 |
+
} // End general_settings
|
42 |
+
|
43 |
+
public function save_general_settings()
|
44 |
+
{
|
45 |
+
if($this->_player_exists())
|
46 |
+
{
|
47 |
+
if(isset($_POST['wcmp_addon_player'])) update_option('wcmp_addon_player', sanitize_text_field($_POST['wcmp_addon_player']));
|
48 |
+
else delete_option('wcmp_addon_player');
|
49 |
+
}
|
50 |
+
} // End save_general_settings
|
51 |
+
|
52 |
+
public function generate_player($player, $product_id, $file_index, $url)
|
53 |
+
{
|
54 |
+
if($this->_player_exists() && $this->_is_enabled())
|
55 |
+
{
|
56 |
+
wp_enqueue_style('wcmp-ap-html5-audio-player-style', plugin_dir_url(__FILE__).'ap-html5-audio-player/style.css');
|
57 |
+
$this->_player_flag = true;
|
58 |
+
$d = '';
|
59 |
+
if(preg_match('/data-duration="[^"]+"/', $player,$matches))
|
60 |
+
{
|
61 |
+
$d = $matches[0];
|
62 |
+
}
|
63 |
+
|
64 |
+
return str_replace('<audio', '<audio '.$d.' ', H5APPlayer\Template\Player::html(
|
65 |
+
[
|
66 |
+
'template' => [
|
67 |
+
'attr' => '',
|
68 |
+
'width' => 'auto',
|
69 |
+
'source' => $url
|
70 |
+
]
|
71 |
+
]
|
72 |
+
));
|
73 |
+
}
|
74 |
+
return $player;
|
75 |
+
} // End generate_player
|
76 |
+
|
77 |
+
public function product_attr($value, $product_id, $attribute)
|
78 |
+
{
|
79 |
+
if(
|
80 |
+
!is_admin() &&
|
81 |
+
$this->_player_exists() &&
|
82 |
+
$this->_is_enabled() &&
|
83 |
+
$attribute == '_wcmp_player_controls'
|
84 |
+
) return 'all';
|
85 |
+
|
86 |
+
return $value;
|
87 |
+
} // End product_attr
|
88 |
+
|
89 |
+
public function global_attr($value, $attribute)
|
90 |
+
{
|
91 |
+
if(
|
92 |
+
!is_admin() &&
|
93 |
+
$this->_player_exists() &&
|
94 |
+
$this->_is_enabled() &&
|
95 |
+
$attribute == '_wcmp_player_controls'
|
96 |
+
) return 'all';
|
97 |
+
|
98 |
+
return $value;
|
99 |
+
} // End global_attr
|
100 |
+
|
101 |
+
public function add_script()
|
102 |
+
{
|
103 |
+
if($this->_player_flag)
|
104 |
+
print '<script>jQuery("audio[data-duration]").on("timeupdate", function(){var d = jQuery(this).data("duration"), c = jQuery(this).closest(".plyr--audio"); if(c.length) c.find(".plyr__time--duration").html(d);})</script>';
|
105 |
+
} // End add_script
|
106 |
+
|
107 |
+
} // End WCMP_HTML5AUDIOPLAYER_ADDON
|
108 |
+
}
|
109 |
+
|
110 |
+
new WCMP_HTML5AUDIOPLAYER_ADDON($wcmp);
|
addons/ap-html5-audio-player/style.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
.wcmp-widget-product .wcmp-widget-product-file{display:block !important;}
|
addons/ap-mp3-jplayer.addon.php
ADDED
@@ -0,0 +1,91 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
if(!class_exists('WCMP_MP3JPLAYER_ADDON'))
|
3 |
+
{
|
4 |
+
class WCMP_MP3JPLAYER_ADDON
|
5 |
+
{
|
6 |
+
private $_wcmp;
|
7 |
+
|
8 |
+
function __construct($wcmp)
|
9 |
+
{
|
10 |
+
$this->_wcmp = $wcmp;
|
11 |
+
add_action('wcmp_addon_general_settings', array($this, 'general_settings'));
|
12 |
+
add_action('wcmp_save_setting', array($this, 'save_general_settings'));
|
13 |
+
add_filter('wcmp_audio_tag', array($this, 'generate_player'), 99, 4);
|
14 |
+
add_filter('wcmp_widget_audio_tag', array($this, 'generate_player'), 99, 4);
|
15 |
+
add_filter('wcmp_product_attr', array($this, 'product_attr'), 99, 3);
|
16 |
+
add_filter('wcmp_global_attr', array($this, 'global_attr'), 99, 2);
|
17 |
+
} // End __construct
|
18 |
+
|
19 |
+
private function _player_exists()
|
20 |
+
{
|
21 |
+
return class_exists('MP3j_Front');
|
22 |
+
} // End _player_exists
|
23 |
+
|
24 |
+
private function _is_enabled()
|
25 |
+
{
|
26 |
+
return get_option('wcmp_addon_player') == 'mp3jplayer';
|
27 |
+
} // End _is_enabled
|
28 |
+
|
29 |
+
public function general_settings()
|
30 |
+
{
|
31 |
+
$enabled = ($this->_player_exists() && $this->_is_enabled());
|
32 |
+
|
33 |
+
print '<tr><td><input aria-label="'.esc_attr(__('Use MP3 jPlayer instead of the current plugin players','music-player-for-woocommerce')).'" type="radio" value="mp3jplayer" name="wcmp_addon_player" '.($enabled ? 'CHECKED' : '').($this->_player_exists() ? '' : ' DISABLED').' class="wcmp_radio"></td><td width="100%"><b>'.__('Use "MP3 jPlayer" instead of the current plugin players', 'music-player-for-woocommerce').'</b><br><i>'.
|
34 |
+
($this->_player_exists()
|
35 |
+
? __('The player functions configured above do not apply, except for audio protection if applicable.<br>This player <b>will take precedence</b> over the player configured in the products\' settings.', 'music-player-for-woocommerce')
|
36 |
+
: __('The "MP3 jPlayer" plugin is not installed on your WordPress.', 'music-player-for-woocommerce')
|
37 |
+
)
|
38 |
+
.'</i></td></tr>';
|
39 |
+
} // End general_settings
|
40 |
+
|
41 |
+
public function save_general_settings()
|
42 |
+
{
|
43 |
+
if($this->_player_exists())
|
44 |
+
{
|
45 |
+
if(isset($_POST['wcmp_addon_player'])) update_option('wcmp_addon_player', sanitize_text_field($_POST['wcmp_addon_player']));
|
46 |
+
else delete_option('wcmp_addon_player');
|
47 |
+
}
|
48 |
+
} // End save_general_settings
|
49 |
+
|
50 |
+
public function generate_player($player, $product_id, $file_index, $url)
|
51 |
+
{
|
52 |
+
if($this->_player_exists() && $this->_is_enabled())
|
53 |
+
{
|
54 |
+
wp_enqueue_style('wcmp-ap-mp3-jplayer-style', plugin_dir_url(__FILE__).'ap-mp3-jplayer/style.css');
|
55 |
+
if(!preg_match('/^http(s?)\:/i', $url))
|
56 |
+
$url = 'http'.(is_ssl() ? 's' : '' ).'://'.$_SERVER['HTTP_HOST'].$url;
|
57 |
+
if(!preg_match('/\.mp3$/i', $url))
|
58 |
+
$url .= (strpos($url, '?') === false ? '?' : '&').'file.mp3';
|
59 |
+
return do_shortcode('[mp3-jplayer tracks="'.str_replace('"', '\"', $url).'" title="" width="100%" style="fullbars notitle nopopoutbutton" height="30px"]');
|
60 |
+
}
|
61 |
+
return $player;
|
62 |
+
} // End generate_player
|
63 |
+
|
64 |
+
public function product_attr($value, $product_id, $attribute)
|
65 |
+
{
|
66 |
+
if(
|
67 |
+
!is_admin() &&
|
68 |
+
$this->_player_exists() &&
|
69 |
+
$this->_is_enabled() &&
|
70 |
+
$attribute == '_wcmp_player_controls'
|
71 |
+
) return 'all';
|
72 |
+
|
73 |
+
return $value;
|
74 |
+
} // End product_attr
|
75 |
+
|
76 |
+
public function global_attr($value, $attribute)
|
77 |
+
{
|
78 |
+
if(
|
79 |
+
!is_admin() &&
|
80 |
+
$this->_player_exists() &&
|
81 |
+
$this->_is_enabled() &&
|
82 |
+
$attribute == '_wcmp_player_controls'
|
83 |
+
) return 'all';
|
84 |
+
|
85 |
+
return $value;
|
86 |
+
} // End global_attr
|
87 |
+
|
88 |
+
} // End WCMP_MP3JPLAYER_ADDON
|
89 |
+
}
|
90 |
+
|
91 |
+
new WCMP_MP3JPLAYER_ADDON($wcmp);
|
addons/ap-mp3-jplayer/style.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
.wcmp-widget-product .wcmp-widget-product-file{display:block !important;}
|
addons/dokan.addon.php
CHANGED
@@ -9,7 +9,7 @@ if(!class_exists('WCMP_DOKAN_ADDON'))
|
|
9 |
{
|
10 |
$this->_wcmp = $wcmp;
|
11 |
|
12 |
-
if(get_option('wcmp_dokan_enabled', 1))
|
13 |
{
|
14 |
add_action('dokan_product_edit_after_main',array($this, 'product_settings'));
|
15 |
add_action('dokan_process_product_meta',array($this, 'save_product_settings'));
|
@@ -22,22 +22,31 @@ if(!class_exists('WCMP_DOKAN_ADDON'))
|
|
22 |
public function general_settings()
|
23 |
{
|
24 |
$wcmp_dokan_enabled = get_option('wcmp_dokan_enabled', 1);
|
25 |
-
|
|
|
|
|
26 |
} // End general_setting
|
27 |
|
28 |
public function save_general_settings()
|
29 |
{
|
30 |
update_option('wcmp_dokan_enabled', (!empty($_POST['wcmp_dokan_enabled'])) ? 1 : 0);
|
|
|
31 |
} // End save_general_settings
|
32 |
|
33 |
public function product_settings()
|
34 |
{
|
|
|
|
|
|
|
35 |
wp_enqueue_style('wcmp-dokan', plugin_dir_url(__FILE__).'dokan/style.css');
|
36 |
include dirname(__FILE__).'/dokan/player_options.php';
|
37 |
} // End product_settings
|
38 |
|
39 |
public function save_product_settings($post_id)
|
40 |
{
|
|
|
|
|
|
|
41 |
$post = get_post($post_id);
|
42 |
$this->_wcmp->save_post($post_id, $post, true);
|
43 |
} // End save_product_settings
|
9 |
{
|
10 |
$this->_wcmp = $wcmp;
|
11 |
|
12 |
+
if(get_option('wcmp_dokan_enabled', 1) && !get_option('wcmp_dokan_hide_settings', 0))
|
13 |
{
|
14 |
add_action('dokan_product_edit_after_main',array($this, 'product_settings'));
|
15 |
add_action('dokan_process_product_meta',array($this, 'save_product_settings'));
|
22 |
public function general_settings()
|
23 |
{
|
24 |
$wcmp_dokan_enabled = get_option('wcmp_dokan_enabled', 1);
|
25 |
+
$wcmp_dokan_hide_settings = get_option('wcmp_dokan_hide_settings', 0);
|
26 |
+
print '<tr><td><input aria-label="'.esc_attr(__('Activate the Dokan add-on','music-player-for-woocommerce')).'" type="checkbox" name="wcmp_dokan_enabled" '.($wcmp_dokan_enabled ? 'CHECKED' : '').'></td><td width="100%"><b>'.__('Activate the Dokan add-on', 'music-player-for-woocommerce').'</b><br><i>'.__('If the "Dokan Multivendor" plugin is installed on the website, check the checkbox to allow vendors to configure their music players.', 'music-player-for-woocommerce').'</i><br><br>
|
27 |
+
<input type="checkbox" aria-label="'.esc_attr(__('Hide settings', 'music-player-for-woocommerce')).'" name="wcmp_dokan_hide_settings" '.($wcmp_dokan_hide_settings ? 'CHECKED' : '').'> '.__('Hides the players settings from vendors interface.', 'music-player-for-woocommerce').'</td></tr>';
|
28 |
} // End general_setting
|
29 |
|
30 |
public function save_general_settings()
|
31 |
{
|
32 |
update_option('wcmp_dokan_enabled', (!empty($_POST['wcmp_dokan_enabled'])) ? 1 : 0);
|
33 |
+
update_option('wcmp_dokan_hide_settings', (!empty($_POST['wcmp_dokan_hide_settings'])) ? 1 : 0);
|
34 |
} // End save_general_settings
|
35 |
|
36 |
public function product_settings()
|
37 |
{
|
38 |
+
global $wcmp_dokan_flag;
|
39 |
+
$wcmp_dokan_flag = true;
|
40 |
+
|
41 |
wp_enqueue_style('wcmp-dokan', plugin_dir_url(__FILE__).'dokan/style.css');
|
42 |
include dirname(__FILE__).'/dokan/player_options.php';
|
43 |
} // End product_settings
|
44 |
|
45 |
public function save_product_settings($post_id)
|
46 |
{
|
47 |
+
global $wcmp_dokan_flag;
|
48 |
+
$wcmp_dokan_flag = true;
|
49 |
+
|
50 |
$post = get_post($post_id);
|
51 |
$this->_wcmp->save_post($post_id, $post, true);
|
52 |
} // End save_product_settings
|
addons/wcfm.addon.php
CHANGED
@@ -9,7 +9,7 @@ if(!class_exists('WCMP_WCFM_ADDON'))
|
|
9 |
{
|
10 |
$this->_wcmp = $wcmp;
|
11 |
|
12 |
-
if(get_option('wcmp_wcfm_enabled', 1))
|
13 |
{
|
14 |
add_action('after_wcfm_products_downloadable',array($this, 'product_settings'), 10, 2);
|
15 |
add_action('save_post_product', array($this, 'save_product_settings'), 10, 3);
|
@@ -22,16 +22,22 @@ if(!class_exists('WCMP_WCFM_ADDON'))
|
|
22 |
public function general_settings()
|
23 |
{
|
24 |
$wcmp_wcfm_enabled = get_option('wcmp_wcfm_enabled', 1);
|
25 |
-
|
|
|
|
|
26 |
} // End general_settings
|
27 |
|
28 |
public function save_general_settings()
|
29 |
{
|
30 |
update_option('wcmp_wcfm_enabled', (!empty($_POST['wcmp_wcfm_enabled'])) ? 1 : 0);
|
|
|
31 |
} // End save_general_settings
|
32 |
|
33 |
public function product_settings($product_id, $product_type)
|
34 |
{
|
|
|
|
|
|
|
35 |
$post = get_post( $product_id );
|
36 |
wp_enqueue_style('wcmp-wcfm-css', plugin_dir_url(__FILE__).'wcfm/style.css');
|
37 |
wp_enqueue_script('wcmp-wcfm-js', plugin_dir_url(__FILE__).'wcfm/script.js');
|
@@ -54,6 +60,8 @@ if(!class_exists('WCMP_WCFM_ADDON'))
|
|
54 |
{
|
55 |
if(!empty($_POST['wcfm_products_manage_form']))
|
56 |
{
|
|
|
|
|
57 |
$arr = wp_parse_args($_POST['wcfm_products_manage_form']);
|
58 |
if(!empty($arr))
|
59 |
{
|
9 |
{
|
10 |
$this->_wcmp = $wcmp;
|
11 |
|
12 |
+
if(get_option('wcmp_wcfm_enabled', 1) && !get_option('wcmp_wcfm_hide_settings', 0))
|
13 |
{
|
14 |
add_action('after_wcfm_products_downloadable',array($this, 'product_settings'), 10, 2);
|
15 |
add_action('save_post_product', array($this, 'save_product_settings'), 10, 3);
|
22 |
public function general_settings()
|
23 |
{
|
24 |
$wcmp_wcfm_enabled = get_option('wcmp_wcfm_enabled', 1);
|
25 |
+
$wcmp_wcfm_hide_settings = get_option('wcmp_wcfm_hide_settings', 0);
|
26 |
+
print '<tr><td><input aria-label="'.esc_attr(__('Activate the WCFM add-on','music-player-for-woocommerce')).'" type="checkbox" name="wcmp_wcfm_enabled" '.($wcmp_wcfm_enabled ? 'CHECKED' : '').'></td><td width="100%"><b>'.__('Activate the WCFM add-on', 'music-player-for-woocommerce').'</b><br><i>'.__('If the "WCFM - Marketplace" plugin is installed on the website, check the checkbox to allow vendors to configure their music players.', 'music-player-for-woocommerce').'</i><br><br>
|
27 |
+
<input type="checkbox" aria-label="'.esc_attr(__('Hide settings', 'music-player-for-woocommerce')).'" name="wcmp_wcfm_hide_settings" '.($wcmp_wcfm_hide_settings ? 'CHECKED' : '').'> '.__('Hides the players settings from vendors interface.', 'music-player-for-woocommerce').'</td></tr>';
|
28 |
} // End general_settings
|
29 |
|
30 |
public function save_general_settings()
|
31 |
{
|
32 |
update_option('wcmp_wcfm_enabled', (!empty($_POST['wcmp_wcfm_enabled'])) ? 1 : 0);
|
33 |
+
update_option('wcmp_wcfm_hide_settings', (!empty($_POST['wcmp_wcfm_hide_settings'])) ? 1 : 0);
|
34 |
} // End save_general_settings
|
35 |
|
36 |
public function product_settings($product_id, $product_type)
|
37 |
{
|
38 |
+
global $wcmp_wcfm_flag;
|
39 |
+
$wcmp_wcfm_flag = true;
|
40 |
+
|
41 |
$post = get_post( $product_id );
|
42 |
wp_enqueue_style('wcmp-wcfm-css', plugin_dir_url(__FILE__).'wcfm/style.css');
|
43 |
wp_enqueue_script('wcmp-wcfm-js', plugin_dir_url(__FILE__).'wcfm/script.js');
|
60 |
{
|
61 |
if(!empty($_POST['wcfm_products_manage_form']))
|
62 |
{
|
63 |
+
global $wcmp_wcfm_flag;
|
64 |
+
$wcmp_wcfm_flag = true;
|
65 |
$arr = wp_parse_args($_POST['wcfm_products_manage_form']);
|
66 |
if(!empty($arr))
|
67 |
{
|
addons/wcv.addon.php
CHANGED
@@ -8,12 +8,22 @@ if(!class_exists('WCMP_WCVENDORS_ADDON'))
|
|
8 |
function __construct($wcmp)
|
9 |
{
|
10 |
$this->_wcmp = $wcmp;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
|
12 |
-
if(get_option('wcmp_wcv_enabled', 1))
|
13 |
-
{
|
14 |
-
add_action('wcv-after_seo_tab',array($this, 'product_settings'), 10, 2);
|
15 |
-
add_action('wcv_save_product', array($this, 'save_product_settings'));
|
16 |
-
}
|
17 |
add_action('wcv_delete_post', array($this, 'delete_product'));
|
18 |
add_action('wcmp_addon_general_settings', array($this, 'general_settings'));
|
19 |
add_action('wcmp_save_setting', array($this, 'save_general_settings'));
|
@@ -22,43 +32,22 @@ if(!class_exists('WCMP_WCVENDORS_ADDON'))
|
|
22 |
public function general_settings()
|
23 |
{
|
24 |
$wcmp_wcv_enabled = get_option('wcmp_wcv_enabled', 1);
|
25 |
-
|
|
|
|
|
26 |
} // End general_settings
|
27 |
|
28 |
public function save_general_settings()
|
29 |
{
|
30 |
update_option('wcmp_wcv_enabled', (!empty($_POST['wcmp_wcv_enabled'])) ? 1 : 0);
|
|
|
31 |
} // End save_general_settings
|
32 |
|
33 |
-
public function product_settings($product_id)
|
34 |
-
{
|
35 |
-
$post = get_post( $product_id );
|
36 |
-
wp_enqueue_style('wcmp-wcv-css', plugin_dir_url(__FILE__).'wcv/style.css');
|
37 |
-
?>
|
38 |
-
<div class="wcv-container">
|
39 |
-
<h6><?php _e('Music Player', 'music-player-for-woocommerce'); ?></h6>
|
40 |
-
<input type="hidden" name="wcmp_nonce" value="<?php echo wp_create_nonce('wcmp_updating_product'); ?>" />
|
41 |
-
<?php
|
42 |
-
include_once dirname(__FILE__).'/../views/player_options.php';
|
43 |
-
?>
|
44 |
-
</div>
|
45 |
-
<?php
|
46 |
-
} // End product_settings
|
47 |
-
|
48 |
-
public function save_product_settings($post_id)
|
49 |
-
{
|
50 |
-
$post = wc_get_product( $post_id );
|
51 |
-
$this->_wcmp->save_post($post_id, $post, true);
|
52 |
-
} // End save_product_settings
|
53 |
-
|
54 |
public function delete_product($post_id)
|
55 |
{
|
56 |
$this->_wcmp->delete_post($post_id);
|
57 |
} // End delete_product
|
58 |
|
59 |
-
//******************** PRIVATE METHODS ************************
|
60 |
-
|
61 |
-
|
62 |
} // End WCMP_WCVENDORS_ADDON
|
63 |
}
|
64 |
|
8 |
function __construct($wcmp)
|
9 |
{
|
10 |
$this->_wcmp = $wcmp;
|
11 |
+
add_action('admin_init', function(){
|
12 |
+
if(get_current_user_id()) {
|
13 |
+
$user = wp_get_current_user();
|
14 |
+
$roles = ( array ) $user->roles;
|
15 |
+
if(in_array('vendor', $roles) && class_exists('WC_Vendors'))
|
16 |
+
{
|
17 |
+
global $wcmp_wcv_flag;
|
18 |
+
$wcmp_wcv_flag = true;
|
19 |
+
if(!get_option('wcmp_wcv_enabled', 1) || get_option('wcmp_wcv_hide_settings', 0))
|
20 |
+
{
|
21 |
+
remove_meta_box('wcmp_woocommerce_metabox', 'product', 'normal');
|
22 |
+
}
|
23 |
+
}
|
24 |
+
}
|
25 |
+
},99);
|
26 |
|
|
|
|
|
|
|
|
|
|
|
27 |
add_action('wcv_delete_post', array($this, 'delete_product'));
|
28 |
add_action('wcmp_addon_general_settings', array($this, 'general_settings'));
|
29 |
add_action('wcmp_save_setting', array($this, 'save_general_settings'));
|
32 |
public function general_settings()
|
33 |
{
|
34 |
$wcmp_wcv_enabled = get_option('wcmp_wcv_enabled', 1);
|
35 |
+
$wcmp_wcv_hide_settings = get_option('wcmp_wcv_hide_settings', 0);
|
36 |
+
print '<tr><td><input aria-label="'.esc_attr(__('Activate the WC Vendors add-on','music-player-for-woocommerce')).'" type="checkbox" name="wcmp_wcv_enabled" '.($wcmp_wcv_enabled ? 'CHECKED' : '').'></td><td width="100%"><b>'.__('Activate the WC Vendors add-on (Experimental add-on)', 'music-player-for-woocommerce').'</b><br><i>'.__('If the "WC Vendors" plugin is installed on the website, check the checkbox to allow vendors to configure their music players.', 'music-player-for-woocommerce').'</i><br><br>
|
37 |
+
<input type="checkbox" aria-label="'.esc_attr(__('Hide settings', 'music-player-for-woocommerce')).'" name="wcmp_wcv_hide_settings" '.($wcmp_wcv_hide_settings ? 'CHECKED' : '').'> '.__('Hides the players settings from vendors interface.', 'music-player-for-woocommerce').'</td></tr>';
|
38 |
} // End general_settings
|
39 |
|
40 |
public function save_general_settings()
|
41 |
{
|
42 |
update_option('wcmp_wcv_enabled', (!empty($_POST['wcmp_wcv_enabled'])) ? 1 : 0);
|
43 |
+
update_option('wcmp_wcv_hide_settings', (!empty($_POST['wcmp_wcv_hide_settings'])) ? 1 : 0);
|
44 |
} // End save_general_settings
|
45 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
46 |
public function delete_product($post_id)
|
47 |
{
|
48 |
$this->_wcmp->delete_post($post_id);
|
49 |
} // End delete_product
|
50 |
|
|
|
|
|
|
|
51 |
} // End WCMP_WCVENDORS_ADDON
|
52 |
}
|
53 |
|
css/style.css
CHANGED
@@ -14,10 +14,11 @@
|
|
14 |
.wcmp-player.track.mejs-wmp{width:40px !important;height:40px !important;}
|
15 |
.wcmp-player.track.mejs-wmp .mejs-controls{height:40px !important; width:40px !important; background:transparent !important;}
|
16 |
|
17 |
-
.wcmp-player-list{width:100%; border:0;overflow:visible;}
|
18 |
.wcmp-player-list *{word-break:normal !important;}
|
19 |
.wcmp-player-list td{border:0;padding:5px;}
|
20 |
.wcmp-player-list table{width:100%;margin:0;}
|
|
|
21 |
.wcmp-player-list table td{border:0;}
|
22 |
.wcmp-odd-row td,
|
23 |
.wcmp-even-row td{padding:5px;vertical-align:middle;}
|
@@ -32,7 +33,7 @@
|
|
32 |
|
33 |
.wcmp-player .mejs-time-hovered,
|
34 |
.wcmp-player .mejs-time-handle-content{display:none !important;}
|
35 |
-
|
36 |
.wcmp-player .mejs-controls .mejs-time-rail .mejs-time-buffering,
|
37 |
.wcmp-player .mejs-controls .mejs-time-rail .mejs-time-current,
|
38 |
.wcmp-player .mejs-controls .mejs-time-rail .mejs-time-hovered,
|
14 |
.wcmp-player.track.mejs-wmp{width:40px !important;height:40px !important;}
|
15 |
.wcmp-player.track.mejs-wmp .mejs-controls{height:40px !important; width:40px !important; background:transparent !important;}
|
16 |
|
17 |
+
.wcmp-player-list{width:100%; border:0;overflow:visible;margin-bottom:10px;}
|
18 |
.wcmp-player-list *{word-break:normal !important;}
|
19 |
.wcmp-player-list td{border:0;padding:5px;}
|
20 |
.wcmp-player-list table{width:100%;margin:0;}
|
21 |
+
.wcmp-player-list table tr,
|
22 |
.wcmp-player-list table td{border:0;}
|
23 |
.wcmp-odd-row td,
|
24 |
.wcmp-even-row td{padding:5px;vertical-align:middle;}
|
33 |
|
34 |
.wcmp-player .mejs-time-hovered,
|
35 |
.wcmp-player .mejs-time-handle-content{display:none !important;}
|
36 |
+
.wcmp-player .mejs-controls .mejs-time{height:auto;}
|
37 |
.wcmp-player .mejs-controls .mejs-time-rail .mejs-time-buffering,
|
38 |
.wcmp-player .mejs-controls .mejs-time-rail .mejs-time-current,
|
39 |
.wcmp-player .mejs-controls .mejs-time-rail .mejs-time-hovered,
|
js/admin.js
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
function wcmp_admin()
|
2 |
+
{
|
3 |
+
if(typeof wcmp_admin_evaluated != 'undefined') return;
|
4 |
+
wcmp_admin_evaluated = true;
|
5 |
+
|
6 |
+
var $ = jQuery;
|
7 |
+
|
8 |
+
// Special Radio
|
9 |
+
$( document ).on(
|
10 |
+
'mousedown',
|
11 |
+
'.wcmp_radio',
|
12 |
+
function()
|
13 |
+
{
|
14 |
+
$(this).data('status', this.checked);
|
15 |
+
}
|
16 |
+
);
|
17 |
+
|
18 |
+
$( document ).on(
|
19 |
+
'click',
|
20 |
+
'.wcmp_radio',
|
21 |
+
function()
|
22 |
+
{
|
23 |
+
this.checked = !$(this).data('status');
|
24 |
+
}
|
25 |
+
);
|
26 |
+
}
|
27 |
+
|
28 |
+
jQuery(wcmp_admin);
|
29 |
+
jQuery(window).on('load', wcmp_admin);
|
js/public.js
CHANGED
@@ -1,12 +1,13 @@
|
|
1 |
-
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,
|
2 |
-
$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,
|
3 |
-
$jscomp.polyfill=function(a,
|
4 |
-
(function(){var a=[],
|
5 |
-
|
6 |
-
"
|
7 |
-
iPadUseNativeControls:
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
function(){
|
|
1 |
+
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,e,b){a instanceof String&&(a=String(a));for(var f=a.length,h=0;h<f;h++){var c=a[h];if(e.call(b,c,h,a))return{i:h,v:c}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;
|
2 |
+
$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,e,b){a!=Array.prototype&&a!=Object.prototype&&(a[e]=b.value)};$jscomp.getGlobal=function(a){return"undefined"!=typeof window&&window===a?a:"undefined"!=typeof global&&null!=global?global:a};$jscomp.global=$jscomp.getGlobal(this);
|
3 |
+
$jscomp.polyfill=function(a,e,b,f){if(e){b=$jscomp.global;a=a.split(".");for(f=0;f<a.length-1;f++){var h=a[f];h in b||(b[h]={});b=b[h]}a=a[a.length-1];f=b[a];e=e(f);e!=f&&null!=e&&$jscomp.defineProperty(b,a,{configurable:!0,writable:!0,value:e})}};$jscomp.polyfill("Array.prototype.find",function(a){return a?a:function(a,b){return $jscomp.findInternal(this,a,b).v}},"es6","es3");
|
4 |
+
(function(){var a=[],e=0;window.generate_the_wcmp=function(b){function f(g,l){if(g+1<e||l){var d=g+1;!l||d!=e&&0!=c('[playernumber="'+d+'"]').closest("[data-loop]").length&&c('[playernumber="'+d+'"]').closest("[data-loop]")[0]==c('[playernumber="'+g+'"]').closest("[data-loop]")[0]||(d=c('[playernumber="'+g+'"]').closest("[data-loop]").find("[playernumber]:first").attr("playernumber"));a[d]instanceof c&&a[d].is("a")?a[d].is(":visible")?a[d].click():f(g+1,l):c(a[d].container).is(":visible")?a[d].play():
|
5 |
+
f(g+1,l)}}function h(g){var a=g.data("product"),d=c("img.product-"+a);d.length&&1==c('[data-product="'+a+'"]').length&&(a=d.offset(),g=g.closest("div.wcmp-player"),g.css({position:"absolute","z-index":999999}).offset({left:a.left+(d.width()-g.width())/2,top:a.top+(d.height()-g.height())/2}))}if(!("boolean"!==typeof b&&"undefined"!=typeof wcmp_global_settings&&1*wcmp_global_settings.onload)&&"undefined"===typeof generated_the_wcmp){generated_the_wcmp=!0;var c=jQuery;c(".wcmp-player-container").on("click",
|
6 |
+
"*",function(a){a.preventDefault();a.stopPropagation();return!1});c.expr[":"].regex=function(a,b,d){b=d[3].split(",");var m=/^(data|css):/;d=b[0].match(m)?b[0].split(":")[0]:"attr";m=b.shift().replace(m,"");return(new RegExp(b.join("").replace(/^\s+|\s+$/g,""),"ig")).test(c(a)[d](m))};var r="undefined"!=typeof wcmp_global_settings?wcmp_global_settings.play_all:!0,k="undefined"!=typeof wcmp_global_settings?!(1*wcmp_global_settings.play_simultaneously):!0,p="undefined"!=typeof wcmp_global_settings?
|
7 |
+
1*wcmp_global_settings.fade_out:!0,q="undefined"!=typeof wcmp_global_settings&&"ios_controls"in wcmp_global_settings&&1*wcmp_global_settings.ios_controls?!0:!1;b=c("audio.wcmp-player:not(.track):not([playernumber])");var t=c("audio.wcmp-player.track:not([playernumber])"),n={pauseOtherPlayers:k,iPadUseNativeControls:q,iPhoneUseNativeControls:q,success:function(a,b){c(b).attr("volume")&&a.setVolume(parseFloat(c(b).attr("volume")));var d=function(a){a=c(a.target||a.detail.target);var m=a.data("duration");
|
8 |
+
"undefined"!=typeof m&&a.closest(".wcmp-player-container").find(".mejs-duration").html(m)};a.addEventListener("timeupdate",function(a){d(a);a=a.target||a.detail.target;isNaN(a.currentTime)||isNaN(a.duration)||(p&&4>a.duration-a.currentTime?a.setVolume(a.volume-a.volume/3):("undefined"==typeof a.bkVolume&&(a.bkVolume=a.volume),a.setVolume(a.bkVolume)))});a.addEventListener("volumechange",function(a){a=a.target||a.detail.target;isNaN(a.currentTime)||isNaN(a.duration)||!(4<a.duration-a.currentTime)&&
|
9 |
+
p||!a.currentTime||(a.bkVolume=a.volume)});a.addEventListener("ended",function(a){var b=a.target||a.detail.target;a=c(b).closest('[data-loop="1"]');if(1*r||a.length)b=1*c(b).attr("playernumber"),f(b,a.length)});a.addEventListener("loadedmetadata",function(a){d(a)})}};k=".product-type-grouped :regex(name,quantity\\[\\d+\\])";b.each(function(){var b=c(this);b.find("source").attr("src");b.attr("playernumber",e);n.audioVolume="vertical";try{a[e]=new MediaElementPlayer(b[0],n)}catch(l){"console"in window&&
|
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)})();
|
js/public_src.js
CHANGED
@@ -14,24 +14,37 @@
|
|
14 |
generated_the_wcmp = true;
|
15 |
|
16 |
var $ = jQuery;
|
17 |
-
|
18 |
|
19 |
/**
|
20 |
* Play next player
|
21 |
*/
|
22 |
-
function _playNext( playernumber )
|
23 |
{
|
24 |
-
if( playernumber+1 < wcmp_player_counter )
|
25 |
{
|
|
|
26 |
var toPlay = playernumber+1;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
if( wcmp_players[ toPlay ] instanceof $ && wcmp_players[ toPlay ].is( 'a' ) ){
|
28 |
if(wcmp_players[ toPlay ].is(':visible')) wcmp_players[ toPlay ].click();
|
29 |
-
else _playNext(playernumber+1);
|
30 |
}
|
31 |
else
|
32 |
{
|
33 |
if($(wcmp_players[ toPlay ].container).is(':visible')) wcmp_players[ toPlay ].play();
|
34 |
-
else _playNext(playernumber+1);
|
35 |
}
|
36 |
}
|
37 |
};
|
@@ -119,11 +132,12 @@
|
|
119 |
});
|
120 |
|
121 |
media.addEventListener( 'ended', function( evt ){
|
122 |
-
var e = evt.target || evt.detail.target
|
123 |
-
|
|
|
124 |
{
|
125 |
var playernumber = $(e).attr('playernumber')*1;
|
126 |
-
|
127 |
}
|
128 |
});
|
129 |
|
@@ -236,5 +250,5 @@
|
|
236 |
if(jQuery('audio[data-product]:not([playernumber])').length) wcmp_force_init();
|
237 |
});
|
238 |
|
239 |
-
jQuery(document).on('scroll', wcmp_force_init);
|
240 |
})()
|
14 |
generated_the_wcmp = true;
|
15 |
|
16 |
var $ = jQuery;
|
17 |
+
$('.wcmp-player-container').on('click', '*', function(evt){evt.preventDefault();evt.stopPropagation();return false;});
|
18 |
|
19 |
/**
|
20 |
* Play next player
|
21 |
*/
|
22 |
+
function _playNext( playernumber, loop )
|
23 |
{
|
24 |
+
if( playernumber+1 < wcmp_player_counter || loop)
|
25 |
{
|
26 |
+
|
27 |
var toPlay = playernumber+1;
|
28 |
+
if(
|
29 |
+
loop &&
|
30 |
+
(
|
31 |
+
toPlay == wcmp_player_counter ||
|
32 |
+
$('[playernumber="'+toPlay+'"]').closest('[data-loop]').length == 0 ||
|
33 |
+
$('[playernumber="'+toPlay+'"]').closest('[data-loop]')[0] != $('[playernumber="'+playernumber+'"]').closest('[data-loop]')[0]
|
34 |
+
)
|
35 |
+
)
|
36 |
+
{
|
37 |
+
toPlay = $('[playernumber="'+playernumber+'"]').closest('[data-loop]').find('[playernumber]:first').attr('playernumber');
|
38 |
+
}
|
39 |
+
|
40 |
if( wcmp_players[ toPlay ] instanceof $ && wcmp_players[ toPlay ].is( 'a' ) ){
|
41 |
if(wcmp_players[ toPlay ].is(':visible')) wcmp_players[ toPlay ].click();
|
42 |
+
else _playNext(playernumber+1, loop);
|
43 |
}
|
44 |
else
|
45 |
{
|
46 |
if($(wcmp_players[ toPlay ].container).is(':visible')) wcmp_players[ toPlay ].play();
|
47 |
+
else _playNext(playernumber+1, loop);
|
48 |
}
|
49 |
}
|
50 |
};
|
132 |
});
|
133 |
|
134 |
media.addEventListener( 'ended', function( evt ){
|
135 |
+
var e = evt.target || evt.detail.target,
|
136 |
+
c = $(e).closest('[data-loop="1"]');
|
137 |
+
if( play_all*1 || c.length)
|
138 |
{
|
139 |
var playernumber = $(e).attr('playernumber')*1;
|
140 |
+
_playNext( playernumber, c.length);
|
141 |
}
|
142 |
});
|
143 |
|
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 |
})()
|
languages/music-player-for-woocommerce-en_US.mo
CHANGED
Binary file
|
languages/music-player-for-woocommerce-en_US.po
CHANGED
@@ -1,39 +1,97 @@
|
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: music-player-for-woocommerce\n"
|
4 |
-
"POT-Creation-Date: 2021-
|
5 |
-
"PO-Revision-Date: 2021-
|
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
|
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/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
msgid "Activate the Dokan add-on"
|
20 |
msgstr ""
|
21 |
|
22 |
-
#: addons/dokan.addon.php:
|
23 |
msgid ""
|
24 |
"If the \"Dokan Multivendor\" plugin is installed on the website, check the "
|
25 |
"checkbox to allow vendors to configure their music players."
|
26 |
msgstr ""
|
27 |
|
28 |
-
#: addons/dokan/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
msgid "File Name"
|
30 |
msgstr ""
|
31 |
|
32 |
-
#: addons/dokan/player_options.php:10 views/player_options.php:
|
33 |
msgid "Choose file"
|
34 |
msgstr ""
|
35 |
|
36 |
-
#: addons/dokan/player_options.php:11 views/player_options.php:
|
37 |
msgid "Delete"
|
38 |
msgstr ""
|
39 |
|
@@ -53,97 +111,97 @@ msgstr ""
|
|
53 |
msgid "<p>The player uses the audio files associated to the product.</b></p>"
|
54 |
msgstr ""
|
55 |
|
56 |
-
#: addons/dokan/player_options.php:61 views/player_options.php:
|
57 |
msgid "[+|-] Tips"
|
58 |
msgstr ""
|
59 |
|
60 |
-
#: addons/dokan/player_options.php:67 views/player_options.php:
|
61 |
msgid "[+|-] Using the audio files stored on Google Drive"
|
62 |
msgstr ""
|
63 |
|
64 |
-
#: addons/dokan/player_options.php:75 views/player_options.php:
|
65 |
msgid ""
|
66 |
"Go to Drive, press the right click on the file to use, and select the "
|
67 |
"option: <b>\"Get Shareable Link\"</b>"
|
68 |
msgstr ""
|
69 |
|
70 |
-
#: addons/dokan/player_options.php:83 views/player_options.php:
|
71 |
msgid ""
|
72 |
"The previous action will generate an url with the structure: <b>https://"
|
73 |
"drive.google.com/open?id=FILE_ID</b>"
|
74 |
msgstr ""
|
75 |
|
76 |
-
#: addons/dokan/player_options.php:93 views/player_options.php:
|
77 |
msgid ""
|
78 |
"Knowing the FILE_ID, extracted from the previous URL, enter the URL below, "
|
79 |
"into the WooCommerce product, to allow the Music Player accessing to it:"
|
80 |
msgstr ""
|
81 |
|
82 |
-
#: addons/dokan/player_options.php:104 views/player_options.php:
|
83 |
msgid ""
|
84 |
"<b>Note:</b> Pay attention to the use of the fake parameter: <b>&.mp3</b> as "
|
85 |
"the last one in the URL"
|
86 |
msgstr ""
|
87 |
|
88 |
-
#: addons/dokan/player_options.php:114 views/player_options.php:
|
89 |
msgid "[+|-] Using the audio files stored on DropBox"
|
90 |
msgstr ""
|
91 |
|
92 |
-
#: addons/dokan/player_options.php:122 views/player_options.php:
|
93 |
msgid ""
|
94 |
"Sign in to <a href=\"https://www.dropbox.com/login\" target=\"_blank"
|
95 |
"\">dropbox.com </a>"
|
96 |
msgstr ""
|
97 |
|
98 |
-
#: addons/dokan/player_options.php:132 views/player_options.php:
|
99 |
msgid ""
|
100 |
"Hover your cursor over the file or folder you'd like to share and click "
|
101 |
"<b>Share</b> when it appears."
|
102 |
msgstr ""
|
103 |
|
104 |
-
#: addons/dokan/player_options.php:142 views/player_options.php:
|
105 |
msgid ""
|
106 |
"If a link hasn't been created, click Create a link. (If a link was already "
|
107 |
"created, click Copy link."
|
108 |
msgstr ""
|
109 |
|
110 |
-
#: addons/dokan/player_options.php:150 views/player_options.php:
|
111 |
msgid ""
|
112 |
"The link structure would be similar to:<br> https://www.dropbox.com/s/"
|
113 |
"rycvgn8iokfedmo/file.mp3?dl=0"
|
114 |
msgstr ""
|
115 |
|
116 |
-
#: addons/dokan/player_options.php:160 views/player_options.php:
|
117 |
msgid ""
|
118 |
"Enter the URL into the WooCommerce product with the following structure:<br> "
|
119 |
"https://www.dropbox.com/s/rycvgn8iokfedmo/file.mp3?dl=1&.mp3"
|
120 |
msgstr ""
|
121 |
|
122 |
-
#: addons/dokan/player_options.php:168 views/player_options.php:
|
123 |
msgid ""
|
124 |
"<b>Note:</b> Pay attention to the use of the fake parameter: <b>&.mp3</b> as "
|
125 |
"the last one in the URL. Furthermore, the parameter <b>dl=0</b>, has been "
|
126 |
"modified as <b>dl=1</b>"
|
127 |
msgstr ""
|
128 |
|
129 |
-
#: addons/dokan/player_options.php:181 views/global_options.php:
|
130 |
-
#: views/player_options.php:
|
131 |
msgid "Enable player"
|
132 |
msgstr ""
|
133 |
|
134 |
-
#: addons/dokan/player_options.php:181 views/global_options.php:
|
135 |
msgid ""
|
136 |
"The player is shown only if the product is \"downloadable\" with at least an "
|
137 |
"audio file between the \"Downloadable files\", or you have selected your own "
|
138 |
"audio files"
|
139 |
msgstr ""
|
140 |
|
141 |
-
#: addons/dokan/player_options.php:181 views/player_options.php:
|
142 |
msgid "Include music player"
|
143 |
msgstr ""
|
144 |
|
145 |
-
#: addons/dokan/player_options.php:185 views/global_options.php:
|
146 |
-
#: views/player_options.php:
|
147 |
msgid "Include in"
|
148 |
msgstr ""
|
149 |
|
@@ -151,17 +209,17 @@ msgstr ""
|
|
151 |
msgid "Include on products pages only"
|
152 |
msgstr ""
|
153 |
|
154 |
-
#: addons/dokan/player_options.php:188 views/global_options.php:
|
155 |
-
#: views/player_options.php:
|
156 |
msgid "single-entry pages <i>(Product's page only)</i>"
|
157 |
msgstr ""
|
158 |
|
159 |
-
#: addons/dokan/player_options.php:190 views/player_options.php:
|
160 |
msgid "Include on multiple-entry pages"
|
161 |
msgstr ""
|
162 |
|
163 |
-
#: addons/dokan/player_options.php:191 views/global_options.php:
|
164 |
-
#: views/player_options.php:
|
165 |
msgid ""
|
166 |
"multiple entries pages <i>(Shop pages, archive pages, but not in the "
|
167 |
"product's page)</i>"
|
@@ -171,104 +229,104 @@ msgstr ""
|
|
171 |
msgid "Include on products and multiple-entry pages"
|
172 |
msgstr ""
|
173 |
|
174 |
-
#: addons/dokan/player_options.php:194 views/global_options.php:
|
175 |
-
#: views/player_options.php:
|
176 |
msgid "all pages <i>(with single or multiple-entries)</i>"
|
177 |
msgstr ""
|
178 |
|
179 |
#: addons/dokan/player_options.php:198 addons/dokan/player_options.php:199
|
180 |
-
#: views/global_options.php:
|
181 |
-
#: views/player_options.php:
|
182 |
msgid "Merge in grouped products"
|
183 |
msgstr ""
|
184 |
|
185 |
-
#: addons/dokan/player_options.php:200 views/global_options.php:
|
186 |
-
#: views/player_options.php:
|
187 |
msgid ""
|
188 |
"In grouped products, display the \"Add to cart\" buttons and quantity fields "
|
189 |
"in the players rows"
|
190 |
msgstr ""
|
191 |
|
192 |
-
#: addons/dokan/player_options.php:203 views/global_options.php:
|
193 |
-
#: views/player_options.php:
|
194 |
msgid "Player layout"
|
195 |
msgstr ""
|
196 |
|
197 |
-
#: addons/dokan/player_options.php:206 views/global_options.php:
|
198 |
-
#: views/global_options.php:
|
199 |
-
#: views/player_options.php:
|
200 |
msgid "Skin 1"
|
201 |
msgstr ""
|
202 |
|
203 |
-
#: addons/dokan/player_options.php:211 views/global_options.php:
|
204 |
-
#: views/player_options.php:
|
205 |
msgid "Skin 2"
|
206 |
msgstr ""
|
207 |
|
208 |
-
#: addons/dokan/player_options.php:216 views/global_options.php:
|
209 |
-
#: views/global_options.php:
|
210 |
-
#: views/player_options.php:
|
211 |
msgid "Skin 3"
|
212 |
msgstr ""
|
213 |
|
214 |
-
#: addons/dokan/player_options.php:222 views/global_options.php:
|
215 |
-
#: views/player_options.php:
|
216 |
msgid "Preload"
|
217 |
msgstr ""
|
218 |
|
219 |
-
#: addons/dokan/player_options.php:224 views/global_options.php:
|
220 |
-
#: views/player_options.php:
|
221 |
msgid "Preload - none"
|
222 |
msgstr ""
|
223 |
|
224 |
-
#: addons/dokan/player_options.php:225 views/global_options.php:
|
225 |
-
#: views/player_options.php:
|
226 |
msgid "Preload - metadata"
|
227 |
msgstr ""
|
228 |
|
229 |
-
#: addons/dokan/player_options.php:226 views/global_options.php:
|
230 |
-
#: views/player_options.php:
|
231 |
msgid "Preload - auto"
|
232 |
msgstr ""
|
233 |
|
234 |
-
#: addons/dokan/player_options.php:230 views/global_options.php:
|
235 |
-
#: views/global_options.php:
|
236 |
-
#: views/player_options.php:
|
237 |
msgid "Play all"
|
238 |
msgstr ""
|
239 |
|
240 |
-
#: addons/dokan/player_options.php:233 views/global_options.php:
|
241 |
-
#: views/player_options.php:
|
242 |
msgid "Player controls"
|
243 |
msgstr ""
|
244 |
|
245 |
-
#: addons/dokan/player_options.php:235 views/global_options.php:
|
246 |
-
#: views/player_options.php:
|
247 |
msgid "Play/pause button"
|
248 |
msgstr ""
|
249 |
|
250 |
-
#: addons/dokan/player_options.php:235 views/global_options.php:
|
251 |
-
#: views/player_options.php:
|
252 |
msgid "the play/pause button only"
|
253 |
msgstr ""
|
254 |
|
255 |
-
#: addons/dokan/player_options.php:236 views/global_options.php:
|
256 |
-
#: views/player_options.php:
|
257 |
msgid "All controls"
|
258 |
msgstr ""
|
259 |
|
260 |
-
#: addons/dokan/player_options.php:236 views/global_options.php:
|
261 |
-
#: views/player_options.php:
|
262 |
msgid "all controls"
|
263 |
msgstr ""
|
264 |
|
265 |
-
#: addons/dokan/player_options.php:237 views/global_options.php:
|
266 |
-
#: views/player_options.php:
|
267 |
msgid "Depending on context"
|
268 |
msgstr ""
|
269 |
|
270 |
-
#: addons/dokan/player_options.php:237 views/global_options.php:
|
271 |
-
#: views/player_options.php:
|
272 |
msgid "the play/pause button only, or all controls depending on context"
|
273 |
msgstr ""
|
274 |
|
@@ -276,20 +334,20 @@ msgstr ""
|
|
276 |
msgid "Player on cover"
|
277 |
msgstr ""
|
278 |
|
279 |
-
#: addons/dokan/player_options.php:241 views/global_options.php:
|
280 |
-
#: views/player_options.php:
|
281 |
msgid "for play/pause button players display them on cover images."
|
282 |
msgstr ""
|
283 |
|
284 |
-
#: addons/dokan/player_options.php:242 views/global_options.php:
|
285 |
-
#: views/player_options.php:
|
286 |
msgid ""
|
287 |
"(This feature is experimental, and will depend on the theme active on the "
|
288 |
"website.)"
|
289 |
msgstr ""
|
290 |
|
291 |
-
#: addons/dokan/player_options.php:247 views/global_options.php:
|
292 |
-
#: views/player_options.php:
|
293 |
msgid "Display the player's title"
|
294 |
msgstr ""
|
295 |
|
@@ -297,29 +355,29 @@ msgstr ""
|
|
297 |
msgid "Display player title"
|
298 |
msgstr ""
|
299 |
|
300 |
-
#: addons/wcfm.addon.php:
|
301 |
msgid "Activate the WCFM add-on"
|
302 |
msgstr ""
|
303 |
|
304 |
-
#: addons/wcfm.addon.php:
|
305 |
msgid ""
|
306 |
"If the \"WCFM - Marketplace\" plugin is installed on the website, check the "
|
307 |
"checkbox to allow vendors to configure their music players."
|
308 |
msgstr ""
|
309 |
|
310 |
-
#: addons/wcfm.addon.php:
|
311 |
msgid "Music Player"
|
312 |
msgstr ""
|
313 |
|
314 |
-
#: addons/wcv.addon.php:
|
315 |
msgid "Activate the WC Vendors add-on"
|
316 |
msgstr ""
|
317 |
|
318 |
-
#: addons/wcv.addon.php:
|
319 |
msgid "Activate the WC Vendors add-on (Experimental add-on)"
|
320 |
msgstr ""
|
321 |
|
322 |
-
#: addons/wcv.addon.php:
|
323 |
msgid ""
|
324 |
"If the \"WC Vendors\" plugin is installed on the website, check the checkbox "
|
325 |
"to allow vendors to configure their music players."
|
@@ -382,11 +440,11 @@ msgstr ""
|
|
382 |
msgid "Insert a playlist with the products players"
|
383 |
msgstr ""
|
384 |
|
385 |
-
#: views/global_options.php:
|
386 |
msgid "Music Player for WooCommerce - Global Settings"
|
387 |
msgstr ""
|
388 |
|
389 |
-
#: views/global_options.php:
|
390 |
msgid ""
|
391 |
"For reporting any issue or to request a customization, <a href=\"https://"
|
392 |
"wordpress.dwbooster.com/contact-us\" target=\"_blank\">CLICK HERE</a><br />\n"
|
@@ -398,23 +456,23 @@ msgid ""
|
|
398 |
"target=\"_blank\">Public page: Click to visit the WooCommerce Store</a>"
|
399 |
msgstr ""
|
400 |
|
401 |
-
#: views/global_options.php:
|
402 |
msgid "Registering of Plugin"
|
403 |
msgstr ""
|
404 |
|
405 |
-
#: views/global_options.php:
|
406 |
msgid "Enter the email address of buyer"
|
407 |
msgstr ""
|
408 |
|
409 |
-
#: views/global_options.php:
|
410 |
msgid "Buyer email"
|
411 |
msgstr ""
|
412 |
|
413 |
-
#: views/global_options.php:
|
414 |
msgid "Register"
|
415 |
msgstr ""
|
416 |
|
417 |
-
#: views/global_options.php:
|
418 |
msgid ""
|
419 |
"<p>The player uses the audio files associated to the product. If you want "
|
420 |
"protecting the audio files for selling, tick the checkbox: <b>\"Protect the "
|
@@ -426,151 +484,163 @@ msgid ""
|
|
426 |
"pay for them.</b></p>"
|
427 |
msgstr ""
|
428 |
|
429 |
-
#: views/global_options.php:
|
430 |
msgid "General Settings"
|
431 |
msgstr ""
|
432 |
|
433 |
-
#: views/global_options.php:
|
434 |
msgid "Include the players only for registered users"
|
435 |
msgstr ""
|
436 |
|
437 |
-
#: views/global_options.php:
|
438 |
msgid "Apply fade out to playing audio when possible"
|
439 |
msgstr ""
|
440 |
|
441 |
-
#: views/global_options.php:
|
442 |
msgid "The general settings affect only the PRO version of the plugin"
|
443 |
msgstr ""
|
444 |
|
445 |
-
#: views/global_options.php:
|
446 |
-
#: views/player_options.php:
|
447 |
msgid "CLICK HERE TO GET THE PRO VERSION OF THE PLUGIN"
|
448 |
msgstr ""
|
449 |
|
450 |
-
#: views/global_options.php:
|
451 |
msgid ""
|
452 |
-
"For buyers, play the purchased audio files instead the truncated files
|
453 |
-
"demo"
|
454 |
msgstr ""
|
455 |
|
456 |
-
#: views/global_options.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
457 |
msgid "Truncate the audio files for demo with ffmpeg"
|
458 |
msgstr ""
|
459 |
|
460 |
-
#: views/global_options.php:
|
461 |
msgid "ffmpeg path"
|
462 |
msgstr ""
|
463 |
|
464 |
-
#: views/global_options.php:
|
465 |
msgid "Watermark audio"
|
466 |
msgstr ""
|
467 |
|
468 |
-
#: views/global_options.php:
|
469 |
msgid "Select"
|
470 |
msgstr ""
|
471 |
|
472 |
-
#: views/global_options.php:
|
473 |
msgid ""
|
474 |
"Select an audio file if you want to apply a watermark to the audio files for "
|
475 |
"demos. The watermark will be applied to the protected demos (Experimental "
|
476 |
"feature)."
|
477 |
msgstr ""
|
478 |
|
479 |
-
#: views/global_options.php:
|
480 |
msgid "Delete the demo files generated previously"
|
481 |
msgstr ""
|
482 |
|
483 |
-
#: views/global_options.php:
|
484 |
msgid "Store demo files on Google Drive"
|
485 |
msgstr ""
|
486 |
|
487 |
-
#: views/global_options.php:
|
488 |
msgid "Import a JSON Key file"
|
489 |
msgstr ""
|
490 |
|
491 |
-
#: views/global_options.php:
|
492 |
msgid "JSON Key file"
|
493 |
msgstr ""
|
494 |
|
495 |
-
#: views/global_options.php:
|
496 |
msgid "Troubleshoot Area"
|
497 |
msgstr ""
|
498 |
|
499 |
-
#: views/global_options.php:
|
500 |
msgid "On iPads and iPhones, use native controls"
|
501 |
msgstr ""
|
502 |
|
503 |
-
#: views/global_options.php:
|
504 |
msgid ""
|
505 |
"tick the checkbox if the players do not work properly on iPads or iPhones"
|
506 |
msgstr ""
|
507 |
|
508 |
-
#: views/global_options.php:
|
509 |
msgid "Loading players in the onload event"
|
510 |
msgstr ""
|
511 |
|
512 |
-
#: views/global_options.php:
|
513 |
msgid "Loading placeholder in the onload event"
|
514 |
msgstr ""
|
515 |
|
516 |
-
#: views/global_options.php:
|
517 |
msgid "tick the checkbox if the players are not being loaded properly"
|
518 |
msgstr ""
|
519 |
|
520 |
-
#: views/global_options.php:
|
521 |
msgid "For files whose extensions cannot be determined"
|
522 |
msgstr ""
|
523 |
|
524 |
-
#: views/global_options.php:
|
525 |
msgid ""
|
526 |
"For files whose extensions cannot be determined, handle them as mp3 files"
|
527 |
msgstr ""
|
528 |
|
529 |
-
#: views/global_options.php:
|
530 |
msgid "handle them as mp3 files"
|
531 |
msgstr ""
|
532 |
|
533 |
-
#: views/global_options.php:
|
534 |
msgid ""
|
535 |
"For the WooCommerce Gutenberg Blocks, include the main player in the "
|
536 |
"products titles"
|
537 |
msgstr ""
|
538 |
|
539 |
-
#: views/global_options.php:
|
540 |
msgid "Includes the main player in front of products titles"
|
541 |
msgstr ""
|
542 |
|
543 |
-
#: views/global_options.php:
|
544 |
msgid "WooCommerce hook used to display the players in the shop pages"
|
545 |
msgstr ""
|
546 |
|
547 |
-
#: views/global_options.php:
|
548 |
msgid ""
|
549 |
"The plugin uses by default the <b>woocommerce_shop_loop_item_title</b> hook. "
|
550 |
"If the player is not being displayed, enter the hook used by the theme "
|
551 |
"active on your website."
|
552 |
msgstr ""
|
553 |
|
554 |
-
#: views/global_options.php:
|
555 |
msgid "Force the player in the title"
|
556 |
msgstr ""
|
557 |
|
558 |
-
#: views/global_options.php:
|
559 |
msgid "Forces the audio player to be displayed in the product title."
|
560 |
msgstr ""
|
561 |
|
562 |
-
#: views/global_options.php:
|
563 |
msgid "WooCommerce hook used to display the players in the products pages"
|
564 |
msgstr ""
|
565 |
|
566 |
-
#: views/global_options.php:
|
567 |
msgid ""
|
568 |
"The plugin uses by default the <b>woocommerce_single_product_summary</b> "
|
569 |
"hook. If the player is not being displayed, enter the hook used by the theme "
|
570 |
"active on your website."
|
571 |
msgstr ""
|
572 |
|
573 |
-
#: views/global_options.php:
|
574 |
msgid ""
|
575 |
"Click on the <a href=\"https://docs.woocommerce.com/wc-apidocs/hook-docs.html"
|
576 |
"\" target=\"_blank\">THIS LINK</a> for the list of available <a href="
|
@@ -578,146 +648,146 @@ msgid ""
|
|
578 |
"style=\"font-weight:bold;font-size:1.3em;\">WooCommerce Hooks</a>"
|
579 |
msgstr ""
|
580 |
|
581 |
-
#: views/global_options.php:
|
582 |
msgid "Include music player in all products"
|
583 |
msgstr ""
|
584 |
|
585 |
-
#: views/global_options.php:
|
586 |
msgid "Products pages only"
|
587 |
msgstr ""
|
588 |
|
589 |
-
#: views/global_options.php:
|
590 |
msgid "Multiple-entry pages"
|
591 |
msgstr ""
|
592 |
|
593 |
-
#: views/global_options.php:
|
594 |
msgid "Product and multiple-entry pages"
|
595 |
msgstr ""
|
596 |
|
597 |
-
#: views/global_options.php:
|
598 |
msgid "Include players in cart"
|
599 |
msgstr ""
|
600 |
|
601 |
-
#: views/global_options.php:
|
602 |
msgid "skin 2"
|
603 |
msgstr ""
|
604 |
|
605 |
-
#: views/global_options.php:
|
606 |
msgid "Allow multiple players to play simultaneously"
|
607 |
msgstr ""
|
608 |
|
609 |
-
#: views/global_options.php:
|
610 |
msgid ""
|
611 |
"By default, only one player would be playing at once. By pressing the play "
|
612 |
"button of a player, the other players would stop. By ticking the checkbox, "
|
613 |
"multiple players could play simultaneously."
|
614 |
msgstr ""
|
615 |
|
616 |
-
#: views/global_options.php:
|
617 |
msgid "Player volume (from 0 to 1)"
|
618 |
msgstr ""
|
619 |
|
620 |
-
#: views/global_options.php:
|
621 |
msgid "Player volume"
|
622 |
msgstr ""
|
623 |
|
624 |
-
#: views/global_options.php:
|
625 |
msgid "On cover"
|
626 |
msgstr ""
|
627 |
|
628 |
-
#: views/global_options.php:
|
629 |
msgid "Display the player title"
|
630 |
msgstr ""
|
631 |
|
632 |
-
#: views/global_options.php:
|
633 |
msgid "The security feature is only available in the PRO version of the plugin"
|
634 |
msgstr ""
|
635 |
|
636 |
-
#: views/global_options.php:
|
637 |
-
#: views/player_options.php:
|
638 |
msgid "Protect the file"
|
639 |
msgstr ""
|
640 |
|
641 |
-
#: views/global_options.php:
|
642 |
-
#: views/player_options.php:
|
643 |
msgid "Percent of audio used for protected playbacks"
|
644 |
msgstr ""
|
645 |
|
646 |
-
#: views/global_options.php:
|
647 |
msgid ""
|
648 |
"To prevent unauthorized copying of audio files, the files will be partially "
|
649 |
"accessible"
|
650 |
msgstr ""
|
651 |
|
652 |
-
#: views/global_options.php:
|
653 |
msgid ""
|
654 |
"Text to display beside the player explaining that demos are partial versions "
|
655 |
"of the original files"
|
656 |
msgstr ""
|
657 |
|
658 |
-
#: views/global_options.php:
|
659 |
msgid "Explaining that demos are partial versions of the original files"
|
660 |
msgstr ""
|
661 |
|
662 |
-
#: views/global_options.php:
|
663 |
msgid "Scope"
|
664 |
msgstr ""
|
665 |
|
666 |
-
#: views/global_options.php:
|
667 |
msgid ""
|
668 |
"Ticking the checkbox the previous settings are applied to all products, even "
|
669 |
"if they have a player enabled."
|
670 |
msgstr ""
|
671 |
|
672 |
-
#: views/global_options.php:
|
673 |
msgid "Apply the previous settings to all products"
|
674 |
msgstr ""
|
675 |
|
676 |
-
#: views/global_options.php:
|
677 |
msgid "Apply the previous settings to all products pages in the website."
|
678 |
msgstr ""
|
679 |
|
680 |
-
#: views/global_options.php:
|
681 |
msgid "Analytics"
|
682 |
msgstr ""
|
683 |
|
684 |
-
#: views/global_options.php:
|
685 |
msgid ""
|
686 |
"Allows the integration with Google Analytics for registering new events when "
|
687 |
"the songs are played. The event information would include: the URL to the "
|
688 |
"audio file as the event label and the product's id as its value."
|
689 |
msgstr ""
|
690 |
|
691 |
-
#: views/global_options.php:
|
692 |
msgid "Note"
|
693 |
msgstr ""
|
694 |
|
695 |
-
#: views/global_options.php:
|
696 |
msgid ""
|
697 |
"If the preload option is configured as Metadata or Auto in the players "
|
698 |
"settings, the event would be registered when the audio file is loaded by the "
|
699 |
"player and not exactly when they are playing."
|
700 |
msgstr ""
|
701 |
|
702 |
-
#: views/global_options.php:
|
703 |
msgid "Tracking Id"
|
704 |
msgstr ""
|
705 |
|
706 |
-
#: views/global_options.php:
|
707 |
msgid "Add ons"
|
708 |
msgstr ""
|
709 |
|
710 |
-
#: views/global_options.php:
|
711 |
msgid "Save settings"
|
712 |
msgstr ""
|
713 |
|
714 |
-
#: views/player_options.php:
|
715 |
msgid ""
|
716 |
"The security feature and particular files for demo are only available in the "
|
717 |
"PRO version of the plugin"
|
718 |
msgstr ""
|
719 |
|
720 |
-
#: views/player_options.php:
|
721 |
msgid ""
|
722 |
"For testing the premium version of the plugin, visit the online demo:<br/> "
|
723 |
"<a href=\"https://demos.dwbooster.com/music-player-for-woocommerce/wp-login."
|
@@ -727,45 +797,45 @@ msgid ""
|
|
727 |
"WooCommerce Store</a>"
|
728 |
msgstr ""
|
729 |
|
730 |
-
#: views/player_options.php:
|
731 |
msgid ""
|
732 |
"The player is shown only if the product is \"downloadable\", and there is at "
|
733 |
"least an audio file between the \"Downloadable files\""
|
734 |
msgstr ""
|
735 |
|
736 |
-
#: views/player_options.php:
|
737 |
msgid "Include on products pages"
|
738 |
msgstr ""
|
739 |
|
740 |
-
#: views/player_options.php:
|
741 |
msgid "Include on product and multiple-entry pages"
|
742 |
msgstr ""
|
743 |
|
744 |
-
#: views/player_options.php:
|
745 |
msgid "Own demo files"
|
746 |
msgstr ""
|
747 |
|
748 |
-
#: views/player_options.php:
|
749 |
msgid "Select my own demo files"
|
750 |
msgstr ""
|
751 |
|
752 |
-
#: views/player_options.php:
|
753 |
msgid "Demo files"
|
754 |
msgstr ""
|
755 |
|
756 |
-
#: views/player_options.php:
|
757 |
msgid "Name"
|
758 |
msgstr ""
|
759 |
|
760 |
-
#: views/player_options.php:
|
761 |
msgid "File URL"
|
762 |
msgstr ""
|
763 |
|
764 |
-
#: views/player_options.php:
|
765 |
msgid "File name"
|
766 |
msgstr ""
|
767 |
|
768 |
-
#: views/player_options.php:
|
769 |
msgid "Add File"
|
770 |
msgstr ""
|
771 |
|
@@ -773,7 +843,7 @@ msgstr ""
|
|
773 |
msgid "Help"
|
774 |
msgstr ""
|
775 |
|
776 |
-
#: wcmp.php:
|
777 |
msgid "There are no products that satisfy the block's settings"
|
778 |
msgstr ""
|
779 |
|
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 ""
|
71 |
|
72 |
+
#: addons/dokan.addon.php:26
|
73 |
msgid ""
|
74 |
"If the \"Dokan Multivendor\" plugin is installed on the website, check the "
|
75 |
"checkbox to allow vendors to configure their music players."
|
76 |
msgstr ""
|
77 |
|
78 |
+
#: addons/dokan.addon.php:27 addons/wcfm.addon.php:27 addons/wcv.addon.php:37
|
79 |
+
msgid "Hide settings"
|
80 |
+
msgstr ""
|
81 |
+
|
82 |
+
#: addons/dokan.addon.php:27 addons/wcfm.addon.php:27 addons/wcv.addon.php:37
|
83 |
+
msgid "Hides the players settings from vendors interface."
|
84 |
+
msgstr ""
|
85 |
+
|
86 |
+
#: addons/dokan/player_options.php:9 views/player_options.php:309
|
87 |
msgid "File Name"
|
88 |
msgstr ""
|
89 |
|
90 |
+
#: addons/dokan/player_options.php:10 views/player_options.php:315
|
91 |
msgid "Choose file"
|
92 |
msgstr ""
|
93 |
|
94 |
+
#: addons/dokan/player_options.php:11 views/player_options.php:318
|
95 |
msgid "Delete"
|
96 |
msgstr ""
|
97 |
|
111 |
msgid "<p>The player uses the audio files associated to the product.</b></p>"
|
112 |
msgstr ""
|
113 |
|
114 |
+
#: addons/dokan/player_options.php:61 views/player_options.php:57
|
115 |
msgid "[+|-] Tips"
|
116 |
msgstr ""
|
117 |
|
118 |
+
#: addons/dokan/player_options.php:67 views/player_options.php:63
|
119 |
msgid "[+|-] Using the audio files stored on Google Drive"
|
120 |
msgstr ""
|
121 |
|
122 |
+
#: addons/dokan/player_options.php:75 views/player_options.php:71
|
123 |
msgid ""
|
124 |
"Go to Drive, press the right click on the file to use, and select the "
|
125 |
"option: <b>\"Get Shareable Link\"</b>"
|
126 |
msgstr ""
|
127 |
|
128 |
+
#: addons/dokan/player_options.php:83 views/player_options.php:79
|
129 |
msgid ""
|
130 |
"The previous action will generate an url with the structure: <b>https://"
|
131 |
"drive.google.com/open?id=FILE_ID</b>"
|
132 |
msgstr ""
|
133 |
|
134 |
+
#: addons/dokan/player_options.php:93 views/player_options.php:89
|
135 |
msgid ""
|
136 |
"Knowing the FILE_ID, extracted from the previous URL, enter the URL below, "
|
137 |
"into the WooCommerce product, to allow the Music Player accessing to it:"
|
138 |
msgstr ""
|
139 |
|
140 |
+
#: addons/dokan/player_options.php:104 views/player_options.php:100
|
141 |
msgid ""
|
142 |
"<b>Note:</b> Pay attention to the use of the fake parameter: <b>&.mp3</b> as "
|
143 |
"the last one in the URL"
|
144 |
msgstr ""
|
145 |
|
146 |
+
#: addons/dokan/player_options.php:114 views/player_options.php:110
|
147 |
msgid "[+|-] Using the audio files stored on DropBox"
|
148 |
msgstr ""
|
149 |
|
150 |
+
#: addons/dokan/player_options.php:122 views/player_options.php:118
|
151 |
msgid ""
|
152 |
"Sign in to <a href=\"https://www.dropbox.com/login\" target=\"_blank"
|
153 |
"\">dropbox.com </a>"
|
154 |
msgstr ""
|
155 |
|
156 |
+
#: addons/dokan/player_options.php:132 views/player_options.php:128
|
157 |
msgid ""
|
158 |
"Hover your cursor over the file or folder you'd like to share and click "
|
159 |
"<b>Share</b> when it appears."
|
160 |
msgstr ""
|
161 |
|
162 |
+
#: addons/dokan/player_options.php:142 views/player_options.php:138
|
163 |
msgid ""
|
164 |
"If a link hasn't been created, click Create a link. (If a link was already "
|
165 |
"created, click Copy link."
|
166 |
msgstr ""
|
167 |
|
168 |
+
#: addons/dokan/player_options.php:150 views/player_options.php:146
|
169 |
msgid ""
|
170 |
"The link structure would be similar to:<br> https://www.dropbox.com/s/"
|
171 |
"rycvgn8iokfedmo/file.mp3?dl=0"
|
172 |
msgstr ""
|
173 |
|
174 |
+
#: addons/dokan/player_options.php:160 views/player_options.php:156
|
175 |
msgid ""
|
176 |
"Enter the URL into the WooCommerce product with the following structure:<br> "
|
177 |
"https://www.dropbox.com/s/rycvgn8iokfedmo/file.mp3?dl=1&.mp3"
|
178 |
msgstr ""
|
179 |
|
180 |
+
#: addons/dokan/player_options.php:168 views/player_options.php:164
|
181 |
msgid ""
|
182 |
"<b>Note:</b> Pay attention to the use of the fake parameter: <b>&.mp3</b> as "
|
183 |
"the last one in the URL. Furthermore, the parameter <b>dl=0</b>, has been "
|
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 "
|
196 |
"audio files"
|
197 |
msgstr ""
|
198 |
|
199 |
+
#: addons/dokan/player_options.php:181 views/player_options.php:180
|
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 ""
|
207 |
|
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 ""
|
216 |
|
217 |
+
#: addons/dokan/player_options.php:190 views/player_options.php:189
|
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 "
|
225 |
"product's page)</i>"
|
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 ""
|
332 |
|
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 ""
|
353 |
|
355 |
msgid "Display player title"
|
356 |
msgstr ""
|
357 |
|
358 |
+
#: addons/wcfm.addon.php:26
|
359 |
msgid "Activate the WCFM add-on"
|
360 |
msgstr ""
|
361 |
|
362 |
+
#: addons/wcfm.addon.php:26
|
363 |
msgid ""
|
364 |
"If the \"WCFM - Marketplace\" plugin is installed on the website, check the "
|
365 |
"checkbox to allow vendors to configure their music players."
|
366 |
msgstr ""
|
367 |
|
368 |
+
#: addons/wcfm.addon.php:45
|
369 |
msgid "Music Player"
|
370 |
msgstr ""
|
371 |
|
372 |
+
#: addons/wcv.addon.php:36
|
373 |
msgid "Activate the WC Vendors add-on"
|
374 |
msgstr ""
|
375 |
|
376 |
+
#: addons/wcv.addon.php:36
|
377 |
msgid "Activate the WC Vendors add-on (Experimental add-on)"
|
378 |
msgstr ""
|
379 |
|
380 |
+
#: addons/wcv.addon.php:36
|
381 |
msgid ""
|
382 |
"If the \"WC Vendors\" plugin is installed on the website, check the checkbox "
|
383 |
"to allow vendors to configure their music players."
|
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 |
"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 |
"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 |
"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 |
|
784 |
+
#: views/player_options.php:50
|
785 |
msgid ""
|
786 |
"The security feature and particular files for demo are only available in the "
|
787 |
"PRO version of the plugin"
|
788 |
msgstr ""
|
789 |
|
790 |
+
#: views/player_options.php:51
|
791 |
msgid ""
|
792 |
"For testing the premium version of the plugin, visit the online demo:<br/> "
|
793 |
"<a href=\"https://demos.dwbooster.com/music-player-for-woocommerce/wp-login."
|
797 |
"WooCommerce Store</a>"
|
798 |
msgstr ""
|
799 |
|
800 |
+
#: views/player_options.php:181
|
801 |
msgid ""
|
802 |
"The player is shown only if the product is \"downloadable\", and there is at "
|
803 |
"least an audio file between the \"Downloadable files\""
|
804 |
msgstr ""
|
805 |
|
806 |
+
#: views/player_options.php:186
|
807 |
msgid "Include on products pages"
|
808 |
msgstr ""
|
809 |
|
810 |
+
#: views/player_options.php:192
|
811 |
msgid "Include on product and multiple-entry pages"
|
812 |
msgstr ""
|
813 |
|
814 |
+
#: views/player_options.php:293
|
815 |
msgid "Own demo files"
|
816 |
msgstr ""
|
817 |
|
818 |
+
#: views/player_options.php:293
|
819 |
msgid "Select my own demo files"
|
820 |
msgstr ""
|
821 |
|
822 |
+
#: views/player_options.php:297
|
823 |
msgid "Demo files"
|
824 |
msgstr ""
|
825 |
|
826 |
+
#: views/player_options.php:301
|
827 |
msgid "Name"
|
828 |
msgstr ""
|
829 |
|
830 |
+
#: views/player_options.php:302 views/player_options.php:312
|
831 |
msgid "File URL"
|
832 |
msgstr ""
|
833 |
|
834 |
+
#: views/player_options.php:309
|
835 |
msgid "File name"
|
836 |
msgstr ""
|
837 |
|
838 |
+
#: views/player_options.php:325
|
839 |
msgid "Add File"
|
840 |
msgstr ""
|
841 |
|
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 |
|
pagebuilders/elementor/elementor.pb.php
CHANGED
@@ -19,7 +19,7 @@ class Elementor_WCMP_Widget extends Widget_Base
|
|
19 |
|
20 |
public function get_icon()
|
21 |
{
|
22 |
-
return '
|
23 |
} // End get_icon
|
24 |
|
25 |
public function get_categories()
|
@@ -104,7 +104,6 @@ class Elementor_WCMP_Widget extends Widget_Base
|
|
104 |
echo $this->_get_shortcode();
|
105 |
} // End render_plain_content
|
106 |
|
107 |
-
protected function _content_template() {} // End _content_template
|
108 |
} // End Elementor_WCMP_Widget
|
109 |
|
110 |
|
19 |
|
20 |
public function get_icon()
|
21 |
{
|
22 |
+
return 'eicon-video-playlist';
|
23 |
} // End get_icon
|
24 |
|
25 |
public function get_categories()
|
104 |
echo $this->_get_shortcode();
|
105 |
} // End render_plain_content
|
106 |
|
|
|
107 |
} // End Elementor_WCMP_Widget
|
108 |
|
109 |
|
readme.txt
CHANGED
@@ -3,7 +3,7 @@ Contributors: codepeople
|
|
3 |
Donate link: https://wcmp.dwbooster.com
|
4 |
Tags:WooCommerce,music player,audio,music,song,player,audio player,media player,mp3,m3u,m3u8,wav,oga,ogg,dokan,wcfm
|
5 |
Requires at least: 3.5.0
|
6 |
-
Tested up to: 5.
|
7 |
Stable tag: trunk
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
@@ -144,6 +144,10 @@ The shortcode attributes are:
|
|
144 |
|
145 |
`[wcmp-playlist products_ids="*" layout="classic"]`
|
146 |
|
|
|
|
|
|
|
|
|
147 |
|
148 |
Note: In mobiles devices where the direct action of user is required for playing audios and videos, the plugin cannot start playing dynamically.
|
149 |
|
@@ -155,10 +159,10 @@ Note: In mobiles devices where the direct action of user is required for playing
|
|
155 |
* wcmp_before_players_product_page: action called before the players containers in the products pages.
|
156 |
* wcmp_after_players_product_page: action called after the players containers in the products pages.
|
157 |
|
158 |
-
* wcmp_audio_tag: filter called when the audio tag is generated. The callback function receives
|
159 |
* wcmp_file_name: filter called when the file's name is included with the player. The callback function receives three parameters: the file's name, the product's id, and the file's id;
|
160 |
|
161 |
-
* wcmp_widget_audio_tag: filter called when the audio tag is generated as a widget on sidebars. The callback function receives
|
162 |
* wcmp_widget_file_name: filter called when the file's name is included with the player as a widget on sidebars. The callback function receives three parameters: the file's name, the product's id, and the file's id;
|
163 |
|
164 |
**Other recommended plugins**
|
@@ -200,6 +204,84 @@ Each time save the data of a product, the files for demo are deleted and generat
|
|
200 |
|
201 |
== Changelog ==
|
202 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
203 |
= 1.0.141 =
|
204 |
|
205 |
* Improves the integration with the Gutenberg Editor.
|
3 |
Donate link: https://wcmp.dwbooster.com
|
4 |
Tags:WooCommerce,music player,audio,music,song,player,audio player,media player,mp3,m3u,m3u8,wav,oga,ogg,dokan,wcfm
|
5 |
Requires at least: 3.5.0
|
6 |
+
Tested up to: 5.9
|
7 |
Stable tag: trunk
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
144 |
|
145 |
`[wcmp-playlist products_ids="*" layout="classic"]`
|
146 |
|
147 |
+
* purchased_products: generates the list of products purchased by the logged user. `purchased_products="1"`
|
148 |
+
|
149 |
+
`[wcmp-playlist purchased_products="1" layout="classic"]`
|
150 |
+
|
151 |
|
152 |
Note: In mobiles devices where the direct action of user is required for playing audios and videos, the plugin cannot start playing dynamically.
|
153 |
|
159 |
* wcmp_before_players_product_page: action called before the players containers in the products pages.
|
160 |
* wcmp_after_players_product_page: action called after the players containers in the products pages.
|
161 |
|
162 |
+
* wcmp_audio_tag: filter called when the audio tag is generated. The callback function receives four parameters: the audio tag, the product's id, the file's id, URL to the audio file;
|
163 |
* wcmp_file_name: filter called when the file's name is included with the player. The callback function receives three parameters: the file's name, the product's id, and the file's id;
|
164 |
|
165 |
+
* wcmp_widget_audio_tag: filter called when the audio tag is generated as a widget on sidebars. The callback function receives four parameters: the audio tag, the product's id, the file's id, URL to the audio file;
|
166 |
* wcmp_widget_file_name: filter called when the file's name is included with the player as a widget on sidebars. The callback function receives three parameters: the file's name, the product's id, and the file's id;
|
167 |
|
168 |
**Other recommended plugins**
|
204 |
|
205 |
== Changelog ==
|
206 |
|
207 |
+
= 1.0.161 =
|
208 |
+
|
209 |
+
* Fixes an issue with the players in the WooCommerce products list (backend).
|
210 |
+
|
211 |
+
= 1.0.160 =
|
212 |
+
|
213 |
+
* Modifies the Elementor widget.
|
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 |
+
|
233 |
+
Fixes a conflict with some theme styles.
|
234 |
+
|
235 |
+
= 1.0.154 =
|
236 |
+
|
237 |
+
* Implements support for the loop attribute in the playlist shortcode.
|
238 |
+
|
239 |
+
= 1.0.153 =
|
240 |
+
|
241 |
+
* Modifies the Elementor widget.
|
242 |
+
|
243 |
+
= 1.0.152 =
|
244 |
+
|
245 |
+
* Includes support for the class attribute in the playlist shortcode. The new attribute allows you to assign a class name to the playlist container to customize the appearance of the players easier.
|
246 |
+
|
247 |
+
= 1.0.151 =
|
248 |
+
|
249 |
+
* Accepts other products types like Auctions, included by third-party plugins.
|
250 |
+
|
251 |
+
= 1.0.150 =
|
252 |
+
|
253 |
+
* Includes the purchased_products attribute to generate the list of products purchased by the logged user.
|
254 |
+
|
255 |
+
= 1.0.149 =
|
256 |
+
|
257 |
+
* Modifies the CSS.
|
258 |
+
|
259 |
+
= 1.0.148 =
|
260 |
+
|
261 |
+
* Fixes some compatibility issues with the latest update of WooCommerce.
|
262 |
+
|
263 |
+
= 1.0.147 =
|
264 |
+
= 1.0.146 =
|
265 |
+
|
266 |
+
* Fixes a conflict with third-party themes.
|
267 |
+
|
268 |
+
= 1.0.145 =
|
269 |
+
|
270 |
+
* Modifies the integration with the third-party players, CP Media Player, Compact Audio Player, and HTML5 Audio Player.
|
271 |
+
* Implement the integration with the third-party player MP3 jPlayer.
|
272 |
+
|
273 |
+
= 1.0.144 =
|
274 |
+
|
275 |
+
* Implements new add-ons to allow using players in third-party plugins active on the website (Like CP Media Player, Compact Audio Player, and HTML5 Audio Player).
|
276 |
+
|
277 |
+
= 1.0.143 =
|
278 |
+
|
279 |
+
* Modifies the global settings. Allows to reset the demos of purchased files.
|
280 |
+
|
281 |
+
= 1.0.142 =
|
282 |
+
|
283 |
+
* Modifies the integration with multivendor plugins (Dokan, WC Vendors, WCFM). Now, the plugin allows disabling the players' settings from the product's edition.
|
284 |
+
|
285 |
= 1.0.141 =
|
286 |
|
287 |
* Improves the integration with the Gutenberg Editor.
|
views/global_options.php
CHANGED
@@ -3,6 +3,7 @@ if( !defined( 'WCMP_PLUGIN_URL' ) ) { echo 'Direct access not allowed.'; exit;
|
|
3 |
|
4 |
// include resources
|
5 |
wp_enqueue_style( 'wcmp-admin-style', plugin_dir_url(__FILE__).'../css/style.admin.css', array(), '5.0.23' );
|
|
|
6 |
|
7 |
$troubleshoot_default_extension = $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr( '_wcmp_default_extension', false );
|
8 |
$force_main_player_in_title = $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr( '_wcmp_force_main_player_in_title', 1 );
|
@@ -89,8 +90,14 @@ _e(
|
|
89 |
<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>
|
90 |
</tr>
|
91 |
<tr>
|
92 |
-
<td width="30%" style="color:#DDDDDD;"><?php _e( 'For buyers, play the purchased audio files instead the truncated files for demo', 'music-player-for-woocommerce' ); ?></td>
|
93 |
-
<td
|
|
|
|
|
|
|
|
|
|
|
|
|
94 |
</tr>
|
95 |
<tr>
|
96 |
<td colspan="2"><hr /></td>
|
3 |
|
4 |
// include resources
|
5 |
wp_enqueue_style( 'wcmp-admin-style', plugin_dir_url(__FILE__).'../css/style.admin.css', array(), '5.0.23' );
|
6 |
+
wp_enqueue_script( 'wcmp-admin-js', plugin_dir_url(__FILE__).'../js/admin.js' );
|
7 |
|
8 |
$troubleshoot_default_extension = $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr( '_wcmp_default_extension', false );
|
9 |
$force_main_player_in_title = $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr( '_wcmp_force_main_player_in_title', 1 );
|
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>
|
92 |
<tr>
|
93 |
+
<td width="30%" style="color:#DDDDDD;"><?php _e( 'For buyers, play the purchased audio files instead of the truncated files for demo', 'music-player-for-woocommerce' ); ?></td>
|
94 |
+
<td style="color:#DDDDDD;">
|
95 |
+
<input aria-label="<?php print esc_attr(__('For buyers, play the purchased audio files instead of the truncated files for demo','music-player-for-woocommerce')); ?>" type="checkbox" DISABLED />
|
96 |
+
<?php _e( 'Reset the files', 'music-player-for-woocommerce' ); ?>
|
97 |
+
<select aria-label="<?php esc_attr_e('Reset files interval', 'music-player-for-woocommerce'); ?>" DISABLED>
|
98 |
+
<option><?php print esc_html(__('daily', 'music-player-for-woocommerce')); ?></option>
|
99 |
+
</select>
|
100 |
+
</td>
|
101 |
</tr>
|
102 |
<tr>
|
103 |
<td colspan="2"><hr /></td>
|
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.
|
6 |
Text Domain: music-player-for-woocommerce
|
7 |
Author: CodePeople
|
8 |
Author URI: https://wcmp.dwbooster.com
|
@@ -45,6 +45,8 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
45 |
private $_enqueued_resources = false;
|
46 |
private $_insert_player = true;
|
47 |
|
|
|
|
|
48 |
/**
|
49 |
* WCMP constructor
|
50 |
*
|
@@ -56,6 +58,9 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
56 |
$this->_createDir();
|
57 |
register_activation_hook( __FILE__, array( &$this, 'activation' ) );
|
58 |
register_deactivation_hook( __FILE__, array( &$this, 'deactivation' ) );
|
|
|
|
|
|
|
59 |
add_action( 'plugins_loaded', array(&$this, 'load_textdomain') );
|
60 |
add_action('init', array(&$this, 'init'));
|
61 |
add_action('admin_init', array(&$this, 'admin_init'), 99);
|
@@ -98,7 +103,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
98 |
$this->_products_attrs[ $product_id ][ $attr ] = $this->get_global_attr($attr, $default);
|
99 |
}
|
100 |
}
|
101 |
-
return $this->_products_attrs[ $product_id ][ $attr ];
|
102 |
|
103 |
} // End get_product_attr
|
104 |
|
@@ -106,7 +111,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
106 |
{
|
107 |
if(empty($this->_global_attrs)) $this->_global_attrs = get_option('wcmp_global_settings',array());
|
108 |
if( !isset( $this->_global_attrs[ $attr ] ) ) $this->_global_attrs[ $attr ] = $default;
|
109 |
-
return $this->_global_attrs[ $attr ];
|
110 |
|
111 |
} // End get_global_attr
|
112 |
|
@@ -164,7 +169,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
164 |
if(empty($include_main_player_hook)) $include_main_player_hook = 'woocommerce_shop_loop_item_title';
|
165 |
if(empty($include_all_players_hook)) $include_all_players_hook = 'woocommerce_single_product_summary';
|
166 |
|
167 |
-
if($this->
|
168 |
{
|
169 |
add_action( $include_main_player_hook, array( &$this, 'include_main_player' ), 11 );
|
170 |
}
|
@@ -185,7 +190,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
185 |
}
|
186 |
|
187 |
// Add product id to audio tag
|
188 |
-
add_filter('wcmp_audio_tag', array(&$this, 'add_data_product'), 99,
|
189 |
|
190 |
// Add class name to the feature image of product
|
191 |
add_filter('woocommerce_product_get_image', array(&$this, 'add_class_attachment'),99,6);
|
@@ -426,7 +431,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
426 |
wp_enqueue_style( 'wcmp-style', plugin_dir_url(__FILE__).'css/style.css' );
|
427 |
wp_enqueue_script('jquery');
|
428 |
wp_enqueue_script('wp-mediaelement');
|
429 |
-
wp_enqueue_script('wcmp-script', plugin_dir_url(__FILE__).'js/public.js', array('jquery', 'wp-mediaelement'), '1.0.
|
430 |
|
431 |
$play_all = $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr(
|
432 |
'_wcmp_play_all',
|
@@ -481,14 +486,24 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
481 |
|
482 |
if(!is_array($atts)) $atts = array();
|
483 |
$post_types = $this->_get_post_types();
|
484 |
-
if(
|
|
|
|
|
|
|
|
|
|
|
485 |
{
|
486 |
try{
|
487 |
ob_start();
|
488 |
$this->include_all_players($post->ID);
|
489 |
$output = ob_get_contents();
|
490 |
ob_end_clean();
|
491 |
-
|
|
|
|
|
|
|
|
|
|
|
492 |
}
|
493 |
catch(Exception $err)
|
494 |
{
|
@@ -500,6 +515,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
500 |
shortcode_atts(
|
501 |
array(
|
502 |
'products_ids' => '*',
|
|
|
503 |
'highlight_current_product' => 0,
|
504 |
'continue_playing' => 0,
|
505 |
'player_style' => WCMP_DEFAULT_PLAYER_LAYOUT,
|
@@ -507,7 +523,9 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
507 |
'layout' => 'new',
|
508 |
'cover' => 0,
|
509 |
'volume' => 1,
|
510 |
-
'hide_purchase_buttons' => 0
|
|
|
|
|
511 |
),
|
512 |
$atts
|
513 |
)
|
@@ -529,19 +547,64 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
529 |
|
530 |
$current_post_id = !empty( $post ) ? (is_int($post) ? $post : $post->ID) : -1;
|
531 |
|
532 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
533 |
|
534 |
-
if( strpos( '*', $products_ids ) === false )
|
535 |
-
{
|
536 |
-
$query .= ' AND posts.ID IN ('.$products_ids.')';
|
537 |
-
$query .= ' ORDER BY FIELD(posts.ID,'.$products_ids.')';
|
538 |
-
}
|
539 |
-
else
|
540 |
-
{
|
541 |
-
$query .= ' ORDER BY posts.post_title ASC';
|
542 |
-
}
|
543 |
-
|
544 |
-
$products = $wpdb->get_results( $query );
|
545 |
if( !empty( $products ) )
|
546 |
{
|
547 |
// Enqueue resources
|
@@ -555,13 +618,14 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
555 |
array('continue_playing' => $continue_playing)
|
556 |
);
|
557 |
$counter = 0;
|
|
|
558 |
foreach( $products as $product )
|
559 |
{
|
560 |
$product_obj = wc_get_product( $product->ID );
|
561 |
$counter++;
|
562 |
$preload = $this->get_product_attr($product->ID, '_wcmp_preload', '');
|
563 |
-
$
|
564 |
-
if( $counter%2 == 1) $
|
565 |
|
566 |
$audio_files = $this->get_product_files( $product->ID );
|
567 |
if(!is_array($audio_files)) continue;
|
@@ -575,7 +639,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
575 |
{
|
576 |
$price = $product_obj->get_price();
|
577 |
$output .= '
|
578 |
-
<div class="wcmp-widget-product controls-'.esc_attr($controls).' '.esc_attr(
|
579 |
<div class="wcmp-widget-product-header">
|
580 |
<div class="wcmp-widget-product-title">
|
581 |
<a href="'.esc_url( get_permalink( $product->ID ) ).'">'.$product_obj->get_name().'</a>
|
@@ -614,7 +678,8 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
614 |
)
|
615 |
),
|
616 |
$product->ID,
|
617 |
-
$index
|
|
|
618 |
);
|
619 |
$file_title = esc_html(apply_filters('wcmp_widget_file_name', $file[ 'name' ], $product->ID, $index));
|
620 |
$output .= '
|
@@ -636,7 +701,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
636 |
}
|
637 |
else // Load the previous playlist layout
|
638 |
{
|
639 |
-
$output .= '<ul class="wcmp-widget-playlist controls-'.esc_attr($controls).' '.esc_attr(
|
640 |
|
641 |
if(!empty($featured_image))
|
642 |
$output .= '<li style="display:table-row;"><img src="'.esc_attr($featured_image).'" class="wcmp-widget-feature-image" /><div class="wcmp-widget-product-files-list"><ul>';
|
@@ -660,7 +725,8 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
660 |
)
|
661 |
),
|
662 |
$product->ID,
|
663 |
-
$index
|
|
|
664 |
);
|
665 |
$file_title = esc_html(apply_filters('wcmp_widget_file_name', ( ( !empty( $file[ 'name' ] ) ) ? $file[ 'name' ] : $product->post_title ),$product->ID, $index));
|
666 |
|
@@ -673,6 +739,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
673 |
$output .= '</ul>';
|
674 |
}
|
675 |
}
|
|
|
676 |
}
|
677 |
return $output;
|
678 |
} // End replace_playlist_shortcode
|
@@ -751,10 +818,10 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
751 |
|
752 |
public function include_main_player_filter($value,$id)
|
753 |
{
|
754 |
-
if($this->
|
755 |
{
|
756 |
try{
|
757 |
-
if(!is_product() && !is_cart() && !is_page('cart') && !is_checkout() && is_int($id))
|
758 |
{
|
759 |
$p = wc_get_product($id);
|
760 |
if(!empty($p))
|
@@ -811,7 +878,8 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
811 |
)
|
812 |
),
|
813 |
$id,
|
814 |
-
$index
|
|
|
815 |
);
|
816 |
|
817 |
do_action('wcmp_before_player_shop_page',$id);
|
@@ -844,6 +912,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
844 |
$merge_grouped_clss = ($merge_grouped) ? 'merge_in_grouped_products' : '';
|
845 |
|
846 |
$counter = count( $files );
|
|
|
847 |
do_action('wcmp_before_players_product_page',$id);
|
848 |
if( $counter == 1 )
|
849 |
{
|
@@ -866,7 +935,8 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
866 |
)
|
867 |
),
|
868 |
$id,
|
869 |
-
$index
|
|
|
870 |
);
|
871 |
$title = esc_html(($player_title)?apply_filters('wcmp_file_name',$file['name'],$id,$index):'');
|
872 |
print '<div class="wcmp-player-container '.$merge_grouped_clss.' product-'.$file['product'].'">'.$audio_tag.'</div><div class="wcmp-player-title">'.$title.'</div><div style="clear:both;"></div>';
|
@@ -895,7 +965,8 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
895 |
)
|
896 |
),
|
897 |
$id,
|
898 |
-
$index
|
|
|
899 |
);
|
900 |
$title = esc_html(($player_title)?apply_filters('wcmp_file_name',$file['name'],$id,$index):'');
|
901 |
|
@@ -934,7 +1005,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
934 |
return $player.$name;
|
935 |
} // product_table_data_name
|
936 |
|
937 |
-
public function add_data_product($player, $product_id, $index)
|
938 |
{
|
939 |
$player = preg_replace('/<audio\b/i', '<audio controlslist="nodownload" data-product="'.esc_attr($product_id).'" ',$player);
|
940 |
return $player;
|
@@ -959,6 +1030,16 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
959 |
} // add_class_single_product_image
|
960 |
|
961 |
//******************** PRIVATE METHODS ************************
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
962 |
private function _get_post_types($mysql_in = false)
|
963 |
{
|
964 |
$post_types = array('product');
|
@@ -1221,12 +1302,6 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
1221 |
|
1222 |
switch( $product_type )
|
1223 |
{
|
1224 |
-
case 'simple':
|
1225 |
-
// $_files = $product->get_files();
|
1226 |
-
$_files = $product->get_downloads();
|
1227 |
-
$_files = $this->_edit_files_array($id, $_files );
|
1228 |
-
$files_arr = array_merge( $files_arr, $_files );
|
1229 |
-
break;
|
1230 |
case 'variable':
|
1231 |
case 'grouped':
|
1232 |
$children = $product->get_children();
|
@@ -1238,8 +1313,12 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
1238 |
|
1239 |
foreach( $children as $child_obj )
|
1240 |
$files_arr = $this->_get_recursive_product_files( $child_obj, $files_arr );
|
1241 |
-
|
1242 |
break;
|
|
|
|
|
|
|
|
|
|
|
1243 |
}
|
1244 |
}
|
1245 |
return $files_arr;
|
@@ -1311,7 +1390,8 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
1311 |
$url = $args[ 'url' ];
|
1312 |
$url = do_shortcode($url);
|
1313 |
|
1314 |
-
if(
|
|
|
1315 |
elseif(strpos($url, '/') === 0) $url_fixed = rtrim(WCMP_WEBSITE_URL, '/').$url;
|
1316 |
else $url_fixed = $url;
|
1317 |
|
@@ -1388,6 +1468,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
|
|
1388 |
|
1389 |
private function _is_local( $url )
|
1390 |
{
|
|
|
1391 |
$attachment_id = attachment_url_to_postid( $url );
|
1392 |
if( $attachment_id )
|
1393 |
{
|
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
|
45 |
private $_enqueued_resources = false;
|
46 |
private $_insert_player = true;
|
47 |
|
48 |
+
private $_force_hook_title = 0;
|
49 |
+
|
50 |
/**
|
51 |
* WCMP constructor
|
52 |
*
|
58 |
$this->_createDir();
|
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);
|
103 |
$this->_products_attrs[ $product_id ][ $attr ] = $this->get_global_attr($attr, $default);
|
104 |
}
|
105 |
}
|
106 |
+
return apply_filters('wcmp_product_attr', $this->_products_attrs[ $product_id ][ $attr ], $product_id, $attr);
|
107 |
|
108 |
} // End get_product_attr
|
109 |
|
111 |
{
|
112 |
if(empty($this->_global_attrs)) $this->_global_attrs = get_option('wcmp_global_settings',array());
|
113 |
if( !isset( $this->_global_attrs[ $attr ] ) ) $this->_global_attrs[ $attr ] = $default;
|
114 |
+
return apply_filters('wcmp_global_attr', $this->_global_attrs[ $attr ], $attr);
|
115 |
|
116 |
} // End get_global_attr
|
117 |
|
169 |
if(empty($include_main_player_hook)) $include_main_player_hook = 'woocommerce_shop_loop_item_title';
|
170 |
if(empty($include_all_players_hook)) $include_all_players_hook = 'woocommerce_single_product_summary';
|
171 |
|
172 |
+
if($this->_force_hook_title == 0)
|
173 |
{
|
174 |
add_action( $include_main_player_hook, array( &$this, 'include_main_player' ), 11 );
|
175 |
}
|
190 |
}
|
191 |
|
192 |
// Add product id to audio tag
|
193 |
+
add_filter('wcmp_audio_tag', array(&$this, 'add_data_product'), 99, 4);
|
194 |
|
195 |
// Add class name to the feature image of product
|
196 |
add_filter('woocommerce_product_get_image', array(&$this, 'add_class_attachment'),99,6);
|
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',
|
486 |
|
487 |
if(!is_array($atts)) $atts = array();
|
488 |
$post_types = $this->_get_post_types();
|
489 |
+
if(
|
490 |
+
empty($atts['products_ids']) &&
|
491 |
+
empty($atts['purchased_products']) &&
|
492 |
+
!empty($post) &&
|
493 |
+
in_array($post->post_type, $post_types)
|
494 |
+
)
|
495 |
{
|
496 |
try{
|
497 |
ob_start();
|
498 |
$this->include_all_players($post->ID);
|
499 |
$output = ob_get_contents();
|
500 |
ob_end_clean();
|
501 |
+
|
502 |
+
$class = esc_attr(isset($atts['class']) ? $atts['class'] : '');
|
503 |
+
|
504 |
+
return strpos($output, 'wcmp-player-list') !== false ?
|
505 |
+
str_replace('wcmp-player-list', $class.' wcmp-player-list', $output) :
|
506 |
+
str_replace('wcmp-player-container', $class.' wcmp-player-container', $output);
|
507 |
}
|
508 |
catch(Exception $err)
|
509 |
{
|
515 |
shortcode_atts(
|
516 |
array(
|
517 |
'products_ids' => '*',
|
518 |
+
'purchased_products' => 0,
|
519 |
'highlight_current_product' => 0,
|
520 |
'continue_playing' => 0,
|
521 |
'player_style' => WCMP_DEFAULT_PLAYER_LAYOUT,
|
523 |
'layout' => 'new',
|
524 |
'cover' => 0,
|
525 |
'volume' => 1,
|
526 |
+
'hide_purchase_buttons' => 0,
|
527 |
+
'class' => '',
|
528 |
+
'loop' => 0
|
529 |
),
|
530 |
$atts
|
531 |
)
|
547 |
|
548 |
$current_post_id = !empty( $post ) ? (is_int($post) ? $post : $post->ID) : -1;
|
549 |
|
550 |
+
$query = 'SELECT posts.ID FROM '.$wpdb->posts.' AS posts, '.$wpdb->postmeta.' as postmeta WHERE posts.post_status="publish" AND posts.post_type IN ('.$this->_get_post_types(true).') AND posts.ID = postmeta.post_id AND postmeta.meta_key="_wcmp_enable_player" AND (postmeta.meta_value="yes" OR postmeta.meta_value="1")';
|
551 |
+
|
552 |
+
if(!empty($purchased_products))
|
553 |
+
{
|
554 |
+
// Hide the purchase buttons
|
555 |
+
$hide_purchase_buttons = 1;
|
556 |
+
|
557 |
+
// Getting the list of purchased products
|
558 |
+
$_current_user_id = get_current_user_id();
|
559 |
+
if($_current_user_id == 0) return $output;
|
560 |
+
|
561 |
+
// GET USER ORDERS (COMPLETED + PROCESSING)
|
562 |
+
$customer_orders = get_posts(
|
563 |
+
array(
|
564 |
+
'numberposts' => -1,
|
565 |
+
'meta_key' => '_customer_user',
|
566 |
+
'meta_value' => $_current_user_id,
|
567 |
+
'post_type' => wc_get_order_types(),
|
568 |
+
'post_status' => array_keys( wc_get_is_paid_statuses() ),
|
569 |
+
)
|
570 |
+
);
|
571 |
+
|
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 |
+
{
|
579 |
+
$order = wc_get_order($customer_order->ID);
|
580 |
+
$items = $order->get_items();
|
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 |
+
{
|
595 |
+
if( strpos( '*', $products_ids ) === false )
|
596 |
+
{
|
597 |
+
$query .= ' AND posts.ID IN ('.$products_ids.')';
|
598 |
+
$query .= ' ORDER BY FIELD(posts.ID,'.$products_ids.')';
|
599 |
+
}
|
600 |
+
else
|
601 |
+
{
|
602 |
+
$query .= ' ORDER BY posts.post_title ASC';
|
603 |
+
}
|
604 |
+
}
|
605 |
+
|
606 |
+
$products = $wpdb->get_results( $query );
|
607 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
608 |
if( !empty( $products ) )
|
609 |
{
|
610 |
// Enqueue resources
|
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 );
|
625 |
$counter++;
|
626 |
$preload = $this->get_product_attr($product->ID, '_wcmp_preload', '');
|
627 |
+
$row_class = 'wcmp-even-product';
|
628 |
+
if( $counter%2 == 1) $row_class = 'wcmp-odd-product';
|
629 |
|
630 |
$audio_files = $this->get_product_files( $product->ID );
|
631 |
if(!is_array($audio_files)) continue;
|
639 |
{
|
640 |
$price = $product_obj->get_price();
|
641 |
$output .= '
|
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>
|
678 |
)
|
679 |
),
|
680 |
$product->ID,
|
681 |
+
$index,
|
682 |
+
$audio_url
|
683 |
);
|
684 |
$file_title = esc_html(apply_filters('wcmp_widget_file_name', $file[ 'name' ], $product->ID, $index));
|
685 |
$output .= '
|
701 |
}
|
702 |
else // Load the previous playlist layout
|
703 |
{
|
704 |
+
$output .= '<ul class="wcmp-widget-playlist controls-'.esc_attr($controls).' '.esc_attr($class).' '.esc_attr( $row_class ).' '.esc_attr( ( $product->ID == $current_post_id && $highlight_current_product) ? 'wcmp-current-product' : '' ).'">';
|
705 |
|
706 |
if(!empty($featured_image))
|
707 |
$output .= '<li style="display:table-row;"><img src="'.esc_attr($featured_image).'" class="wcmp-widget-feature-image" /><div class="wcmp-widget-product-files-list"><ul>';
|
725 |
)
|
726 |
),
|
727 |
$product->ID,
|
728 |
+
$index,
|
729 |
+
$audio_url
|
730 |
);
|
731 |
$file_title = esc_html(apply_filters('wcmp_widget_file_name', ( ( !empty( $file[ 'name' ] ) ) ? $file[ 'name' ] : $product->post_title ),$product->ID, $index));
|
732 |
|
739 |
$output .= '</ul>';
|
740 |
}
|
741 |
}
|
742 |
+
$output .= '</div>';
|
743 |
}
|
744 |
return $output;
|
745 |
} // End replace_playlist_shortcode
|
818 |
|
819 |
public function include_main_player_filter($value,$id)
|
820 |
{
|
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))
|
878 |
)
|
879 |
),
|
880 |
$id,
|
881 |
+
$index,
|
882 |
+
$audio_url
|
883 |
);
|
884 |
|
885 |
do_action('wcmp_before_player_shop_page',$id);
|
912 |
$merge_grouped_clss = ($merge_grouped) ? 'merge_in_grouped_products' : '';
|
913 |
|
914 |
$counter = count( $files );
|
915 |
+
|
916 |
do_action('wcmp_before_players_product_page',$id);
|
917 |
if( $counter == 1 )
|
918 |
{
|
935 |
)
|
936 |
),
|
937 |
$id,
|
938 |
+
$index,
|
939 |
+
$audio_url
|
940 |
);
|
941 |
$title = esc_html(($player_title)?apply_filters('wcmp_file_name',$file['name'],$id,$index):'');
|
942 |
print '<div class="wcmp-player-container '.$merge_grouped_clss.' product-'.$file['product'].'">'.$audio_tag.'</div><div class="wcmp-player-title">'.$title.'</div><div style="clear:both;"></div>';
|
965 |
)
|
966 |
),
|
967 |
$id,
|
968 |
+
$index,
|
969 |
+
$audio_url
|
970 |
);
|
971 |
$title = esc_html(($player_title)?apply_filters('wcmp_file_name',$file['name'],$id,$index):'');
|
972 |
|
1005 |
return $player.$name;
|
1006 |
} // product_table_data_name
|
1007 |
|
1008 |
+
public function add_data_product($player, $product_id, $index, $url)
|
1009 |
{
|
1010 |
$player = preg_replace('/<audio\b/i', '<audio controlslist="nodownload" data-product="'.esc_attr($product_id).'" ',$player);
|
1011 |
return $player;
|
1030 |
} // add_class_single_product_image
|
1031 |
|
1032 |
//******************** PRIVATE METHODS ************************
|
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;
|
1040 |
+
|
1041 |
+
} // End _init_force_in_title
|
1042 |
+
|
1043 |
private function _get_post_types($mysql_in = false)
|
1044 |
{
|
1045 |
$post_types = array('product');
|
1302 |
|
1303 |
switch( $product_type )
|
1304 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
1305 |
case 'variable':
|
1306 |
case 'grouped':
|
1307 |
$children = $product->get_children();
|
1313 |
|
1314 |
foreach( $children as $child_obj )
|
1315 |
$files_arr = $this->_get_recursive_product_files( $child_obj, $files_arr );
|
|
|
1316 |
break;
|
1317 |
+
default:
|
1318 |
+
$_files = $product->get_downloads();
|
1319 |
+
$_files = $this->_edit_files_array($id, $_files);
|
1320 |
+
$files_arr = array_merge( $files_arr, $_files );
|
1321 |
+
break;
|
1322 |
}
|
1323 |
}
|
1324 |
return $files_arr;
|
1390 |
$url = $args[ 'url' ];
|
1391 |
$url = do_shortcode($url);
|
1392 |
|
1393 |
+
if(file_exists($url)) $url_fixed = $url;
|
1394 |
+
elseif(strpos($url, '//') === 0) $url_fixed = 'http'.(is_ssl() ? 's:' : ':').$url;
|
1395 |
elseif(strpos($url, '/') === 0) $url_fixed = rtrim(WCMP_WEBSITE_URL, '/').$url;
|
1396 |
else $url_fixed = $url;
|
1397 |
|
1468 |
|
1469 |
private function _is_local( $url )
|
1470 |
{
|
1471 |
+
if(file_exists($url)) return $url;
|
1472 |
$attachment_id = attachment_url_to_postid( $url );
|
1473 |
if( $attachment_id )
|
1474 |
{
|
widgets/playlist_widget/css/style.css
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
.wcmp-widget-playlist{list-style: none; margin:0 !important; padding:0 !important;}
|
2 |
.wcmp-widget-playlist ul{margin: 0; padding: 0;}
|
3 |
.wcmp-widget-playlist *{word-break:normal !important;}
|
4 |
-
.controls-track .wcmp-widget-playlist-item{display: flex; align-items:center; line-height:normal;padding: 5px
|
5 |
.wcmp-widget-playlist-item .mejs-controls{top: 0;}
|
6 |
.wcmp-odd-product{background-color:#FAFAFA; border-top: 1px solid #DADADA; border-bottom: 1px solid #DADADA;}
|
7 |
.wcmp-current-product{background-color:#FFFFD7;}
|
@@ -22,6 +22,7 @@
|
|
22 |
display:inline-block; width:24px; height:24px;
|
23 |
}
|
24 |
.wcmp-widget-product .wcmp-widget-product-file{display:flex;align-items:center;margin-bottom:5px;}
|
|
|
25 |
|
26 |
.wcmp-widget-product-files{display: table;width:100%;}
|
27 |
.wcmp-widget-feature-image{display:table-cell;max-width:80px;margin-right:10px;}
|
1 |
.wcmp-widget-playlist{list-style: none; margin:0 !important; padding:0 !important;}
|
2 |
.wcmp-widget-playlist ul{margin: 0; padding: 0;}
|
3 |
.wcmp-widget-playlist *{word-break:normal !important;}
|
4 |
+
.controls-track .wcmp-widget-playlist-item{display: flex !important; align-items:center; line-height:normal;padding: 5px !important;clear:both;}
|
5 |
.wcmp-widget-playlist-item .mejs-controls{top: 0;}
|
6 |
.wcmp-odd-product{background-color:#FAFAFA; border-top: 1px solid #DADADA; border-bottom: 1px solid #DADADA;}
|
7 |
.wcmp-current-product{background-color:#FFFFD7;}
|
22 |
display:inline-block; width:24px; height:24px;
|
23 |
}
|
24 |
.wcmp-widget-product .wcmp-widget-product-file{display:flex;align-items:center;margin-bottom:5px;}
|
25 |
+
.wcmp-widget-product.controls-all .wcmp-widget-product-file{display:block;}
|
26 |
|
27 |
.wcmp-widget-product-files{display: table;width:100%;}
|
28 |
.wcmp-widget-feature-image{display:table-cell;max-width:80px;margin-right:10px;}
|