web-dev-qa-db-ja.com

プレイリストからハードコードされた文字を削除する方法

私は、デフォルトのメディアプレーヤーを多用するWebサイトのWordpressテーマに取り組んでいます。プレイリストのスタイルを設定する過程で、CSSを使用しても見えないようにすることができないハードコードされた文字をコアファイルが挿入することがわかりました。

これらの文字は、各プレイリストエントリの3つの異なる場所に挿入されます。

  1. これらのエントリは番号付けされていますが、コンテナはolではなくdivです。したがって、list-style-typeを使用することはできません。
  2. それらは曲のタイトルに中括弧を付け加えますが、:beforeと:afterを使ってではありません。
  3. また、:before疑似クラスを使用せずに、アーティスト名の前にダッシュを1つ追加します。

Wordpress\wp-includes\js\media.phpには、 wp_underscore_playlist_templates という関数があり、次のスクリプトを宣言しています。

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

もちろん、私はこのコアファイルを編集することができましたが、私はそれをしたくありません。それで私はどうすればいいですか? functions.phpにフィルタを追加しますか? JSファイルを作成しますか?

4
Gui Odai

プレイリストのショートコード関数の中には、次の行があります。

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

その中にフックされているのは、テンプレートをフッターにフックするwp_playlist_scripts()です。

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

そのため、テンプレートを置き換えたい場合は、wp_playlist_scriptsの後にフックを追加し(優先順位が10を超える)、フックを削除してから独自のテンプレートをフックします。

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

それから、wp_underscore_playlist_templates()関数全体をテーマ/プラグインのwpse_296966_underscore_playlist_templates()という新しい関数にコピーする必要があります(または必要に応じて、add_action()呼び出しに一致させる必要があります。あなたが欲しいマークアップ。

ただし、スクリプトは特定のクラスや一般的な構造に依存している可能性が高いので、 too を徹底的に変更することは避けてください。しかし、これらの不要な文字を削除しても問題ありません。

5
Jacob Peattie

title in question "曲のタイトルに中括弧を付け加えますが、:beforeや:afterを使ってではありません。 および他の種類のテンプレート gettext呼び出しを使用して 、自分のfunctions.phpで、次のようなJavaScriptテンプレートをフィルタリングできます。

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

フィルタ名に注意してください。これはコンテキストの_x(呼び出しと__(呼び出しとは異なります。

/誰かが同じ問題に苦しんでいるのなら

1
Jonas Lundman