Собственный "плейлист" шорткод случайного воспроизведения… Как?
Я использую красивый шорткод "плейлист" на своем сайте, но я хочу, чтобы мои аудиофайлы воспроизводились случайным образом.
Я использую следующее:
[список воспроизведения трек-лист = "ложные" изображения = "ложные" исполнители= "ложные" ids="7691,7690,7688,7687,7686,7685,7684,7683,7682,7681,7680,7679,7678,7677,7676,7674,3978,3647,3408,1395,1217,1216,1214,1213,1211,1210,1209,1208,1207,1206,1181,975,899,668,663,642,641"]
Как сделать случайную игру, может быть, также с папой jQuery?
4 answers
Я удалил все дублирующиеся и ненужные вещи, взгляните на ответы Отто или кайзера для очень простого решения.
- Билет на маршрут: #29629.
- Запись кода для Шорткода списка воспроизведения.
Похоже, что есть как ошибка, так и то, что документация была написана неправильно в основном коде. Однако существует обходной путь, который должен работать в будущем и для любых исправлений, которые могут быть внесены в ядро.
Это тоже просто:
Используйте orderby="ранд" в шорткоде.
Вот так просто.
[playlist orderby="rand" tracklist="false" images="false" artists="false" ids="7691,7690,7688,7687,7686,7685,7684,7683,7682,7681,7680,7679,7678,7677,7676,7674,3978,3647,3408,1395,1217,1216,1214,1213,1211,1210,1209,1208,1207,1206,1181,975,899,668,663,642,641"]
Вот перетасовка
add_action( 'wp_footer', function () {
?>
<script>
jQuery(function ($) {
var playlist = $('.wp-playlist'); // Tune this if more than one.
var tracks = $('.wp-playlist-tracks .wp-playlist-item', playlist);
var last_shuffle = -1;
var shuffle = function () {
var i = Math.floor(Math.random() * tracks.length);
if (i == last_shuffle) i = (i + 1) % tracks.length;
last_shuffle = i;
tracks.get(i).click();
};
shuffle();
$('.mejs-mediaelement audio', playlist).on('ended', function (event) {
shuffle();
});
});
</script>
<?php
});
Случайный порядок
Из того, что я могу прочитать в источнике, есть один аргумент, ответственный за это:
'order' => 'RAND',
В случае, если вы используете это, значение orderby
будет установлено в none
.
Редактировать
Хорошо, основной код говорит, что это должно работать:
if ( 'RAND' == $atts['order'] ) {
$atts['orderby'] = 'none';
}
Но это неправда . На самом деле, вы должны установить orderby
значение rand
, как вызывает шорткод get_posts()
, и это то, что возвращает сообщения в случайном порядке. Короче говоря: Что ядро делает с RAND
(afaik) совершенно ненужным (и сбивающим с толку).
По умолчанию и всегда устанавливайте аргументы
Если вы хотите отфильтровать атрибуты шорткода для всех playlist
вызовы с коротким кодом, затем выполните следующие действия:
add_action( 'shortcode_atts_playlist', function( $output, $defaults, $custom )
{
// do some array_merge() or wp_parse_args() here
return $output;
}, 10, 3 );
Пользовательское переопределение
Если вы хотите переопределить шорткод playlist
полностью настраиваемым шорткодом, выполните его короткое замыкание - верните первый аргумент следующего фильтра как что угодно, но не как пустая строка:
add_filter( 'post_playlist', function( $playlist = '', $attr )
{
return $playlist;
}, 10, 2 );
Отладка коротких кодов
Если вы уперлись в стену и какой-то аргумент не работает, то, вероятно, это ошибка плагинов или тем. Взгляните на shortcode_atts()
. Затем сбросьте содержимое фильтра внутри обратного вызова, который я показал выше.