get_queried_object() и всё такое

Недавно столкнулся с проблемой вывода заголовков страниц на страницах с циклами, например Новости. Т.е. обычно на сайте присутствует page-header в котором указывается название текущей страницы, будь это Контакты или Каталог товаров. Я долго не мог нормально определиться с правильным получением заголовка текущей страницы, но наткнулся на обёртку над $wp_query->get_queried_object(), которая возвращает текущий объект запроса. Собственно если его вызывать на странице вне циклов, то он вернёт «всё», что связано с ней. Заголовки, таксономии, описания, контенты и так далее.

Финальный результат вывода заголовков на странице в какой-либо секции:

echo get_the_title(get_queried_object());

Создаём get_template_part с параметрами

Привет, читатель. Возникла необходимость создать get_template_part с параметрами, чтобы можно было передать, например, массив данных в цикл, или условия выполнения и так далее. Изначально функция get_template_part не поддерживает такой функционал, но мы напишем свой get_template_part, который будет уметь принимать параметры.

Для этого нам понадобиться разобраться с тем, как работает get_template_part. Если открыть документацию по функции get_template_part то видно, что она использует функцию locale_template, а та использует load_template, что никак иначе обычный require_once. Другими словами вместо get_template_part подставляется содержимое файла, указанного в параметрах.

Пример использования get_template_part

$anyString = 'string';
get_template_part('home'); // Получим содержимое файла home.php в корне темы.

Но нам нужно, чтобы на момент работы скрипта, наш файл home.php знал о существовании $anyString. Тогда нехитрыми манипуляциями, мы пишем функцию, в которую будем передавать массив данных.

function getTemplatePart($part, $vars = NULL) {
   if (isset($vars)) {
      if (is_array($vars)) {
         foreach ($vars as $key => $value) {
            $key = '_' . $key;
            $$key = $value;
         }
      }
   }
   include(locate_template($part . '.php', false, false));
}

Данную функцию нужно поместить в файл functions.php и свободно использовать параметры в своих файлах шаблонов.


getTemplatePart('home', array('anyString' => $anyString));

А в файле home мы будем использовать переменную $_anyString, символ нижнего подчёркивания больше для понимания откуда пришли переменные. Т.е. если у вас есть переменная $anyString, то в файле, в который передаёте уже будет $_anyString.

Удачи в освоении WordPress.