@MatArt

WPML + ACF как задать динамический id страницы?

Добрый день ребят, второй день не могу решить вопрос.
Есть админка, на главной странице с помощью плагина Advanced Custom Fields сделаны поля для заполнения контактной информации и вывода их на главную и внутреннюю страницу. Сам вывод полей написан в файле footer.php, так как блок с контактами сквозной. Вывод происходит так:
<?php if( have_rows('contacts', 6) ): ?>
            <?php while( have_rows('contacts', 6) ): the_row(); ?>
              <div class="col-md-3 col-sm-6">
            <div class="item">

              <div class="location"><?php the_sub_field('adres'); ?></div>
              <div class="lodescr"><?php the_sub_field('ad_descr'); ?></div>
              <div class="map" id="<?php the_sub_field('mapid'); ?>"></div>
            </div>
          </div>
          <?php endwhile; ?>
          <?php endif; ?>


Где
<?php if( have_rows('contacts', 6) ): ?>

Цифра 6 говорит с какой странице брать значение для вывода (6 - главная страница в проекте).

Теперь о проблеме.
Сайт имеет 4 языка, все переведено, но wpml для английского языка создает дубликат главной страницы, следовательно ее id уже не 6.
Сейчас на все языки выводится контакты с главной страницы русской версии (id=6), а надо чтобы в зависимости языка подменялся id в вызове:
<?php if( have_rows('contacts', 6) ): ?>

Как это реализовать? :)

Не хотелось бы создавать новый футер для каждой языковой версии, уверен что проблема решаема, но гугл не особо помог.
  • Вопрос задан
  • 232 просмотра
Решения вопроса 1
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Конкретно в вашем случае:
have_rows( 'contacts', apply_filters( 'wpml_object_id', 6, 'page' ) )

Подробнее в документации. Да, она у них есть, хоть и спрятана очень глубоко. Вот тут основная часть их АПИ задокументирована.

Но вообще я бы пошел другим путем. Контакты у вас, вы говорите, в футере, сквозные. То есть, грузятся на всех страницах. В таком случае разумнее делать Options page с включенным параметром autoload. Во-первых, оно будет в настройках, а не в одной из страниц, что логичнее. Во-вторых, благодаря autoload данные будут загружены и закешированы вместе с другими options на раннем этапе, а значит минус лишние запросы в БД (которые гарантированно будут, потому что футер у вас на всех страницах).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы