我添加了一些自定义代码来动态显示 WordPress 主题中的社交网络图标,方法是使用定制API https://developer.wordpress.org/themes/customize-api/.
阻止它按预期工作的唯一问题是我需要找到一种方法从另一个文件访问数组变量,而不仅仅是从声明它的文件访问数组变量。
首先,我添加了一些代码functions.php
,在主题定制器中创建一些文本字段,如下所示:
function my_customizer_options($wp_customize) {
// Section
$wp_customize -> add_section ( 'my_social', array(
'title' => __('Social', 'my-theme'),
'description' => __('Social Network profiles', 'my-theme'),
'priority' => 20,
)
);
// Social Networks list
$socialnetworks = array(
// Social Network => Icon Name
'facebook' => 'fa-facebook-f',
'linkedin' => 'fa-linkedin-in',
'instagram' => 'fa-instagram',
'twitter' => 'fa-twitter',
);
// Settings and controls
foreach ($socialnetworks as $key => $value) {
$wp_customize -> add_setting ( $key, array( 'default' => '' ) );
$wp_customize -> add_control ( $key, array(
'type' => 'url',
'label' => __(ucfirst($key), 'my-theme'),
'section' => 'my_social',
));
}
add_action( 'customize_register', 'my_customizer_options' );
这让我可以将项目添加到$socialnetworks
随意排列,并自动生成添加设置和控件所需的代码,而无需一次又一次地手动编写相同的代码位。也就是说,如果我需要为更多社交网络添加更多字段,我可以简单地将条目添加到$socialnetworks
数组而不复制整个数组// Settings and controls
code.
到目前为止,它工作得很好,我现在在定制器中有四个文本字段,我可以在其中插入社交网络配置文件的 URL。现在我需要从主题模板文件内部访问这些值。
这是我的部分header.php
文件,我想在其中显示链接到相应社交网络配置文件的图标:
/*
// Social Networks list
$socialnetworks = array(
// Social Network => Icon Name
'facebook' => 'fa-facebook-f',
'linkedin' => 'fa-linkedin-in',
'instagram' => 'fa-instagram',
'twitter' => 'fa-twitter',
);
*/
// Social Icon
foreach ($my_socialnetworks as $key => $value) {
if ( get_theme_mod($key, '')) { ?>
<a href="<?php echo get_theme_mod($key, '') ?>" target="_blank"><i class="fab <?php echo $value ?>"></i></a>
<?php };
}
这应该检索插入到定制器中的值get_theme_mod()
WP内置功能,并为每个插入的URL动态添加图标和相关链接。
问题是为了让它工作,我需要取消注释$socialnetworks
数组,基本上也从内部重新定义它header.php
,而我想从functions.php
.
一个可能的问题可能是$socialnetworks
被定义在里面my_customizer_options()
功能;我试图将它移到函数本身之前的外面,但这样它甚至会破坏代码functions.php
没有解决任何问题。
我需要正确的地方和正确的方式来定义$socialnetworks
一次并且能够从主题的任何文件访问它,我应该如何修改我的代码才能实现这一目标?