Статьи

Создайте шаблон страницы YouTube для видео из RSS-канала

Существует множество плагинов YouTube в репозитории плагинов WordPress.org, и даже на рынке Envato, но иногда плагин просто излишен для очень простой реализации недавних видео, извлеченных из RSS-канала.

В этом уроке мы рассмотрим, как использовать данные, полученные из fetch_feed() для вывода шаблона страницы видео YouTube.


Готовый код также можно легко превратить в функцию многократного использования, но, поскольку мы имеем дело с темой разработки тем, мы собираемся обернуть это в шаблон страницы.

Лучший способ начать работу — просто продублировать шаблон page.php темы, если он существует, или начать с темы single.php . Ключевыми вещами, которые вы хотите убедиться, что файл имеет имя шаблона, и вызовы get_header() и get_footer() . Чтобы предоставить имя шаблона, вы просто добавите его в начало документа в комментариях следующим образом:

1
2
3
4
5
<?php
/**
 * Template Name: Piano Cat Videos Page
 */
?>

Это создаст новую опцию в поле шаблона атрибутов страницы, чтобы выбрать пользовательский шаблон страницы, который должен быть похож на рисунок здесь.

videos_page01

WordPress предоставляет нам приятный маленький способ превратить RSS-канал в объект, который можно использовать для циклического перемещения по элементам и возврата других данных. Это делается с помощью функции fetch_feed() . Чтобы начать использовать эту функцию, мы настроим несколько параметров и пару условных ошибок в следующем фрагменте кода.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
<?php
$uri = ‘http://gdata.youtube.com/feeds/api/videos?alt=rss&q=piano cat’;
$feed = fetch_feed( $uri );
 
if ( is_wp_error( $feed ) ) {
    return false;
} else {
    $maxitems = $feed->get_item_quantity( 10 );
    $rss_items = $feed->get_items( 0, $maxitems );
 
    if ( $maxitems == 0 ) :
        return false;
    else :
        if ( is_array( $rss_items ) ) : ?>
        … do stuff …
        <?php endif;
    endif;
}
?>

Во-первых, нам нужно установить URL нашего RSS-канала. Если у вас возникли проблемы с поиском нужного RSS-канала, попробуйте воспользоваться генератором каналов Google YouTube API . Будьте внимательны и тщательно устанавливайте каждый параметр, поскольку не все URL-адреса RSS-канала будут возвращать желаемые результаты. Настройки по умолчанию должны работать, и я советую также использовать поисковый запрос и вывод RSS 2.0 для достижения наилучших результатов.

Получив свой URL, превратите его в переменную объекта с помощью магической функции fetch_feed() . Затем выполните проверку, чтобы убедиться в отсутствии ошибок, и найдите элементы, которые необходимо вернуть. Если вы var_dump( $feed ) пользователь, вы можете развлечься, выполнив var_dump( $feed ) чтобы увидеть все, что может предложить объект.

Теперь, когда у нас есть фундамент, наша страница должна отображать «… делать вещи …», потому что есть фид. Теперь мы можем начать готовиться к выводу видео, которое возвращает фид.


Прежде чем мы заберемся слишком далеко, давайте продолжим и добавим немного разметки и стиля. Для этого макета у нас будет большой iframe видеопроигрывателя вверху страницы, а затем миниатюры каждого видео в списке из двух столбцов ниже. Давайте заменим наш заполнитель «do stuff» следующим:

01
02
03
04
05
06
07
08
09
10
11
<div id=»videos»>
    <div class=»video_player»>
        <iframe width=»610″ height=»344″ src=»http://www.youtube.com/embed/VIDEO_ID» frameborder=»0″ allowfullscreen></iframe>
    </div>
    <ul class=»video_thumbs»>
        <li>
            <p><a href=»http://www.youtube.com/embed/VIDEO_ID»><img src=»youtube/image.jpg» width=»290″ height=»164″ /></a></p>
            <p><a href=»http://www.youtube.com/embed/VIDEO_ID»>Video Title</a></p>
        </li>
    </ul>
</div>

Внутри нашего содержащего div у нас есть два основных элемента. Первый предназначен для большого видеопроигрывателя и будет содержать фактическое работающее видео; другой — список столбцов выбора видео с миниатюрами и заголовками видео. Далее мы добавим стилизацию, добавив немного CSS в таблицу стилей темы.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#videos {
    width: 640px;
}
 
.video_player {
    padding: 15px;
}
 
.video_thumbs {
    margin: 0;
}
 
.video_thumbs li {
    list-style: none;
    padding: 15px;
    margin: 0;
    float: left;
    width: 290px;
}
 
.video_thumbs p {
    margin: 10px 0;
}
 
.video_thumbs li:hover img,
.video_thumbs li.active img {
    opacity: .5;
}

Этот CSS устанавливает video_player , чтобы вокруг него было свободное пространство, и создает под ним два равных столбца.


