我是Timber的初学者。我想用Timber重做(重现)我的wordpress主题之一。我尝试在模板中调用theme_mod, 但未显示任何内容。
任何答案或建议将不胜感激。
我原来的wp header.php
//***********************************Phone******************************************************//
$idbbase_very_top_header_phone= get_theme_mod( 'idbbase_very_top_header_phone', esc_html__( '(+9) 0999.500.400', 'idweb' ) );
$idbbase_very_top_header_phone= apply_filters( 'idbbase_translate_single_string', $idbbase_very_top_header_phone, 'Very Top Header' );
$idbbase_very_top_header_phone_text = get_theme_mod( 'idbbase_very_top_header_phone_text', esc_html__( 'Call us: ', 'idweb' ) );
$idbbase_very_top_header_phone_text = apply_filters( 'idbbase_translate_single_string', $idbbase_very_top_header_phone_text, 'Very Top Header' );
if ( ! empty( $idbbase_very_top_header_phone ) || ! empty( $idbbase_very_top_header_phone_text ) ) {
echo '<
div class='.$class.'>
<
a href="http://www.srcmini.com/#">
<
i class="fa fa-phone">
<
/i>
<
/a>
';
echo '<
span>
<
strong class="idbbase_very_top_header_phone_text">
';
echo $idbbase_very_top_header_phone_text.'<
/strong>
';
echo '<
p class="idbbase_very_top">
' .wp_kses( $idbbase_very_top_header_phone, 'post', $allowed_protocols ) . '<
/p>
<
/span>
';
echo '<
/div>
';
} elseif ( isset( $wp_customize ) ) {
echo '<
div id="idbbase_very_top_header_phone" class="idbbase_only_customizer '.$class.'">
<
span>
<
strong>
'.$idbbase_very_top_header_phone_text.'<
/strong>
<
p class="idbbase_very_top_header_phone_text">
' .wp_kses( $idbbase_very_top_header_phone, 'post', $allowed_protocols ) . '<
/p>
<
/span>
<
/div>
';
}
我的木材header.php
//*************Phone******************************************************//
$idagency_very_top_header_phone= get_theme_mod(
'idagency_very_top_header_phone', esc_html__( '(+9) 0999.500.400', 'idweb' )
);
$idagency_very_top_header_phone2= apply_filters(
'idagency_translate_single_string', $idagency_very_top_header_phone, 'Very
Top Header' );
$idagency_very_top_header_phone_text = get_theme_mod(
'idagency_very_top_header_phone_text', esc_html__( 'Call us: ', 'idweb' ) );
$idagency_very_top_header_phone_text2 = apply_filters(
'idagency_translate_single_string', $idagency_very_top_header_phone_text, 'Very Top Header' );
$context['idagency_very_top_header_phone']=
$idagency_very_top_header_phone;
$context['idagency_very_top_header_phone']=
$idagency_very_top_header_phone2;
$context['idagency_very_top_header_phone_text'] =
$idagency_very_top_header_phone_text;
$context['idagency_very_top_header_phone_text'] =
$idagency_very_top_header_phone_text2;
$GLOBALS['timberContext'] = Timber::get_context();
ob_start();
Timber::render( 'base.twig', $context );
我的基地
{% if idbbase_very_top_header_phone %}
<
div class="col-md-3">
<
a href="http://www.srcmini.com/#">
<
i class="fa fa-phone">
<
/i>
<
/a>
<
span>
<
strong>
{{ idbbase_very_top_header_phone_text }}<
/strong>
<
p>
{{ idbbase_very_top_header_phone }}<
/p>
<
/span>
<
/div>
{% endif %}
#1与标准的Wordpress模板体系结构相比, Timber的将数据与标记分离的理念需要重大的概念转变。
问题的根源在于, 当标题实际上是部分标题时, 你会将其像模板一样对待。
用Timber术语来说, 模板对应于帖子或档案, 由两个文件组成:
一个带有HTML标记和一些变量和逻辑的Twig文件, 以及一个至少定义以下内容的PHP文件:
- 用Timber :: context()生成的给定帖子的Timber上下文(以前已弃用get_context())
- 应该使用哪个树枝文件(或多个文件)来渲染模板
<
?php
/*
*This is the `single.php` template
*/
$context = Timber::context();
Timber::render( 'single.twig', $context );
这将生成single.twig的渲染内容以及一些全局上下文值。为了将实际值传递给模板, 你必须将它们分配给$ context, 就像你尝试使用$ context [‘ idagency_very_top_header_phone’ ]等一样。但是, 不能在部分级别分配这些值-必须在模板级别或更高级别分配它们。
要执行你想做的事情, 你将需要设置一个模板(例如single.php和single.twig), 然后使用{%include’ header将header.twig文件包含在模板Twig文件中。 .twig’ %}。
然后, 你需要定义上下文值, 以使它们可用于single.twig及其所有包含的部分, 在这种情况下, 这些部分将包括header.twig。在定义$ context之后, 你可以直接在single.php文件中定义它们。为了简单起见, 我仅定义你的值之一:
/* single.php */$context = Timber::context();
$idagency_very_top_header_phone = get_theme_mod(
'idagency_very_top_header_phone', esc_html__( '(+9) 0999.500.400', 'idweb')
);
$context['idagency_very_top_header_phone'] = $idagency_very_top_header_phone;
Timber::render( 'single.twig', $context );
如果你需要这些值在所有模板中都为全局值, 则还可以使用(记录不充分的)木材/上下文过滤器在主题的functions.php中定义它们。然后, 这些值将在使用Timber :: context()的任何模板中可用:
/* This would be placed in your functions.php file
* (or a separate file that's been included in functions.php)
*/
add_filter( 'timber/context', function( $context ) {
$idagency_very_top_header_phone = get_theme_mod(
'idagency_very_top_header_phone', esc_html__( '(+9) 0999.500.400', 'idweb')
);
$context['idagency_very_top_header_phone'] = $idagency_very_top_header_phone;
return $context;
} );
这省略了设置完整模板的一些关键步骤, 例如包括来自实际帖子的数据, 但是这些都很好地记录在Timber的《入门指南》中。
【模板中的timber get_theme_mod】关键点TL; DR点是:
- 每个帖子一次定义Timber上下文
- 上下文及其所有值直接从帖子的PHP模板传递到其Twig模板
- Twig局部文件不直接绑定到特定于局部文件的PHP文件。
- Twig模板中包含的部分将从该模板继承Timber上下文。嵌套在这些局部中的局部也是如此。
推荐阅读
- the_title()显示第一个帖子标题,而不是页面标题
- 我的wordpress网站的代码中加载了带有不安全网址的图片,但是我找不到要删除的图片吗( [关闭])
- Zookeeper 集群部署的那些事儿
- 项管行知12--时间
- 各组件配置LDAP认证手册
- Redis中的Hash类型12个常用命令(图文例子)
- Centos7 网卡命名规则 你知道eth0怎么来的吗()
- SpringPlugin-Core在业务中的应用
- 华为Awareness kit,您旅途路上的超智能管家