it-swarm.com.de

Wie entferne ich hartcodierte Charaktere aus Wiedergabelisten?

Ich arbeite an einem Wordpress-Thema für eine Website, die ihren Standard-Media-Player intensiv nutzt. Während des Stils seiner Wiedergabelisten stellte ich fest, dass eine Kerndatei hartcodierte Zeichen einfügt, die nur mit CSS unsichtbar gemacht werden können. Daher habe ich keine Ahnung, wie ich sie verstecken/entfernen soll.

Diese Zeichen werden an drei verschiedenen Stellen in jeden Playlist-Eintrag eingefügt:

  1. diese Einträge sind nummeriert, aber der Container ist ein div anstelle eines ol. Verwenden Sie also den Listentyp: none ist nicht möglich.
  2. sie fügen dem Songtitel geschweifte Anführungszeichen hinzu, verwenden jedoch nicht: before und: after;
  3. und sie fügen einen Bindestrich vor dem Künstlernamen hinzu, auch nicht unter Verwendung der: before-Pseudoklasse.

In wordpress\wp-includes\js\media.php gibt es eine Funktion namens wp_underscore_playlist_templates , die das folgende Skript deklariert:

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

Natürlich könnte ich diese Kerndatei bearbeiten, aber das möchte ich nicht. Also was soll ich tun? Füge einen Filter für functions.php hinzu? JS-Datei erstellen?

4
Gui Odai

In der Shortcode-Funktion für Wiedergabelisten befindet sich folgende Zeile:

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

Darin ist wp_playlist_scripts() eingebunden, das die Vorlagen in die Fußzeile einbindet:

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

Wenn Sie also die Vorlagen ersetzen möchten, können Sie sich in wp_playlist_scripts einbinden nachdem diese Hooks hinzugefügt wurden (also jede Priorität größer als 10), die Hooks entfernen und dann Ihre eigenen Vorlagen einbinden:

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

Dann müssen Sie nur die Funktion wp_underscore_playlist_templates() in ihrer Gesamtheit in eine neue Funktion in Ihrem Theme/Plugin namens wpse_296966_underscore_playlist_templates() kopieren (oder was auch immer Sie möchten, muss nur mit dem Aufruf add_action() übereinstimmen. Nehmen Sie dann die gewünschten Änderungen an der Funktion vor, um sie abzurufen das gewünschte Markup.

Ich würde jedoch alles vermeiden zu drastisch, da die Skripte wahrscheinlich von bestimmten Klassen und der allgemeinen Struktur abhängen. Das Entfernen dieser unerwünschten Zeichen sollte jedoch kein Problem darstellen.

5
Jacob Peattie

Für den title in question "fügen sie dem Songtitel geschweifte Anführungszeichen hinzu, jedoch nicht mit: before und: after;" und andere Arten von Templates mit Hilfe von Gettext-Aufrufen können Sie die Javascript-Templates in Ihrer functions.php folgendermaßen filtern:

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

Beachten Sie den Filternamen, der sich von den kontextbezogenen _x(-Aufrufen gegenüber __(-Aufrufen unterscheidet.

/ Wenn jemand mit den gleichen Problemen zu kämpfen hat

1
Jonas Lundman