Статьи

Создание собственного шаблона страницы галереи изображений в WordPress

Сегодня я расскажу вам, как создать собственный шаблон для страниц «Галерея» в WordPress. Я помню, как в прошлом хотел внедрить галерею в мою тему и разочаровался в вариантах. Встроенная в WordPress галерея работает хорошо, но в большинстве случаев не совсем подходит. Кроме того, плагины, такие как галерея NexGen, часто бывают больше, чем вам нужно или нужно. Я покажу вам, как легко создать страницу шаблона галереи, которую можно легко настроить и изменить для будущих тем или версий.


В этом уроке я покажу вам, как создать шаблон галереи для темы, включенной в WordPress, TwentyEleven. Вы можете использовать любую тему, какую захотите, но для примера я использую TwentyEleven.


Перейдите в каталог тем wp-content / themes / {theme}, в который вы хотите добавить шаблон галереи. Найдите page.php, скопируйте, вставьте и переименуйте в template-gallery.php . Для пользовательских шаблонов мне нравится добавлять префикс «template-», так как его легче найти.


WordPress распознает определения шаблонов в заголовке файлов шаблонов тем. Чтобы определить шаблон, добавьте комментарий PHP, как в примере ниже. Для этого откройте созданный вами файл template-gallery.php и добавьте блок комментария, в котором указано имя шаблона.

1
2
3
4
5
<?php
/*
Template Name: Gallery Page
*/
?>

http://codex.wordpress.org/Theme_Development#Custom_Page_Templates


WordPress обрабатывает вложения на страницах как посты post_type — вложение с родительской страницей. WordPress имеет встроенную функцию для запроса сообщений, которые являются дочерними элементами определенной страницы post / post_type . get_children (); принимает все виды параметров для извлечения дочернего контента, связанного с родителем. Ознакомьтесь с документацией по адресу http://codex.wordpress.org/Function_Reference/get_children . Эта функция WordPress позволяет легко извлекать вложения для определенной страницы.

Для нашей галереи мы хотим, чтобы изображения появлялись перед контентом. Таким образом, мы собираемся загрузить изображения страницы в цикле страницы, но до содержимого. Для TwentyEleven вы можете поместить фрагмент прямо под <? Php the_post (); ?> . В других темах вы можете вставить код в цикл выше <? Php the_title (); ?> . Посмотрите код ниже, чтобы увидеть, как get_children ($ args); реализовано и прочитайте объяснение после него.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
<?php
 
$args = array(
    ‘numberposts’ => -1, // Using -1 loads all posts
    ‘orderby’ => ‘menu_order’, // This ensures images are in the order set in the page media manager
    ‘order’=> ‘ASC’,
    ‘post_mime_type’ => ‘image’, // Make sure it doesn’t pull other resources, like videos
    ‘post_parent’ => $post->ID, // Important part — ensures the associated images are loaded
    ‘post_status’ => null,
    ‘post_type’ => ‘attachment’
);
 
$images = get_children( $args );
// continued below …
?>
  1. ‘numberposts’ Мы можем определить количество изображений, которые вытягивает функция. Чтобы запросить все изображения, используйте -1
  2. ‘orderby’ Мы могли бы упорядочить по заголовку или дате или другому варианту, но преимущество ‘menu_order’ заключается в том, что порядок в менеджере мультимедиа для страницы будет таким же, как порядок загрузки изображений.
  3. ‘post_mime_type’ Мы хотим, чтобы сообщения были только изображениями
  4. ‘post_parent’ Мы хотим вытащить детей текущей страницы. Мы можем получить доступ к глобальному $ post и идентификатору его свойства для передачи в качестве parent_id
  5. ‘post_type’ ‘post_mime_type’ заботится о том, чтобы убедиться, что только изображения извлекаются, но определение ‘post_type’ как ‘attachment’ помогает уменьшить запрос.

После get_children ($ args); запрашивает вложения и возвращает значения, которые мы хотим проверить, чтобы запрос вернул результаты. Некоторые страницы могут не иметь прикрепленных изображений, и нам не нужно перебирать пустые результаты. Мы будем использовать условное выражение, чтобы увидеть, возвращает ли $ images значение, и если да, то мы знаем, что на странице есть вложения, и затем мы можем их просмотреть

1
2
3
4
5
6
7
8
// continued from above …
if($images){ ?>
<div id=»slider»>
    <?php foreach($images as $image){ ?>
    <img src=»<?php echo $image->guid; ?>» alt=»<?php echo $image->post_title; ?>» title=»<?php echo $image->post_title; ?>» />
    <?php } ?>
</div>
<?php } ?>

Для каждого вложения изображения мы хотим вывести изображение. Каждый объект $ image имеет несколько свойств, к которым вы можете обращаться и выводить. Наиболее важным для этого примера является источник каждого изображения, который является свойством guid . В целях доступности и SEO мы можем вывести заголовок изображения и поместить в него атрибуты alt & title изображений.


Для следующего шага мы собираемся добавить плагин jQuery, чтобы оживить нашу галерею. Плагин, который мы собираемся использовать, это Flux Slider , плагин Javascript / jQuery. Загрузите исходный код и поместите файл flux.min.js в папку wp-content / themes / {theme} / js . Поскольку я использую тему TwentyEleven, jQuery не включен в публичную часть, поэтому мне нужно обязательно включить ее — если вы используете другую тему, убедитесь, что jQuery загружен.

Включите jQuery (если не включен aleady) и скрипт flux.min.js в нижний колонтитул — убедитесь, что flux.min.js находится ниже включения jQuery, но перед wp_footer (); функция.

1
2
3
4
5
6
7
<script src=»https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js»></script>
<script src=»<?php bloginfo(‘template_url’);?>/js/flux.min.js»></script>
<script>
    window._flux = new flux.slider(‘#slider’,{pagination: true});
</script>
 
<?php wp_footer();

Как видите, довольно просто перетащить изображения, прикрепленные к странице, и настроить их вывод. Вы можете легко включить этот же цикл в сообщения или в пользовательский тип сообщения.

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

WordPress очень гибкий, и это еще один пример того, как легко с ним строить!