Как «активировать» часть php кода, если пользователь видит блок, в котором находится содержимое этого кода?
Допустим, у меня на странице 3 цикла, т.е. три div'a в которых выводятся посты, но один из них имеет display: none (показываю его при определенной ширине экрана через css). Его не видно, а он есть, верно? Имею ввиду, что посты все равно загружаются, просто их не видно. Соответственно идет дополнительная нагрузка на сайт.
Как можно "активировать" часть php кода, в данном случае, отвечающего за вывод постов, только в случае, если пользователь видит данный блок?
Никак. клиенту отсылается уже готовый html документ, со всем тем, что обработал php. Если у вас дублируются посты - один блок для десктопа, а второй для мобилки, то у вас что-то не так с версткой. От клиента вы можете только отправить ajax запрос за новыми данными при определенных условиях.
Но на стороне сервера вы можете определить User-Agent клиента, что позволит вам узнать зашел ли юзер с мобильного браузера. И обработать это условие, и если браузер мобильной, то только тогда делать третий цикл и получать посты, а если браузер не мобильный, то делать только 2 цикла. Если речь идет о WP, то в нем есть готовая функция для проверки юзер агента https://wp-kama.ru/function/wp_is_mobile
И помните, она работает не на клиенте, и не от ширины экрана, а на сервере и зависит от заголовков, которые передает клиент.
Важно понимать, что сначала отрабатывает PHP, который формирует и отдаёт html, а уже потом. Браузер, приняв этот html, рендерит его, ну и если у чего-то там display:none, то не показывает этого.
Вам надо сразу не генерировать этот div. Как это сделать зависит от того кода который у вас уже есть.
Это очень сильно зависит от того что у вас уже есть. Но вот концептуальный пример:
код
if($something){
//... какой-то тяжёлый код, читает из базы, считает, рисует...
}
разметка
<?if($something):?>
<!-- выводим результат вычислений -->
<div>...</div>
<?endif?>
В переменной $something у нас какой-то признак того, что надо что-то сделать и потом показать. Соответственно если он равен true то это будет сделано, иначе - нет.