Wordpress ACF: использование страницы (с определенным шаблоном страницы) в качестве страницы архива CPT - PullRequest
0 голосов
/ 24 апреля 2018

Я использую ACF для создания страниц с отдельными гибкими разделами макета в двух областях: области раздела главной страницы и области боковой панели.

У меня есть CPT case-studies, и я создал страницу с именемcase-studies.Я установил 'has_archive' => false, в CPT в надежде, что страница используется, однако (и я понимаю), что есть иерархия для этого, так что если не будет предоставлен архив, он загрузит мой home.php (что иЯ использую для своих новостей тип постов).

Можно ли использовать страницу в качестве архива для CPT?Единственное решение, которое я вижу на данный момент, - это использование плагина ACF CPT Options Pages и присоединение полей ACF, которые я создал, к моей странице «Архив тематических исследований», однако мне придется дублировать все моикод, чтобы они могли назвать правильный контент.Например:

the_field('field_name'); до the_field('field_name', 'cpt_case-studies');

Кто-нибудь смог использовать страницу в качестве архива для CPT и назначить шаблон для страницы, которая одновременно запрашивает сообщения CPT иесть поля ACF со страницы?

Большое спасибо за вашу помощь.Если есть что-то еще, что я могу предоставить, дайте мне знать.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

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

function getOtherPageID($page = null) 
{
    global $post; 
    $postIDs = [
        'case-studies' => 42, // 42 being the page ID of the content I need
    ];

    if(array_key_exists($page, $postIDs)) :
        $id = $postIDs[$page];
    endif;

    return $id;
}

Позвонив по номеру $id = getOtherPageID('case-studies'); на моей странице шаблона archive-case-studies.php (или любом другом шаблоне архива), я могу получить нужный мне идентификатор и затем добавить его в поля ACF. Затем при каждом соответствующем вызове поля ACF я просто добавляю $id к вызову поля ACF: get_field('field_name', $id);

Надеюсь, это поможет другим.

---- Обновление ----

Вместо ввода идентификатора записи (в приведенном выше примере 42) я изменил это, чтобы использовать функцию get_page_by_path();. Поэтому моя функция:

function getOtherPageID($page = null) 
{
    global $post; 
    $postIDs = [
        'case-studies' => get_page_by_path( $page ),
    ];

    if(array_key_exists($page, $postIDs)) :
        $id = $postIDs[$page]->ID;
    endif;

    return $id;
}

Теперь он получит объект post, а затем для $id будет установлен идентификатор объекта post, а затем будет возвращен.

0 голосов
/ 24 апреля 2018

Лучший подход для этого - установить для параметра has_archive значение true, а затем создать шаблон archive-case-studies.php в своей теме.Вы все еще можете использовать пользовательские поля из ACF.При использовании the_field() и the_get() вторым принятым параметром является идентификатор записи, но он автоматически устанавливается на основе текущего глобального объекта.

Например:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

    <?php the_field( 'custom_field', $post->ID ); ?>

<?php endwhile; endif; ?>

То же, что и:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

    <?php the_field( 'custom_field' ); ?>

<?php endwhile; endif; ?>

Длинная история, короткая;используйте страницу архива с пользовательским шаблоном, и вы без проблем сможете достичь того, что вам нужно.Если вы сделаете это таким образом, это потребует гораздо меньше усилий, чем создание чего-то особенного, так как с архивными страницами может быть трудно работать.

...