Como remover caracteres codificados de listas de reprodução?

4

Estou trabalhando em um tema do Wordpress para um site que faz uso pesado de seu media player padrão. No processo de estilizar suas listas de reprodução, descobri que um arquivo principal injeta caracteres codificados que não podem ser invisíveis apenas usando CSS, então estou um pouco sem noção sobre como ocultá-los / removê-los.

Esses personagens são injetados em três lugares diferentes em cada entrada da lista de reprodução:

  1. essas entradas são numeradas, mas o contêiner é um div em vez de um ol, portanto, usando list-style-type: nenhuma é possível;
  2. eles adicionam aspas ao título da música, mas não usando: before e: after;
  3. e eles adicionam um travessão antes do nome do artista, também não usando a pseudo-classe: before.

No wordpress \ wp-includes \ js \ media.php, há uma função chamada wp_underscore_playlist_templates que declara o seguinte 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>

É claro que eu poderia editar esse arquivo principal, mas não quero fazer isso. Então, o que eu deveria fazer? Adicione um filtro em functions.php? Faça um arquivo JS?

    
por Gui Odai 16.03.2018 / 02:36

2 respostas

4

Dentro da função shortcode para listas de reprodução, existe esta linha:

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

Conectado a isso é wp_playlist_scripts() , que engloba os modelos no rodapé:

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

Então, se você quiser substituir os modelos, você pode conectar em wp_playlist_scripts depois os ganchos terem sido adicionados (portanto, qualquer prioridade maior que 10), remover os ganchos e depois encaixá-los modelos:

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 );

Então você só precisa copiar a função wp_underscore_playlist_templates() , na sua totalidade, para uma nova função no seu tema / plugin chamado wpse_296966_underscore_playlist_templates() (ou o que você quiser, só precisa corresponder à chamada add_action() . quaisquer modificações que você quiser para a função para obter a marcação que você queria.

Eu evitaria fazer qualquer coisa muito drástica, já que os scripts provavelmente dependem de classes específicas e da estrutura geral. Mas remover esses caracteres indesejados não deve ser um problema.

    
por Jacob Peattie 16.03.2018 / 02:53
0

Para o título em questão "eles adicionam aspas ao título da música, mas não usando: antes e: depois;" e outros tipos de modelos usando chamadas gettext , você pode filtrar os modelos de javascript como este em seu functions.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);

Observe o nome do filtro, que difere do contexto _x( calls vs __( calls.

/ Se alguém tiver dificuldades com os mesmos problemas

    
por Jonas Lundman 27.09.2018 / 12:56