Собственный "плейлист" шорткод случайного воспроизведения… Как?


Я использую красивый шорткод "плейлист" на своем сайте, но я хочу, чтобы мои аудиофайлы воспроизводились случайным образом.

Я использую следующее:

[список воспроизведения трек-лист = "ложные" изображения = "ложные" исполнители= "ложные" 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
Author: Pieter Goosen, 2014-09-11

4 answers

Я удалил все дублирующиеся и ненужные вещи, взгляните на ответы Отто или кайзера для очень простого решения.

 4
Author: Nicolai, 2014-09-12 06:39:38

Похоже, что есть как ошибка, так и то, что документация была написана неправильно в основном коде. Однако существует обходной путь, который должен работать в будущем и для любых исправлений, которые могут быть внесены в ядро.

Это тоже просто:

Используйте 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"]

 5
Author: Otto, 2014-09-12 01:15:20

Вот перетасовка

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
});
 4
Author: bonger, 2014-09-11 19:38:43

Случайный порядок

Из того, что я могу прочитать в источнике, есть один аргумент, ответственный за это:

'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(). Затем сбросьте содержимое фильтра внутри обратного вызова, который я показал выше.

 3
Author: kaiser, 2014-09-11 19:40:48