Как используя ACF выводить блок с документами на всех страницах сайта?

Ссылка скопирована
1 ответ

Всем привет.
Сайт сверстан на html css js и поставлен на чистую тему WP. Всего порядка 10-12 страниц.
Есть блок с документами, который повторяется почти на каждой странице сайта.
Я этот блок вынес в отдельный файл php и вставляю на нужную
мне страницу с помощью <?php get_template_part('documentation'); ?>

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

Как используя ACF выводить блок с документами на всех страницах сайта?

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

Код блока с документами

&lt;div class="documentation section" id="documentation"&gt;     &lt;div class="container"&gt;         &lt;h2 class="section-title textCenter"&gt;             Разрешительная документация АНО ДПО «ВАМО»          &lt;/h2&gt;         &lt;div class="swiper swiper_documentation"&gt;             &lt;div class="swiper-wrapper swiper-wrapper_doc doc-wrap displayFlex alignCenter justifyBetween"&gt;                 &lt;div class="swiper-slide"&gt;                     &lt;a href="&lt;?php the_field('doc-wrap__img-1'); ?&gt;" data-lightbox="example-set"&gt;                         &lt;img src="&lt;?php the_field('doc-wrap__img-1'); ?&gt;" class="doc-wrap__img" alt="документ"&gt;                     &lt;/a&gt;                 &lt;/div&gt;                 &lt;div class="swiper-slide"&gt;                     &lt;a href="&lt;?php the_field('doc-wrap__img-2'); ?&gt;" data-lightbox="example-set"&gt;                         &lt;img src="&lt;?php the_field('doc-wrap__img-2'); ?&gt;" class="doc-wrap__img" alt="документ"&gt;                     &lt;/a&gt;                 &lt;/div&gt;                 &lt;div class="swiper-slide"&gt;                     &lt;a href="&lt;?php the_field('doc-wrap__img-3'); ?&gt;" data-lightbox="example-set"&gt;                         &lt;img src="&lt;?php the_field('doc-wrap__img-3'); ?&gt;" class="doc-wrap__img" alt="документ"&gt;                     &lt;/a&gt;                 &lt;/div&gt;             &lt;/div&gt;             &lt;div class="swiper-pagination swiper-pagination_doc"&gt;&lt;/div&gt;             &lt;button type="button" class="slide-next-doc slide-btn"&gt;                 &lt;svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"&gt;                     &lt;path d="M8.875 21.1004L17.3 12.7004C17.4 12.6004 17.471 12.4921 17.513 12.3754C17.555 12.2587 17.5757 12.1337 17.575 12.0004C17.575 11.8671 17.5543 11.7421 17.513 11.6254C17.4717 11.5087 17.4007 11.4004 17.3 11.3004L8.875 2.87539C8.64166 2.64206 8.35 2.52539 8 2.52539C7.65 2.52539 7.35 2.65039 7.1 2.90039C6.85 3.15039 6.725 3.44206 6.725 3.77539C6.725 4.10872 6.85 4.40039 7.1 4.65039L14.45 12.0004L7.1 19.3504C6.86666 19.5837 6.75 19.8714 6.75 20.2134C6.75 20.5554 6.875 20.8511 7.125 21.1004C7.375 21.3504 7.66666 21.4754 8 21.4754C8.33333 21.4754 8.625 21.3504 8.875 21.1004Z"                      fill="white"/&gt;                 &lt;/svg&gt;             &lt;/button&gt;             &lt;button type="button" class="slide-prev-doc slide-btn"&gt;                 &lt;svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"&gt;                     &lt;path d="M15.1249 21.1004L6.69994 12.7004C6.59994 12.6004 6.52894 12.4921 6.48694 12.3754C6.44494 12.2587 6.42428 12.1337 6.42494 12.0004C6.42494 11.8671 6.44561 11.7421 6.48694 11.6254C6.52828 11.5087 6.59928 11.4004 6.69994 11.3004L15.1249 2.87539C15.3583 2.64206 15.6499 2.52539 15.9999 2.52539C16.3499 2.52539 16.6499 2.65039 16.8999 2.90039C17.1499 3.15039 17.2749 3.44206 17.2749 3.77539C17.2749 4.10872 17.1499 4.40039 16.8999 4.65039L9.54994 12.0004L16.8999 19.3504C17.1333 19.5837 17.2499 19.8714 17.2499 20.2134C17.2499 20.5554 17.1249 20.8511 16.8749 21.1004C16.6249 21.3504 16.3333 21.4754 15.9999 21.4754C15.6666 21.4754 15.3749 21.3504 15.1249 21.1004Z"                      fill="#1568E8"/&gt;                 &lt;/svg&gt;             &lt;/button&gt;         &lt;/div&gt;     &lt;/div&gt; &lt;/div&gt;

