В то время как я обычно использовал include
или require
самостоятельно, чтобы сохранить долгосрочное обслуживание кода, я начал использовать, get_template_part
и locate_template
использование встроенных в WordPress вещей всегда лучше.
Мой вопрос в том, должны ли вы передавать переменные в результаты get_template_part
или locate_template
?
<?php
$var = get_option( 'my-custom-option' );
get_template_part( 'custom-template-part' );
?>
В приведенном выше коде $var
они будут напечатаны внутри пользовательского шаблона, но переменная, похоже, не работает. Я что-то упустил или это ожидаемое поведение?
Я обнаружил, что они не проходят в приведенном выше примере или при использовании locate_template
<?php
locate_template( 'custom-template-part.php', true );
?>
источник
locate_template()
infact делает включение, еслиtrue
в вопросе задан параметр -as. (по умолчаниюfalse
, поэтому не вставляйте версию вопросов в принятый ответ.) Вы также можете просто использоватьset_query_var('var', $var);
и использовать своюget_template_part()
как обычно. Тогда у вас также есть переменные Worpdress по умолчанию, доступные в файле шаблона, как упоминалось в @MathSmath.Аккуратное решение найдено в кодексе
Так что, если вы просматриваете пользовательские сообщения, вы можете сделать это:
И в этом шаблоне вы автоматически получите
$my_post
.источник
wc_get_template_part
в WooCommerce, который, без сомнения, расширяет стандартный WP.У меня тоже были проблемы с этим (при попытке заставить пользовательский запрос работать с частью шаблона). Краткий ответ: нет, часть шаблона автоматически не наследует пользовательские переменные, как обычное включение.
И get_template_part (), и locate_template () в конечном итоге используют функцию load_template () для фактической загрузки файла (используя require). Эта функция глобализирует следующие переменные:
$ posts, $ post, $ wp_did_header, $ wp_did_template_redirect, $ wp_query, $ wp_rewrite, $ wpdb, $ wp_version, $ wp, $ id, $ comment, $ user_ID
Однако никакие другие переменные не доступны внутри части шаблона. Я думаю, так как фактическое требование обернуто в функцию, область видимости меняется или что-то?
В любом случае, я бы попробовал глобализировать любые дополнительные переменные, которые вам нужно пропустить, а затем вызвать эти глобальные переменные из вашей части шаблона.
источник
Просто мои два цента за будущие ссылки, обходной путь по крайней мере в Wordpress 3.5 - добавить переменную в
$wp_query->query_vars
.Мне нужно было мое глобальное
_vk_errors
внутри части шаблона и только что сделал$wp_query->query_vars['_vk_errors'] = $_vk_errors;
перед вызовомget_template_part()
.источник
Вот моя простая функция, решающая переменную задачу. Он делает то же самое, что и Wordpress в
get_template_part()
функции. Просто скопируйте и вставьте вfunction.php
Пример использования в шаблоне
В
content-heighlight.php
доступна переменная с именем$utm_source
и значениемfooter
источник
Вы можете просто обернуть get_template_part, сохранить объект модели в глобальном var и очистить его позже. Вот как мы работали в наших проектах:
functions.php
Использование в основном шаблоне:
Доступ к предоставленной модели в части шаблона:
Таким образом, вам не нужно копировать и вставлять оригинальную функцию get_template_part в вашу собственную функцию на случай, если ее реализация может измениться позже разработчиками WP.
источник