Как использовать функцию wp_oembed_get в Timber и получить URL из продвинутого пользовательского поля?

Вопрос или проблема

Я использую 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 %}

Объяснение кода

  1. Получение произвольного поля: В PHP-коде мы используем get_field из ACF для получения URL YouTube и сохраняем его в контексте.

  2. Вызов функции OEmbed: В Twig-шаблоне мы проверяем, существует ли URL, и если он есть, передаем его в функцию wp_oembed_get, затем выводим результат, добавляя фильтр | raw для корректного отображения HTML-кода.

Это должно обеспечить корректное отображение видео на странице вашего поста с использованием Timber и ACF. Убедитесь, что URL правильно форматируется и что ваше видео доступно для встраивания.

Оцените материал
Добавить комментарий

Капча загружается...