&lt;div class="documentation section" id="documentation"&gt; &lt;div class="container"&gt; &lt;h2 class="section-title textCenter"&gt; Разрешительная документация АНО ДПО «ВАМО» &lt;/h2&gt; &lt;div class="swiper swiper_documentation"&gt; &lt;div class="swiper-wrapper swiper-wrapper_doc doc-wrap displayFlex alignCenter justifyBetween"&gt; &lt;div class="swiper-slide"&gt; &lt;a href="&lt;?php the_field('doc-wrap__img-1'); ?&gt;" data-lightbox="example-set"&gt; &lt;img src="&lt;?php the_field('doc-wrap__img-1'); ?&gt;" class="doc-wrap__img" alt="документ"&gt; &lt;/a&gt; &lt;/div&gt; &lt;div class="swiper-slide"&gt; &lt;a href="&lt;?php the_field('doc-wrap__img-2'); ?&gt;" data-lightbox="example-set"&gt; &lt;img src="&lt;?php the_field('doc-wrap__img-2'); ?&gt;" class="doc-wrap__img" alt="документ"&gt; &lt;/a&gt; &lt;/div&gt; &lt;div class="swiper-slide"&gt; &lt;a href="&lt;?php the_field('doc-wrap__img-3'); ?&gt;" data-lightbox="example-set"&gt; &lt;img src="&lt;?php the_field('doc-wrap__img-3'); ?&gt;" class="doc-wrap__img" alt="документ"&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="swiper-pagination swiper-pagination_doc"&gt;&lt;/div&gt; &lt;button type="button" class="slide-next-doc slide-btn"&gt; &lt;svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"&gt; &lt;path d="M8.875 21.1004L17.3 12.7004C17.4 12.6004 17.471 12.4921 17.513 12.3754C17.555 12.2587 17.5757 12.1337 17.575 12.0004C17.575 11.8671 17.5543 11.7421 17.513 11.6254C17.4717 11.5087 17.4007 11.4004 17.3 11.3004L8.875 2.87539C8.64166 2.64206 8.35 2.52539 8 2.52539C7.65 2.52539 7.35 2.65039 7.1 2.90039C6.85 3.15039 6.725 3.44206 6.725 3.77539C6.725 4.10872 6.85 4.40039 7.1 4.65039L14.45 12.0004L7.1 19.3504C6.86666 19.5837 6.75 19.8714 6.75 20.2134C6.75 20.5554 6.875 20.8511 7.125 21.1004C7.375 21.3504 7.66666 21.4754 8 21.4754C8.33333 21.4754 8.625 21.3504 8.875 21.1004Z" fill="white"/&gt; &lt;/svg&gt; &lt;/button&gt; &lt;button type="button" class="slide-prev-doc slide-btn"&gt; &lt;svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"&gt; &lt;path d="M15.1249 21.1004L6.69994 12.7004C6.59994 12.6004 6.52894 12.4921 6.48694 12.3754C6.44494 12.2587 6.42428 12.1337 6.42494 12.0004C6.42494 11.8671 6.44561 11.7421 6.48694 11.6254C6.52828 11.5087 6.59928 11.4004 6.69994 11.3004L15.1249 2.87539C15.3583 2.64206 15.6499 2.52539 15.9999 2.52539C16.3499 2.52539 16.6499 2.65039 16.8999 2.90039C17.1499 3.15039 17.2749 3.44206 17.2749 3.77539C17.2749 4.10872 17.1499 4.40039 16.8999 4.65039L9.54994 12.0004L16.8999 19.3504C17.1333 19.5837 17.2499 19.8714 17.2499 20.2134C17.2499 20.5554 17.1249 20.8511 16.8749 21.1004C16.6249 21.3504 16.3333 21.4754 15.9999 21.4754C15.6666 21.4754 15.3749 21.3504 15.1249 21.1004Z" fill="#1568E8"/&gt; &lt;/svg&gt; &lt;/button&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;

Код выше выводит документы на главной, а на других страницах эти блоки без изображений.
Как выводить эти документы на всех страницах?

Дополнительно

Как используя ACF выводить блок с документами на всех страницах сайта?

Евгений Леонов @leotoleo Автор вопроса Верстаю на html css js Решение нашел, вывел с помощью <?php echo get_field( 'имя поля', id страницы ); ?>

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Максим Павлов Ответ

Если один и тот же блок документов должен выводиться на многих страницах, не нужно привязывать ACF-группу ко всем этим страницам и заполнять документы заново. Это приведёт к дублям данных: поменяли один документ в одном месте, забыли на другой странице, получили разные версии одного блока. Для общего блока нужны общие настройки. Лучший вариант в ACF Pro — Options Page: документы хранятся один раз в настройках сайта, а шаблон documentation.php выводит их где нужно через get_template_part.

Добавьте страницу настроек ACF в functions.php дочерней темы или в небольшой плагин:

