{"id":370075,"date":"2026-09-19T11:19:17","date_gmt":"2026-09-19T11:19:17","guid":{"rendered":"https:\/\/ca.wordpress.org\/plugins\/spindle-mp3-player\/"},"modified":"2026-10-26T13:33:38","modified_gmt":"2026-10-26T13:33:38","slug":"spindle-mp3-player","status":"publish","type":"plugin","link":"https:\/\/xho.wordpress.org\/plugins\/spindle-mp3-player\/","author":14470161,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.7.0","stable_tag":"1.7.0","tested":"7.1.3","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Spindle MP3 Player","header_author":"dseny","header_description":"Audio player for albums, tracks and playlists. Web Component with Shadow DOM, own REST API, ID3-tag importer. Works on any site.","assets_banners_color":"111111","last_updated":"2026-10-26 13:33:38","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/www.dseny.es","rating":0,"author_block_rating":0,"active_installs":0,"downloads":322,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","changelog"],"tags":{"1.0.7":{"tag":"1.0.7","author":"Juanjome","date":"2026-09-19 11:18:43","revision":3703231},"1.1.1":{"tag":"1.1.1","author":"Juanjome","date":"2026-09-19 22:50:38","revision":3703716},"1.1.2":{"tag":"1.1.2","author":"Juanjome","date":"2026-09-21 11:17:16","revision":3705472},"1.1.3":{"tag":"1.1.3","author":"Juanjome","date":"2026-09-22 12:55:38","revision":3707368},"1.3.0":{"tag":"1.3.0","author":"Juanjome","date":"2026-10-18 16:32:18","revision":3753333},"1.7.0":{"tag":"1.7.0","author":"Juanjome","date":"2026-10-26 13:33:38","revision":3766531}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3703258,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3703258,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3703258,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3703258,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.7","1.1.1","1.1.2","1.1.3","1.3.0","1.7.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[452,708,218,444,220],"plugin_category":[50],"plugin_contributors":[281573],"plugin_business_model":[],"class_list":["post-370075","plugin","type-plugin","status-publish","hentry","plugin_tags-audio","plugin_tags-mp3","plugin_tags-music","plugin_tags-player","plugin_tags-playlist","plugin_category-media","plugin_contributors-juanjome","plugin_committers-juanjome"],"banners":{"banner":"https:\/\/ps.w.org\/spindle-mp3-player\/assets\/banner-772x250.png?rev=3703258","banner_2x":"https:\/\/ps.w.org\/spindle-mp3-player\/assets\/banner-1544x500.png?rev=3703258","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/spindle-mp3-player\/assets\/icon-128x128.png?rev=3703258","icon_2x":"https:\/\/ps.w.org\/spindle-mp3-player\/assets\/icon-256x256.png?rev=3703258","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Spindle MP3 Player is an audio player for WordPress built as a Web Component with Shadow DOM. It lets you create albums, standalone tracks and playlists from MP3 files, choose from six visual player styles (Full, Compact, Wide, Vertical, Horizontal and Mini) and embed them on any page with a shortcode.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Custom content types: Album, Track and Playlist<\/li>\n<li>MP3 importer that reads ID3 metadata (title, artist, album, year, cover art) and automatically groups tracks by album<\/li>\n<li>Import option that reuses audio files already in the WordPress media library<\/li>\n<li>Own public REST API to consume player data from any website<\/li>\n<li>Six player styles: Full, Compact, Wide (minimalist) and Vertical, Horizontal, Mini (physical hardware look)<\/li>\n<li>Per-player customization of theme (light\/dark\/auto), accent color, background (solid\/gradient\/transparent) and corner radius<\/li>\n<li>Single-playback coordinator: only one player plays at a time on the same page<\/li>\n<li>Optional per-track download button<\/li>\n<\/ul>\n\n<h4>External services<\/h4>\n\n<p>This plugin may load the <strong>JetBrains Mono<\/strong> typeface from Google Fonts (<code>fonts.googleapis.com<\/code>) when a \"Modern Player\" style (Vertical, Horizontal or Mini) is used on a page. This request is only made on the front-end pages where such a player is displayed, and in the design-options preview inside the admin metabox. No personal data is sent beyond what any browser normally sends to a font CDN (IP address, user agent).<\/p>\n\n<ul>\n<li>Service: Google Fonts<\/li>\n<li>Privacy policy: https:\/\/policies.google.com\/privacy<\/li>\n<li>Terms of service: https:\/\/developers.google.com\/fonts\/faq<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>spindle-mp3-player<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin from the WordPress \"Plugins\" menu<\/li>\n<li>Go to the \"MP3 Player\" menu to create your first album or import existing MP3 files<\/li>\n<\/ol>\n\n<!--section=changelog-->\n<h4>1.7.0<\/h4>\n\n<ul>\n<li>Nuevo: la Configuraci\u00f3n general define los valores por defecto de variante, tema, color de acento, lista de pistas y modo de letra, con la misma interfaz que la caja de dise\u00f1o de cada player<\/li>\n<li>Estos valores se copian en cada disco, canci\u00f3n o playlist al crearlo (tambi\u00e9n desde el importador); los players ya existentes conservan su aspecto<\/li>\n<li>El color de acento por defecto pasa a ser el naranja #e8520a, primera muestra de la paleta predefinida<\/li>\n<li>Vista previa del shortcode equivalente en la Configuraci\u00f3n<\/li>\n<\/ul>\n\n<h4>1.6.1<\/h4>\n\n<ul>\n<li>En la ficha del disco, la lista de canciones muestra una columna \"Letra\" (S\u00ed \/ No) junto a la de descarga<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>Nuevo: en la ficha de una canci\u00f3n, al elegir un MP3 de la biblioteca se leen sus etiquetas ID3 y se rellenan los campos vac\u00edos (t\u00edtulo, autor, int\u00e9rpretes, n\u00ba de pista y disco si coincide con el \u00e1lbum); la letra del archivo sustituye a la actual si el archivo la trae<\/li>\n<li>Aviso bajo el selector de archivo con los campos que se han rellenado<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>Importar desde la biblioteca de medios ahora lee las etiquetas ID3 de cada archivo en el servidor: t\u00edtulo, int\u00e9rprete, compositor, \u00e1lbum, a\u00f1o, n\u00famero de pista, letra y portada incrustada, igual que al subir archivos<\/li>\n<li>Las pistas se agrupan por el \u00e1lbum de la etiqueta y se ordenan por su n\u00famero de pista<\/li>\n<li>La portada incrustada se muestra en la vista previa y se guarda como imagen destacada del disco<\/li>\n<li>El campo \"Autor\" de cada pista usa el compositor de la etiqueta (o el int\u00e9rprete si no hay compositor)<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Nuevo: al importar, si el MP3 incluye la letra en sus etiquetas (ID3v2 USLT o Lyrics3) se guarda autom\u00e1ticamente en el campo \"Letra\" de la canci\u00f3n; funciona tanto al subir archivos como desde la biblioteca de medios<\/li>\n<li>Nuevo: columna \"Letra\" en la vista previa del importador que indica qu\u00e9 pistas traen letra antes de confirmar<\/li>\n<li>Si el archivo no trae letra, el campo queda libre para a\u00f1adirla a mano como hasta ahora<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Nuevo: opci\u00f3n \"Mostrar letra en\" (desplegable bajo la pista o ventana modal) por player; atributo lyrics=\"modal\" en el shortcode<\/li>\n<li>El icono de letra aparece en todas las pistas y se ve atenuado cuando la canci\u00f3n no tiene letra<\/li>\n<li>Vertical, Horizontal y Mini respetan el tema: Light con pantalla del ecualizador en blanco, Dark con chasis e interfaz oscuros<\/li>\n<li>La marca de los players Modern pasa de \"MP3 PLAYER PRO\" a \"SPINDLE MP3 PLAYER\"<\/li>\n<li>Traducidos los estados de la pantalla (EN PAUSA \/ REPRODUCIENDO) al espa\u00f1ol y al catal\u00e1n<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Nuevo: opci\u00f3n \"Lista de pistas\" (desplegada \/ plegada) en todos los players, con valor global en Configuraci\u00f3n y atributo tracklist=\"open|closed\" en el shortcode<\/li>\n<li>Nuevo: campo \"Letra\" en cada canci\u00f3n; se muestra en un desplegable junto a la pista (todas las variantes; en Mini, bot\u00f3n de letra de la pista actual)<\/li>\n<li>Nuevo: opci\u00f3n \"Ancho\" del reproductor (por defecto 100% del contenedor) adem\u00e1s de \"Ancho m\u00e1ximo\"; atributo width=\"\u2026\" en el shortcode<\/li>\n<li>Los \"Elementos visibles\" ahora se aplican en el front en todas las variantes: descripci\u00f3n, a\u00f1o y licencia por disco; autor, int\u00e9rpretes, a\u00f1o y licencia por pista en las playlists; nuevo interruptor \"Letra\"<\/li>\n<li>Los shortcodes de canci\u00f3n y playlist ahora respetan las opciones de dise\u00f1o guardadas (tema, acento, fondo, esquinas, elementos visibles)<\/li>\n<li>Fix: el radio de esquinas guardado en el disco no se aplicaba si no se escrib\u00eda en el shortcode<\/li>\n<li>Fix: la descripci\u00f3n del disco perd\u00eda los saltos de l\u00ednea al guardar<\/li>\n<li>Fix: en Vertical\/Horizontal, pulsar descargar en la playlist tambi\u00e9n cambiaba de pista<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Fix: los archivos de traducci\u00f3n (es_ES, ca) incluidos en \/languages no se cargaban porque faltaba la llamada a load_plugin_textdomain()<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Correcci\u00f3n de versi\u00f3n: la 1.1.0\/1.1.1 nunca lleg\u00f3 a actualizar correctamente la cabecera del plugin ni este changelog (quedaban en 1.0.7 por un fallo en el proceso de publicaci\u00f3n)<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>A\u00f1adidas traducciones al espa\u00f1ol (es_ES) y catal\u00e1n (ca)<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Internacionalizaci\u00f3n completa: todos los textos del admin (dashboard, importador, metaboxes, editor de playlist, configuraci\u00f3n) ya son traducibles con el text domain spindle-mp3-player<\/li>\n<li>A\u00f1adida la plantilla de traducci\u00f3n languages\/spindle-mp3-player.pot<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>Widened the track-order column in the importer so two-digit numbers display fully<\/li>\n<li>Capped the equalizer\/waveform screen height at 188px in the Horizontal player style so it no longer stretches with long track lists<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Fixed Contributors username casing (juanjome, lowercase, matching the WordPress.org profile slug exactly)<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Converted all remaining inline <\/li>\n<li>Fixed Contributors username in readme.txt<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Fixed duplicate Plugin URI \/ Author URI header value (Plugin Check error)<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Renamed the plugin to Spindle MP3 Player<\/li>\n<li>Fixed phpcs:ignore comment scoping so it actually covers the flagged lines inside array literals (nonce check on album_id, meta_value\/meta_query\/post__not_in warnings)<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Full Plugin Check compliance pass: fixed all flagged escaping issues (esc_url, esc_js, esc_attr, intval), removed a disallowed compressed archive file, properly enqueued the ID3-reading script instead of a raw <\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Security hardening: consistent wp_unslash() on all $_POST\/$_GET reads, output escaping (esc_html, esc_attr, esc_js, esc_url, intval) across the admin views, properly enqueued admin scripts, Plugin Check compliance pass<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First production release<\/li>\n<li>Six player styles: Full, Compact, Wide, Vertical, Horizontal, Mini<\/li>\n<li>MP3 importer with ID3 tag reading, album grouping and import from the media library<\/li>\n<li>Own REST API for albums, tracks and playlists<\/li>\n<li>Per-player theme, accent, background and corner-radius customization<\/li>\n<li>Single-playback coordinator across multiple players on the same page<\/li>\n<li>Admin dashboard, design metaboxes and importer screen<\/li>\n<\/ul>","raw_excerpt":"A WordPress audio player for albums, tracks and playlists, with six visual styles, an ID3-tag importer and its own REST API.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/xho.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/370075","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/xho.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/xho.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/xho.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=370075"}],"author":[{"embeddable":true,"href":"https:\/\/xho.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/juanjome"}],"wp:attachment":[{"href":"https:\/\/xho.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=370075"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/xho.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=370075"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/xho.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=370075"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/xho.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=370075"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/xho.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=370075"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/xho.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=370075"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}