Вопрос или проблема
Я использую Timber 2 для создания темы WordPress, и один из шаблонов пользовательского типа записи требует URL-адреса YouTube для размещения видео на странице. Я пытаюсь сделать так, чтобы администраторам не пришлось копировать код iframe, поэтому я пытаюсь использовать функцию wp_oembed_get, но не понимаю, как передать пользовательское поле в функцию и затем разместить это видео на странице. Все, что я пробовал, не отображает видео.
Может кто-нибудь помочь мне разобраться, как заставить это работать?
Вот что я пытался сделать:
youtube_video_url – это URL-адрес пользовательского поля с расширенными возможностями.
single-videos.php -> single-videos.twig
single-videos.twig
{% extends 'layouts/base.twig' %}
{% block content %}
{% set videoUrl = post.meta('youtube_video_url')%}
{% set embedVideo = function('wp_oembed_get', videoUrl) %}
{{ embedVideo }}
{% endblock %}
Я также пробовал:
{% extends 'layouts/base.twig' %}
{% block content %}
{{ fn('wp_oembed_get', post.meta('youtube_video_url')) }}
{% endblock %}
Ответ или решение
Чтобы использовать функцию wp_oembed_get
в Timber и получить URL из произвольного пользовательского поля (Advanced Custom Field), вам нужно убедиться, что правильно передаете значение URL в функцию, а затем выводите результат на странице с помощью шаблонов Twig. Вот пошаговое руководство, как это сделать.
1. Убедитесь, что ACF установлен и настроен
Сначала убедитесь, что вы создали произвольное поле youtube_video_url
в ACF и оно правильно сохранено в каждом посте вашего пользовательского типа.
2. Получите значение URL в PHP
В вашем шаблоне single-videos.php
, вам необходимо передать значение URL из пользовательского поля в контекст Timber. Например:
<?php
use Timber\Timber;
class SingleVideos extends Timber\Post {
public function __construct() {
$this->context = Timber::context();
$this->context['post'] = $this;
$this->context['videoUrl'] = get_field('youtube_video_url', $this->ID); // Получаем URL видео
parent::__construct();
}
}
$video = new SingleVideos();
Timber::render('single-videos.twig', $video->context);
3. Измените Twig-шаблон для отображения видео
Затем, в вашем Twig-шаблоне single-videos.twig
, используйте переданный URL для вызова функции wp_oembed_get
и отображения видео. Вот как это сделать:
{% extends 'layouts/base.twig' %}
{% block content %}
{% set videoUrl = post.videoUrl %} {# Извлекаем URL видео из контекста #}
{% if videoUrl %} {# Проверяем, есть ли URL #}
{{ fn('wp_oembed_get', videoUrl) | raw }} {# Получаем и выводим OEmbed #}
{% else %}
<p>Видео не найдено.</p> {# Сообщение, если URL отсутствует #}
{% endif %}
{% endblock %}
Объяснение кода
-
Получение произвольного поля: В PHP-коде мы используем
get_field
из ACF для получения URL YouTube и сохраняем его в контексте. -
Вызов функции OEmbed: В Twig-шаблоне мы проверяем, существует ли URL, и если он есть, передаем его в функцию
wp_oembed_get
, затем выводим результат, добавляя фильтр| raw
для корректного отображения HTML-кода.
Это должно обеспечить корректное отображение видео на странице вашего поста с использованием Timber и ACF. Убедитесь, что URL правильно форматируется и что ваше видео доступно для встраивания.