Есть еще один шаг, прежде чем мы начнем анализировать данные, которые мы получили из RSS-канала. Нам нужно найти идентификатор видео в каждом элементе видео.

Для этого мы создадим отдельную функцию, которую мы поместим в файл functions.php темы, чтобы она была готова для использования в шаблоне.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
function wptuts_get_yt_ID( $uri ) {
 
    // how long YT ID’s are
    $id_len = 11;
 
    // where to start looking
    $id_begin = strpos( $uri, ‘?v=’ );
    // if the id isn’t at the beginning of the uri for some reason
    if( $id_begin === FALSE )
        $id_begin = strpos( $uri, «&v=» );
    // all else fails
    if( $id_begin === FALSE )
        wp_die( ‘YouTube video ID not found. Please double-check your URL.’ );
    // now go to the proper start
    $id_begin +=3;
 
    // get the ID
    $yt_ID = substr( $uri, $id_begin, $id_len);
 
    return $yt_ID;
}

Этот фрагмент кода в основном ищет в указанном URL-адресе строку из 11 символов, которая следует за « &v= » в запросе, и удаляет эти первые три символа для получения идентификатора видео. Мы можем использовать это, чтобы заменить » VIDEO_ID » в нашей разметке.


Теперь мы можем использовать нашу разметку и заменить нашу простую разметку некоторым рабочим кодом, например, так:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<div id=»videos»>
    <div class=»video_player»>
    <?php
    $i = 0;
    foreach ( $rss_items as $item ) :
        if ( $i++ > 0 )
            break;
        $id = wptuts_get_yt_ID( $item->get_permalink() );
    ?>
        <iframe width=»610″ height=»344″ src=»http://www.youtube.com/embed/<?php echo $id; ?>» frameborder=»0″ allowfullscreen></iframe>
    <?php endforeach;
    </div>
    <ul class=»video_thumbs»>
    <?php
    foreach ( $rss_items as $item ) :
        $id = wptuts_get_yt_ID( $item->get_permalink() );
        $enclosure = $item->get_enclosure();
    ?>
        <li>
            <p><a href=»http://www.youtube.com/embed/<?php echo $id; ?>»><img src=»<?php echo esc_url( $enclosure->get_thumbnail() ); ?>» width=»290″ height=»164″ /></a></p>
            <p><a href=»http://www.youtube.com/embed/<?php echo $id; ?>»><?php esc_html_e( $item->get_title() );
        </li>
    <?php endforeach;
    </ul>
</div>

Это создает две петли через элементы RSS. Первый будет прерываться после первого элемента, так как мы хотим вернуть только один iframe для начала.

Второй цикл получает $id и $enclosure каждого элемента, используя доступные нам функции SimplePie, и выводит правильный URL-адрес миниатюры и заголовок, связанный с URL-адресом для вставки для каждой фотографии.


Последний шаг — добавить jQuery, который отменит поведение по умолчанию для каждой ссылки миниатюры, и вместо этого использует эти URL для изменения встроенного видео в iframe . Чтобы сделать это, поставьте в очередь свой файл JavaScript из вашего functions.php следующим образом:

1
2
3
4
5
add_action( ‘wp_enqueue_scripts’, ‘wptuts_enqueue_video_js’ );
function wptuts_enqueue_video_js() {
    if ( is_page_template( ‘page-cats.php’ ) )
        wp_enqueue_script( ‘video_js’, get_template_directory_uri() . ‘/js/video.js’, array( ‘jquery’ ) );
}

Этот код проверит, чтобы убедиться, что мы находимся на пользовательском шаблоне страницы с именем » page-cats.php «, поэтому мы вызываем только сценарий на этой странице и затем ставим в очередь файл JS, который он будет искать в » js » нашей темы каталог и требовать JQuery для его запуска. Теперь вы можете создать этот файл JavaScript со следующим кодом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
jQuery( function($) {
 
    $( ‘#videos .video_thumbs li:first-child’ ).addClass( ‘active’ );
 
    $( ‘#videos .video_thumbs a’ ).on( ‘click’, function(e) {
        e.preventDefault();
 
        $( ‘#videos .video_thumbs li’ ).removeClass( ‘active’ );
        $( this ).parentsUntil( ‘ul’ ).addClass( ‘active’ );
 
        var video = $( this ).attr( ‘href’ );
        $( ‘#videos .video_player iframe’ ).attr( ‘src’, video );
    });
 
});

Этот код добавит « active » класс к первой миниатюре видео li . Затем при нажатии ссылки на миниатюру ссылка не будет покидать страницу, добавит « active » класс к элементу, по которому щелкнули, и использует URL из ссылки для замены URL в источнике iframe , заменяя таким образом активное видео. с новым.


В результате всей вашей тяжелой работы у вас должна быть пользовательская страница видео, которая выглядит примерно так:

videos_page02