¿Cómo eliminar los caracteres codificados de las listas de reproducción?

4

Estoy trabajando en un tema de Wordpress para un sitio web que hace un uso intensivo de su reproductor multimedia predeterminado. En el proceso de estilizar sus listas de reproducción, descubrí que un archivo central inyecta caracteres codificados que no pueden hacerse invisibles solo con el uso de CSS, así que no tengo ni idea de cómo ocultarlos o eliminarlos.

Estos caracteres se inyectan en 3 lugares diferentes en cada entrada de la lista de reproducción:

  1. esas entradas están numeradas, pero el contenedor es un div en lugar de un ol, por lo que se usa el tipo de estilo de lista: ninguna es posible;
  2. agregan citas rizadas al título de la canción, pero no mediante el uso de: antes y: después;
  3. y agregan un guión de em antes del nombre del artista, también no utilizando: antes de la pseudo-clase.

En wordpress \ wp-includes \ js \ media.php hay una función llamada wp_underscore_playlist_templates que declara el siguiente script:

<script type="text/html" id="tmpl-wp-playlist-item">
<div class="wp-playlist-item">
    <a class="wp-playlist-caption" href="{{ data.src }}">
        {{ data.index ? ( data.index + '. ' ) : '' }}
        <# if ( data.caption ) { #>
            {{ data.caption }}
        <# } else { #>
            <span class="wp-playlist-item-title"><?php
                /* translators: playlist item title */
                printf( _x( '&#8220;%s&#8221;', 'playlist item title' ), '{{{ data.title }}}' );
            ?></span>
            <# if ( data.artists && data.meta.artist ) { #>
            <span class="wp-playlist-item-artist"> &mdash; {{ data.meta.artist }}</span>
            <# } #>
        <# } #>
    </a>
    <# if ( data.meta.length_formatted ) { #>
    <div class="wp-playlist-item-length">{{ data.meta.length_formatted }}</div>
    <# } #>
</div>
</script>

Por supuesto que podría editar este archivo central, pero no quiero hacer eso. ¿Entonces qué debo hacer? Añadir un filtro en functions.php? Hacer un archivo JS?

    
pregunta Gui Odai 16.03.2018 - 02:36

2 respuestas

4

Dentro de la función de shortcode para listas de reproducción, hay esta línea:

do_action( 'wp_playlist_scripts', $atts['type'], $atts['style'] );

Enganchado a eso está wp_playlist_scripts() , lo que enlaza las plantillas al pie de página:

add_action( 'wp_footer', 'wp_underscore_playlist_templates', 0 );
add_action( 'admin_footer', 'wp_underscore_playlist_templates', 0 );

Entonces, si desea reemplazar las plantillas, puede enlazar a wp_playlist_scripts después de que se hayan agregado esos ganchos (por lo tanto, cualquier prioridad mayor que 10), elimine los ganchos y luego enganche su propio plantillas:

function wpse_296966_hook_new_playlist_templates() {
    // Unhook default templates.
    remove_action( 'wp_footer', 'wp_underscore_playlist_templates', 0 );
    remove_action( 'admin_footer', 'wp_underscore_playlist_templates', 0 );

    // Hook in new templates.
    add_action( 'wp_footer', 'wpse_296966_underscore_playlist_templates', 0 );
    add_action( 'admin_footer', 'wpse_296966_underscore_playlist_templates', 0 );
}
add_action( 'wp_playlist_scripts', 'wpse_296966_hook_new_playlist_templates', 20 );

Luego, solo necesita copiar la función wp_underscore_playlist_templates() , en su totalidad, a una nueva función en su tema / plugin llamada wpse_296966_underscore_playlist_templates() (o lo que quiera, solo necesita coincidir con la llamada add_action() . Luego haga cualquier modificación que desee en la función para obtener el marcado que deseaba.

Sin embargo,

evitaría hacer algo demasiado drástico, ya que los scripts probablemente dependen de clases específicas y de la estructura general. Pero eliminar estos caracteres no deseados no debería ser un problema.

    
respondido por el Jacob Peattie 16.03.2018 - 02:53
0

Para el título en la pregunta "agregan citas en el título de la canción, pero no utilizando: antes y: después;" y otro tipo de plantillas usando llamadas de gettext , puedes filtrar las plantillas de javascript como estas en tus funciones.php:

add_filter('gettext_with_context', function($translated, $text, $context, $domain){
    if($context = 'playlist item title' && $text == '&#8220;%s&#8221;') $translated = "%s";
    return $translated;
}, 10, 4);

Observa el nombre del filtro, es diferente del contexto _x( calls vs __( calls.

/ Si alguien lucha con los mismos problemas

    
respondido por el Jonas Lundman 27.09.2018 - 12:56

Lea otras preguntas en las etiquetas