#php #wordpress #advanced-custom-fields #custom-post-type
Вопрос:
Мне нужно сделать управляемым некоторый текст в моей полной пользовательской теме HTML/CSS. Поэтому я создал пользовательскую запись, чтобы сделать это с помощью пользовательского поля ACF. Все работает нормально !
Вот код :
$posts = get_posts(array(
'numberposts' => -1,
'post_type' => 'infos',
));
foreach ($posts as $post) :
$contact = get_field('contact');
<a href="tel:<?=$contact['tel']?>"><?=$contact['tel']?></a>
endforeach
Это легкая версия для объяснения, и она работает. Но…
Я использую этот код в header.php и footer.php.
Если я использую его в верхнем и нижнем колонтитулах, пользовательское поле сообщений не работает в single.php Если я использую его в верхнем или нижнем колонтитуле, это работает в single.php
Я думаю, что по количеству запросов на сообщения (3, верхний, нижний колонтитулы, один)
Как я могу сделать один запрос на два файла (верхний и нижний колонтитулы) ? Могу ли я сделать запрос раньше ? Я открыт для любой идеи
Ответ №1:
В этом случае нам нужно использовать глобальный
Этот код в заголовок
<?php
global $contacts_data;
$contacts_data = get_posts(array(
'numberposts' => -1,
'post_type' => 'infos',
'fields' => 'ids',
'no_found_rows' => true,
));
foreach ($contacts_data as $contact_id) :
$contact = get_field('contact', $contact_id);
?>
<a href="tel:<?=$contact['tel']?>"><?=$contact['tel']?></a>
<?php endforeach; ?>
И этот код для single.php и footer.php
<?php
global $contacts_data;
foreach ($contacts_data as $contact_id) :
$contact = get_field('contact', $contact_id);
?>
<a href="tel:<?=$contact['tel']?>">11111<?=$contact['tel']?></a>
<?php
endforeach;
?>
Важная деталь, которую мы используем в запросе
'fields' => 'ids',
'no_found_rows' => true,
поскольку нам нужны только идентификаторы, это значительно снижает нагрузку на базу данных и ускоряет выполнение запроса