Запрос на несколько сообщений в трех файлах WordPress

#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,
 

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