add_action('acf/init', function () {
    if (! function_exists('acf_add_options_page')) {
        return;
    }
 
    acf_add_options_page(array(
        'page_title' =&gt; 'Документы сайта',
        'menu_title' =&gt; 'Документы сайта',
        'menu_slug' =&gt; 'site-documents',
        'capability' =&gt; 'edit_pages',
        'redirect' =&gt; false,
    ));
});

add_action('acf/init', function () { if (! function_exists('acf_add_options_page')) { return; } acf_add_options_page(array( 'page_title' =&gt; 'Документы сайта', 'menu_title' =&gt; 'Документы сайта', 'menu_slug' =&gt; 'site-documents', 'capability' =&gt; 'edit_pages', 'redirect' =&gt; false, )); });

В ACF создайте группу полей с правилом показа для этой Options Page. Вместо отдельных полей doc-wrap__img-1, doc-wrap__img-2 и doc-wrap__img-3 удобнее сделать repeater site_documents, а внутри него поле image с типом Image и форматом возврата ID. Тогда количество документов можно менять без правки шаблона.

$documents = function_exists('get_field') ? get_field('site_documents', 'option') : array();
 
if (empty($documents) || ! is_array($documents)) {
    return;
}
 
echo '&lt;section class=&quot;documentation section&quot; id=&quot;documentation&quot;&gt;';
echo '&lt;div class=&quot;container&quot;&gt;';
echo '&lt;h2 class=&quot;section-title textCenter&quot;&gt;Разрешительная документация&lt;/h2&gt;';
echo '&lt;div class=&quot;swiper swiper_documentation&quot;&gt;';
echo '&lt;div class=&quot;swiper-wrapper swiper-wrapper_doc doc-wrap displayFlex alignCenter justifyBetween&quot;&gt;';
 
foreach ($documents as $document) {
    $image_id = isset($document['image']) ? (int) $document['image'] : 0;
 
    if (! $image_id) {
        continue;
    }
 
    $full = wp_get_attachment_image_url($image_id, 'full');
 
    if (! $full) {
        continue;
    }
 
    echo '&lt;div class=&quot;swiper-slide&quot;&gt;';
    echo '&lt;a href=&quot;' . esc_url($full) . '&quot; data-lightbox=&quot;example-set&quot;&gt;';
    echo wp_get_attachment_image($image_id, 'large', false, array(
        'class' =&gt; 'doc-wrap__img',
    ));
    echo '&lt;/a&gt;';
    echo '&lt;/div&gt;';
}
 
echo '&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;';

$documents = function_exists('get_field') ? get_field('site_documents', 'option') : array(); if (empty($documents) || ! is_array($documents)) { return; } echo '&lt;section class=&quot;documentation section&quot; id=&quot;documentation&quot;&gt;'; echo '&lt;div class=&quot;container&quot;&gt;'; echo '&lt;h2 class=&quot;section-title textCenter&quot;&gt;Разрешительная документация&lt;/h2&gt;'; echo '&lt;div class=&quot;swiper swiper_documentation&quot;&gt;'; echo '&lt;div class=&quot;swiper-wrapper swiper-wrapper_doc doc-wrap displayFlex alignCenter justifyBetween&quot;&gt;'; foreach ($documents as $document) { $image_id = isset($document['image']) ? (int) $document['image'] : 0; if (! $image_id) { continue; } $full = wp_get_attachment_image_url($image_id, 'full'); if (! $full) { continue; } echo '&lt;div class=&quot;swiper-slide&quot;&gt;'; echo '&lt;a href=&quot;' . esc_url($full) . '&quot; data-lightbox=&quot;example-set&quot;&gt;'; echo wp_get_attachment_image($image_id, 'large', false, array( 'class' =&gt; 'doc-wrap__img', )); echo '&lt;/a&gt;'; echo '&lt;/div&gt;'; } echo '&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;';

После этого на нужных страницах оставляете ваш вызов get_template_part('documentation'), а сами документы редактируете в одном разделе админки. Если блок нужен почти на всех страницах, можно вызывать template part в общем шаблоне страницы и скрывать его условием для исключений. Например, не выводить на странице контактов или на технических страницах.

Если у вас не ACF Pro и Options Page недоступна, рабочая альтернатива — создать отдельную страницу «Настройки сайта», привязать ACF-группу только к ней и получать поля по ID этой страницы: get_field('site_documents', $settings_page_id). Это чуть менее удобно, но всё равно лучше, чем копировать одни и те же документы на каждую страницу.

  • Для общего блока храните документы в одном месте.
  • Для списка документов используйте repeater, а не жёстко заданные три поля.
  • Для изображений документов лучше хранить ID вложения: так WordPress сможет корректно вывести src, srcset, alt и размеры.
  • Шаблон documentation.php должен только выводить данные, а не содержать разные копии одного списка.
Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно