同じページ上で2人のMediaElementプレーヤーを異なるスタイルにしたいのですが、これを簡単に行う方法を考え出しました(まったく新しいショートコードを追加して新しいスタイルシートをエンキューするのに比べて 。どちらか )動くようになるのは、プレーヤーAのオーディオショートコードに別のクラスを割り当てることです。
WordPressのコードリファレンス では、ショートコードにclass
属性を追加することについて言及していますが、うまくいきません。例えば、
[audio class="miniplayer" mp3="http://localhost/working_url.mp3"][/audio]
正常に動作しているプレーヤーは表示されますが、Firefoxコンソールのどこにも「ミニプレーヤー」が割り当てられていません。では、ショートコードにクラスを正しく割り当てるにはどうすればよいでしょうか。
WordPressはあなたのニーズに合わせてコードを操作するために少なくとも3つのオプションを許可します。
@Jevuskaの答えで増分するグローバル変数を使用してください。
global $my_audio_player_count;
$my_audio_player_count = 0;
add_filter( 'wp_audio_shortcode_class', 'wpse221201_audio_shortcode_class', 1, 1 );
function wpse221201_audio_shortcode_class( $class ) {
global $my_audio_player_count;
$class .= ' my-audio-player-'.$my_audio_player_count++;
return $class;
}
内蔵のショートコードを削除して自分のショートコードを追加する
remove_shortcode('audio');
add_shortcode('audio', 'my_audio_shortcode');
function my_audio_shortcode($args) {
//TODO: Insert your own version of the shortcode
}
上書きするにはwp_audio_shortcode_override
フィルタフックを使用してください
add_filter('wp_audio_shortcode_override', 'my_audio_shortcode');
function my_audio_shortcode($args) {
//TODO: Insert your own version of the shortcode
}
Shortcodeのパラメータとしてclass
を追加するオプションはありません [audio]
。デフォルトのクラスwp_audio_shortcode_class
を変更したり、クラスを追加したりするには、filter wp-audio-shortcode
を使用する必要があります。これをフィルタリングするためのコード例(functions.php
テーマファイルに追加)。
add_filter( 'wp_audio_shortcode_class', 'wpse221201_audio_shortcode_class', 1, 1 );
function wpse221201_audio_shortcode_class( $class )
{
$class .= ' my-class'; /* additional class */
return $class;
}
複数のショートコード[audio]
の場合、static $instance
を使用してループできます(グローバル変数を使用する必要がある場合は、 @iantsch answer を参照してください)。
add_filter( 'wp_audio_shortcode_class', 'wpse221201_audio_shortcode_class', 1, 1 );
function wpse221201_audio_shortcode_class( $class )
{
static $instance = 0;
$instance++;
/* class name with increament number, change my-audio-class */
$class = sprintf( '%s my-audio-class-%d', $class, $instance );
return $class;
}
次のWordPress v4.5
の別のオプションは、 shortcode_atts_{$shortcode}
をフックし、特定のショートコードをターゲットにすることです。
add_filter( 'shortcode_atts_audio', 'wpse221201_shortcode_atts_audio', 1, 4 );
function wpse221201_shortcode_atts_audio( $out, $pairs, $atts, $shortcode )
{
//static $instance = 0;
//$instance++;
/* target parameter 'mp3' with its file
or add your own parameter ( $atts[whatever] ) and use it in conditional statement
*/
if ( isset( $out['mp3'] ) && isset( $out['class'] ) && 'source.mp3' == $out['mp3'] )
$out['class'] = sprintf( '%s my-class', $out['class'] );//additional class
return $out;
}
私はすべての提案をいじって、最もエレガントな解決策を私に提示したいと思います(ただし、「回答済み」バッジはそのままにしておきます)。今後の読者もそれから利益を得ることができます。これはフィルタの使用(@Jevuskaのおかげで)とショートコード(s/o @iantsch)の追加の提案を組み合わせたものです。
私はthumbaudio
ショートコードを追加しました。それは修正されたクラスフィルタでaudio
ショートコードを実行します。このように、ユーザーがオーディオのショートコードを入力すると、デフォルトのプレーヤーが表示されますが、thumbaudio
を入力すると、クラスにminiplayer
が追加されます。ユーザーは、HTMLファイルのどこにいつ適用されるかを完全に制御できます。
add_shortcode('thumbaudio', 'my_thumbaudio_shortcode');
function wp_audio_shortcode_thumbclass( $class ) {
$class .= ' miniplayer';
return $class;
}
function my_thumbaudio_shortcode( $attr ) {
add_filter( 'wp_audio_shortcode_class', 'wp_audio_shortcode_thumbclass', 1, 1 );
echo wp_audio_shortcode( $attr );
remove_filter( 'wp_audio_shortcode_class', 'wp_audio_shortcode_thumbclass', 1 );
}