Я создаю собственный слайдер галереи для темы WordPress, и у меня есть проблема с архитектурой:
Пока я в шаблоне поста (single.php
) С помощью этого кода я могу легко получить массив со всеми изображениями галерей постов.
$galleries = get_post_galleries( $post, false);
(КСТАТИ: Ложный параметр должен иметь их URL вместо самих изображений)
но когда я нажимаю на изображение определенной галереи, и я перенаправлен на шаблон вложения (attachment.php
), то невозможно иметь тот же массив.
Я пробовал с:
$galleries = get_post_galleries( $post->post_parent, false);
но это не работает должным образом. Действительно, если я построю галерею с некоторыми изображениями, которые изначально были прикреплены к другому посту (например, к более старому), post_parent
Параметр будет ссылаться на тот старый пост, а не на тот, который перенаправил меня в шаблон вложения.
Ну, это проблема, потому что мой скрипт-слайдер загружается в attachement.php
и он не может обработать правильный массив картинок.
Я не могу вызвать это, пока в single.php
потому что слайд-шоу начинается после нажатия на изображение галереи.
(На данный момент я отказываюсь от идеи создания более сложного сценария, который позволит избежать загрузки attachment.php
tempalte).
Я ищу обходной путь для извлечения в PHP нужного массива в шаблоне вложения.
Мне удалось сделать это таким образом, внутри цикла, в attachment.php:
// switch to the parent post, the one holding the shortcode(s)
$post = get_post( wp_get_post_parent_id( get_the_ID( ) ), OBJECT );
setup_postdata( $post );
// get the galleries
$galleries = get_post_galleries( $post, false );
// VERY IMPORTANT: restore the original post (the attachment)
wp_reset_postdata( );
Личное примечание: я думаю, что ошибка находится в цепочке вызовов:
get_post_galleries, do_shortcode_tag, gallery_shortcode
неправильно передает параметр идентификатора поста, так что в определенной точке идентификатор вложения используется вместо того, который был предоставлен пользователем при первом вызове get_post_galleries.
Других решений пока нет …