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

Я столкнулся с этой проблемой, пытаясь заставить 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;
}

Вы можете попробовать использовать фильтр 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]
шорткода.

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

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

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

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

Я понимаю, что этот пост старый, но ответ 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;
}
