Воспроизведение всех видео автоматически через шорткод video

22 февр. 2014 г., 16:34:17
Просмотры: 19.7K
Голосов: 1

Как я могу включить автовоспроизведение для всех видео, добавленных через шорткод video?
Я могу сделать автовоспроизведение только для одного видео, если у него установлен атрибут autoplay в значение 1, а у остальных 0, иначе все видео остаются остановленными.

3
Комментарии

Зачем воспроизводить несколько видео одновременно?

s_ha_dum s_ha_dum
22 февр. 2014 г. 16:43:18

Я использую их как фоны для двух разделов..

Domagoj Domagoj
22 февр. 2014 г. 16:53:43

В mediaelement есть опция pauseOtherPlayers: false, но как передать это из WordPress?

Domagoj Domagoj
22 февр. 2014 г. 16:54:58
Все ответы на вопрос 4
1

Я столкнулся с этой проблемой, пытаясь заставить HTML-видео вести себя как GIF. Встроенный видеоплеер WordPress использует HTML-элементы video, но не позволяет видео воспроизводиться одновременно.

Вместо использования стандартного видеоплеера WordPress (который лучше подходит для стандартного видеоконтента), я решил вручную использовать элемент <video> через пользовательский шорткод. Для лучшей совместимости (особенно на мобильных устройствах) также следует убедиться, что видео отключено по звуку.

После добавления следующего кода просто используйте:

[videogif mp4="http://путь_к_файлу.mp4"]

И у вас будет отлично работающее видео. Для управления стилями и добавления (базовых) элементов управления HTML-видео используйте что-то вроде:

[videogif mp4="http://путь_к_файлу.mp4" style='width: 80%' controls='1']

Код

Добавьте в ваш functions.php:

// Шорткод для видео в формате GIF
function videogif($atts = [])
{
    // нормализация ключей атрибутов, приведение к нижнему регистру
    $atts = array_change_key_case((array)$atts, CASE_LOWER);

    // переопределение атрибутов по умолчанию пользовательскими атрибутами
    $wporg_atts = shortcode_atts([
            'mp4' => $atts['mp4'],
            'style' => null,
            'controls' => False
        ], $atts);

    // формирование вывода
    $o = '';
    $o .= '<video autoplay loop muted playsinline ';
    if ($wporg_atts['controls']) $o .= 'controls ';
    $o .= 'class="videogif"';
    if (!is_null($wporg_atts['style'])) $o .= 'style="' . $wporg_atts['style'] . '" ';
    $o .= '><source src="' . $wporg_atts['mp4'] . '" type="video/mp4" />';
    $o .= '<p>Ваш браузер не поддерживает элемент video.</p></video>';

    // возврат вывода
    return $o;
}
add_shortcode( 'videogif', 'videogif' );

Я также использую следующий CSS для изменения размера и центрирования видео по умолчанию:

/* Центрирование videogif по умолчанию */
.videogif {
    width: 100%;
    display:block;
    margin: 0 auto;
}
15 окт. 2017 г. 05:13:29
Комментарии

это идеально, но как добавить звук?

Shafaq Shafaq
30 сент. 2019 г. 23:19:26
3

Вы можете попробовать использовать фильтр shortcode_atts_video:

add_filter( 'shortcode_atts_video', 'overwrite_video_atts_wpse', 10,3 );

function overwrite_video_atts_wpse( $out, $pairs, $atts )
{
    // принудительно включаем атрибут автовоспроизведения для шорткода видео:
    $out['autoplay'] = 1; 

    // принудительно отключаем атрибут автовоспроизведения для шорткода видео:
    //$out['autoplay'] = 0; 

    return $out;
}

для переопределения атрибутов [video] шорткода.

22 февр. 2014 г. 17:15:05
Комментарии

Проблема в JS: шорткод выводит autoplay="1" для всех шорткодов, но плеер инициализируется с $('.wp-video-shortcode').mediaelementplayer(settings);, а мне нужно, чтобы он инициализировался с $('.wp-video-shortcode').mediaelementplayer( {pauseOtherPlayers: false} ); И этот JS находится в ядре WordPress.

Domagoj Domagoj
22 февр. 2014 г. 17:18:50

Когда я добавляю один шорткод в запись, всё работает как ожидалось. Но как только добавляется второй шорткод, автовоспроизведение (ON) перестаёт работать для любого плеера (с фильтром или без).

birgire birgire
22 февр. 2014 г. 18:27:10

Я пробовал экспериментировать с for(var j in mejs.players){var l=mejs.players[j];l.play(); }, где l.id имеют вид mep_0 и mep_1, но это не сработало по какой-то причине, хотя и не вызвало ошибок. Вы видели этот вопрос, где одним из предложенных решений является имитация кликов для обхода проблемы?

birgire birgire
22 февр. 2014 г. 20:20:05
0

Я сделал это с помощью своего собственного шорткода для видео, в котором изменил классы, чтобы можно было инициализировать плеер с помощью $('.my-video-shortcode').mediaelementplayer( {pauseOtherPlayers: false} );
Это работает именно так, как мне было нужно :)

23 февр. 2014 г. 13:29:29
0

Я понимаю, что этот пост старый, но ответ birgire больше не работает.

Вместо

$out['autoplay'] = '1';

что логично, на самом деле должно быть

$out['autoplay'] = 'on';

add_filter( 'shortcode_atts_video', 'overwrite_video_atts_wpse', 10,3 );

function overwrite_video_atts_wpse( $out, $pairs, $atts )
{
    // принудительно включаем атрибут автовоспроизведения для шорткода видео:
    $out['autoplay'] = 'on';

    // принудительно выключаем атрибут автовоспроизведения для шорткода видео:
    //$out['autoplay'] = 0;

    return $out;
}
12 июл. 2017 г. 16:30:30