Вопрос или проблема
У меня есть настраиваемый тип записи “люди”. Для каждого человека я могу ввести следующие настраиваемые поля: “адрес”, “профессия” и “фотографии”.
В файле single-people.php я отображаю адрес и профессию. Кроме того, этот шаблон содержит кнопку галереи — когда пользователь сайта нажимает на нее, я хочу, чтобы он переходил на отдельную страницу, где отображаются только фотографии человека, которого он только что просмотрел.
Как это сделать? Я не могу просто создать второй файл single.php, верно?
Я поклонник шаблонов страниц — вот что я бы сделал.
Сначала создайте страницу с названием что-то вроде Галерея персон
, назовите как хотите.
Затем мы можем либо создать отдельный шаблон page-person-gallery.php
, либо открыть наш page.php
и выполнить условие в нашем цикле, чтобы проверить, просматриваем ли мы страницу галереи персон:
<?php if(have_posts()) : ?>
<?php while(have_posts()) : the_post(); ?>
<?php if($post->post_name == 'person-gallery') : /** Лучше протестировать по ID **/ ?>
<!-- Мы на странице галереи персон -->
<?php else : ?>
<!-- Выполнить стандартную информацию -->
<?php endif; ?>
<?php endwhile; ?>
<?php endif; ?>
Любой из методов, который вы выберете, теперь мы можем создать запрос на основе того, что мы знаем о человеке, что сейчас не так и много. Нам нужно будет создать ссылку в вашем single.php
, которая даст нам немного больше информации о человеке. Поэтому, когда вы создадите свои ссылки на person-gallery
, мы можем передать наш ID человека. Это будет выглядеть примерно так:
<!-- Снова лучше получать ссылку по ID -->
<a href="https://wordpress.stackexchange.com/questions/139905/<?php echo get_permalink( get_page_by_path("person-gallery' ) ).'?person='.$post->ID ?>">Просмотреть галерею</a>
Теперь, когда кто-то нажимает на эту ссылку, мы получаем ID человека, на основе которого можем построить наш запрос. Итак, давайте получим наши изображения:
<?php
if(isset($_GET['person']) && is_numeric($_GET['person'])) {
$pesonID = $_GET['person'];
$attachments = get_children(
array(
'numberposts' => -1,
'post_mime_type' => 'image',
'post_parent' => $personID,
'post_status' => 'any',
'post_type' => 'attachment'
)
);
/** Теперь мы можем отображать наши изображения! **/
$attachments = get_children(
array(
'numberposts' => -1,
'post_mime_type' => 'image',
'post_parent' => $post->ID,
'post_status' => 'any',
'post_type' => 'attachment'
)
);
/** Теперь мы можем отображать наши изображения! **/
foreach($attachments as $imgID => $img){
echo wp_get_attachment_image($imgID);
}
}
else{
echo "<p>Изображения не найдены.</p>";
}
?>
Вы можете передавать размеры и другие параметры в wp_get_attachment_image
, см. Codex, чтобы узнать, что возвращается.
Возможно, вы можете использовать тот же single-page.php. Заголовок, нижний колонтитул и условная боковая панель остаются такими же, а только различаются средние содержимое.
if(is_singular( 'custom_post_title' ) ){
// выполняйте ваши условия
}else if(is_singular( 'custom_post_title_2' )){
// выполняйте ваши условия 2
}else{
//выполните другие действия
}
Ответ или решение
Когда вы работаете с кастомными типами записей в WordPress, важно правильно структурировать шаблоны для предоставления уникального пользовательского опыта на вашем сайте. Рассмотрим вашу задачу по созданию двух разных страниц для отображения информации о людях: одна страница для основной информации, такая как адрес и профессия, и другая для галереи изображений.
Теория
WordPress позволяет создавать шаблоны, которые могут обрабатывать различные аспекты веб-страниц. Для кастомных типов записей, таких как "people", можно использовать шаблон single-people.php
для отображения основной информации. Однако, если вы хотите перенаправлять пользователей на отдельную страницу, где показываются только изображения, необходимо использовать концепцию шаблонов страниц и параметров URL.
Пример
-
Создание страницы для галереи:
- Создайте новую страницу в WordPress и назовите её, например, "Person Gallery".
- Для этой страницы вам понадобится шаблон, который будет отображать изображения, связанные с конкретным человеком. Вы можете назвать его
page-person-gallery.php
.
-
Настройка шаблона страницы:
- В файле
page-person-gallery.php
используйте условный блок, чтобы проверить, отображается ли страница "Person Gallery":<?php if(have_posts()) : ?> <?php while(have_posts()) : the_post(); ?> <?php if($post->post_name == 'person-gallery') : ?> <!-- Здесь будет код для отображения галереи --> <?php else : ?> <!-- Стандартное наполнение страницы --> <?php endif; ?> <?php endwhile; ?> <?php endif; ?>
- Задайте логику для получения ID человека через параметр URL и используйте его, чтобы загрузить соответствующие изображения.
- В файле
-
Ссылка в шаблоне
single-people.php
:- В
single-people.php
добавьте ссылку на страницу галереи, передавая ID конкретного человека:<a href="<?php echo get_permalink(get_page_by_path("person-gallery")) . '?person=' . $post->ID; ?>">Просмотреть галерею</a>
- Эта ссылка передаст ID человека в URL, который можно использовать на странице галереи для отображения соответствующих изображений.
- В
Применение
При переходе на страницу "Person Gallery" URL будет содержать параметр, идентифицирующий конкретного человека. В page-person-gallery.php
используйте $_GET['person']
, чтобы получить ID и запросить все связанные изображения:
if(isset($_GET['person']) && is_numeric($_GET['person'])) {
$personID = $_GET['person'];
$attachments = get_children(array(
'numberposts' => -1,
'post_mime_type' => 'image',
'post_parent' => $personID,
'post_status' => 'any',
'post_type' => 'attachment'
));
foreach($attachments as $imgID => $img) {
echo wp_get_attachment_image($imgID);
}
} else {
echo "<p>Изображений не найдено.</p>";
}
Таким образом, этот подход позволяет не только организовать функционал в пределах текущей архитектуры WordPress, но и создает чистое и логичное разделение контента. Это обеспечивает пользователям более высокую степень интерактивности и персонализации при работе с контентом вашего сайта.