Comment supprimer des caractères codés en dur des listes de lecture?

4

Je travaille sur un thème Wordpress pour un site Web qui utilise beaucoup son lecteur multimédia par défaut. Lors du processus de stylisation de ses listes de lecture, j'ai constaté qu'un fichier principal injecte des caractères codés en dur qui ne peuvent pas être rendus invisibles simplement en utilisant CSS. Je ne sais donc pas comment les masquer / les supprimer.

Ces caractères sont injectés à trois endroits différents sur chaque entrée de la liste de lecture:

  1. ces entrées sont numérotées, mais le conteneur est un div au lieu d'un ol. Il est donc impossible d'utiliser list-style-type: aucune n'est possible;
  2. ils ajoutent des citations frisées au titre de la chanson, mais pas en utilisant: before and: after;
  3. et ils ajoutent un tiret avant le nom de l'artiste, également en n'utilisant pas la pseudo-classe: before.

Sur wordpress \ wp-includes \ js \ media.php, une fonction appelée wp_underscore_playlist_templates déclare le script suivant:

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

Bien sûr, je pourrais éditer ce fichier de base, mais je ne veux pas le faire. Donc qu'est ce que je devrais faire? Ajouter un filtre sur functions.php? Créer un fichier JS?

    
posée Gui Odai 16.03.2018 - 02:36

2 réponses

4

À l'intérieur de la fonction de code court pour les listes de lecture, il y a cette ligne:

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

Accroché à cela, c’est wp_playlist_scripts() qui accroche les modèles au pied de page:

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

Donc, si vous souhaitez remplacer les modèles, vous pouvez vous connecter à wp_playlist_scripts après que ces hooks aient été ajoutés (donc toute priorité supérieure à 10), supprimez les hooks, puis accrochez-les vous-même. modèles:

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

Ensuite, il vous suffit de copier la fonction wp_underscore_playlist_templates() dans son intégralité vers une nouvelle fonction de votre thème / plugin appelée wpse_296966_underscore_playlist_templates() (ou ce que vous voulez, il vous suffit de correspondre à l'appel de add_action() . Puis toutes les modifications que vous souhaitez apporter à la fonction pour obtenir le balisage souhaité.

J'éviterais de faire trop aussi, car les scripts dépendent probablement de classes spécifiques et de la structure générale. Mais supprimer ces caractères indésirables ne devrait pas poser de problème.

    
réponse donnée Jacob Peattie 16.03.2018 - 02:53
0

Pour le titre en question "ils ajoutent des guillemets au titre de la chanson, mais pas en utilisant: before and: after;" "et d'autres types de modèles en utilisant les appels gettext , vous pouvez filtrer les modèles javascript de cette manière dans votre 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);

Remarquez le nom du filtre, il diffère du contexte _x( appels vs __( appels.

/ Si quelqu'un a les mêmes problèmes

    
réponse donnée Jonas Lundman 27.09.2018 - 12:56

Lire d'autres questions sur les étiquettes