Производительность и получение метаданных файла
Для постоянного отображения требуется выводить длительность включенного в пост видеоролика.
Используется И РАБОТАЕТ! следующая конструкция:
$key = "Somekey"; $contents = get_post_meta( $post->ID, $key, true ); $path = getcwd() . $contents; //if ( file_exists( $path ) ) { $meta = wp_read_video_metadata( $path ); echo $meta[ 'length_formatted' ]; //}
На закомменченую проверку внимание не обращайте.
То есть через кастомфилд получаем урл видео, скармливаем его wp_read_video_metadata и из полученного массива берем и выводим length_formatted
Логично? Да
Работает? Да!
ПРОБЛЕМА: на страницах с циклами постов это приводит к неприемлемым задержкам: 80 постов выводить почти минуту - неприемлемо.
Да, можно заморочиться и руками перелопатить 3000 постов, забив длительности в кастомфилд.
НО, не могли бы ув. специалисты посоветовать более простой путь?
Есть ли иной способ получить/вывести искомое, который не тормозил бы так немилосердно?
ДОПОЛНИТЕЛЬНЫЕ СВЕДЕНИЯ из Query Monitor:
Page Generation Time
83.2411
2.3% of 3,600s limit
Peak Memory Usage
533,424 kB
12.8% of 4,182,016 kB limit
Database Query Time
0.1440
Database Queries
Total: 249
Object Cache
92.2% hit rate (8,027 hits, 682 misses)
External object cache not in use
Добрый день. Такие данные сразу уже хранятся в метаданных вложения:
Может такой способ подойдёт?
ПРАКТИЧЕСКИ РЕШЕНО!
Остались некоторые доработки.
Итак, с благодарностью взяв за основу Ваше предложение, столкнулся с необходимостью получать ИД вложения. Нашел решение в виде вот такой функции:
Добавляется в functions.php . К сожалению, она работает от УРЛ, а не от пути.
Окончательно код вывода длительности видео получился вот такой:
Проблема с производительностью решилась.
Огромное спасибо!
К несчастью, УРЛ парсится не всегда, в отличие от пути. Если парсить путь, то без разницы какими китайскими знаками обозвали файл. Если парсить урл, то наличие служебных (нестандартных) символов блокирует парсинг.
Если бы кто-то посоветовал как вместо УРЛ использовать путь, я был бы очень признателен.
Ну у вас в коде какой ID используется? Код вообще в целом непонятный
Извините
Попробую пояснить.
Исторически сокращенный урл ролика отдается через кастомфилд и собственно в контенте поста видео нет.
Первые две строки - получаем значение кастомфилда и третьей строкой преобразуем в урл. В исходном коде - преобразовывали в серверный путь к ролику.
Далее - УРЛ передается в пипинг-гет-имидж (функцию, приведенную выше, которая по полученному урлу отдает ИД ролика).
Далее, полученный ИД скармливаем гет аттачмент метадата и получаем искомое: отформатированную длительность,
которую и выводим.
Отсюда, используется ИД видеофайла, который получается парсингом УРЛ оного.
Это работает почти идеально (пока в имени файла нет иероглифов).
Суть доделки в том, чтобы парсить не УРЛ, а серверный путь.
Думаю, это как-то можно сделать, доработав функцию. В моем понимании, что парсить урл, что парсить путь - равнобедренно, не так ли?..