Аааа.
1) Пункт 1 пока оставим
2) Пункт 2. У вас есть текстовое поле, которое вы скрываете в админке, но которое нужно показать в списке записей. Используйте такую конструкцию:
<?php if(!empty($item['НАЗВАНИЕ ПОЛЯ'])) { echo $item['НАЗВАНИЕ ПОЛЯ']; } ?>
Здесь сразу делаем проверку на заполненность поля — если не заполнено, то не выводим его. Если поле нужно вывести в каких-то дивах или специальном теге, то лучше используйте такую конструкцию
<?php if(!empty($item['НАЗВАНИЕ ПОЛЯ'])) { ?> <h3><?php echo $item['НАЗВАНИЕ ПОЛЯ']; ?></h3>
<?php } ?>
Если необходимо, чтобы поле принимало дефолтное значение, если оно не заполнено, то перепишем конструкцию используя тернарный оператор
<?php echo (empty($item['НАЗВАНИЕПОЛЯ'])) ?
'Цена не указана' : $item['НАЗВАНИЕПОЛЯ']; ?>
Добавлено спустя 5 минут
По 3 пункту — здесь не нужно изголяться с кодом, вычислять ID записей, у которых присутствует заполненное поле — все это можно решить системными наборами типов контента.
Добавлено спустя Только что
Ну и по первому пункту тоже немного непонятно. У вас же есть фильтр? Отключите ненужные поля и оставьте для показа в фильтре только заголовок