Два файла single.php?

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

У меня есть настраиваемый тип записи “люди”. Для каждого человека я могу ввести следующие настраиваемые поля: “адрес”, “профессия” и “фотографии”.

В файле 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.

Пример

  1. Создание страницы для галереи:

    • Создайте новую страницу в WordPress и назовите её, например, "Person Gallery".
    • Для этой страницы вам понадобится шаблон, который будет отображать изображения, связанные с конкретным человеком. Вы можете назвать его page-person-gallery.php.
  2. Настройка шаблона страницы:

    • В файле 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 и используйте его, чтобы загрузить соответствующие изображения.
  3. Ссылка в шаблоне 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, но и создает чистое и логичное разделение контента. Это обеспечивает пользователям более высокую степень интерактивности и персонализации при работе с контентом вашего сайта.

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

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