web-dev-qa-db-fra.com

Comment supprimer des caractères codés en dur des playlists?

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 style 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 suis donc pas du tout au courant de la façon de les masquer/supprimer.

Ces caractères sont injectés à 3 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: none n'est pas possible;
  2. ils ajoutent des citations frisées au titre de la chanson, mais pas en utilisant: before et: 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 il y a une fonction appelée wp_underscore_playlist_templates qui 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? Faire un fichier JS?

4
Gui Odai

Dans la fonction de shortcode pour les listes de lecture, il y a cette ligne:

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

C'est wp_playlist_scripts() qui est accroché dans le pied de page:

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

Donc, si vous voulez remplacer les modèles, vous pouvez accrocher wp_playlist_scripts après ces crochets ont été ajoutés (donc toute priorité supérieure à 10), supprimez les crochets, puis accrochez vos propres 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é, dans 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 add_action(). Ensuite, apportez les modifications souhaitées le balisage que vous vouliez.

Je voudrais éviter de faire quoi que ce soit aussi drastique cependant, 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 être un problème.

5
Jacob Peattie

Pour le titre en question "ils ajoutent des guillemets bouclés au titre de la chanson, mais pas en utilisant: before et: after;" et d'autres types de modèles en utilisant des appels gettext , vous pouvez filtrer les modèles javascript de la manière suivante dans votre fichier 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 des appels contextuels _x( avec les appels __(.

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

1
Jonas Lundman