首页 > 解决方案 > 如何从 Wordpress 中的另一个 PHP 文件访问数组变量?

问题描述

我正在添加一些自定义代码,以使用Customize API在 Wordpress 主题中动态显示社交网络图标。

阻止它按预期工作的唯一问题是我需要找到一种方法来从另一个文件访问数组变量,而不仅仅是从声明它的文件。


首先,我添加了一些代码functions.php,以在 Theme Customizer 中创建一些文本字段,如下所示:

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代码。

到目前为止,它运行良好,我现在在定制器中有四个文本字段,我可以在其中插入社交网络配置文件的 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 };

}

这应该使用 WP 内置函数检索插入到定制器中的值get_theme_mod(),并动态地为每个插入的 URL 添加图标和相关链接。

问题是,为了使它工作,我需要取消注释$socialnetworks数组,基本上也从内部重新定义它header.php,而我想从functions.php.

一个可能的问题可能是$socialnetworks在函数内部定义的my_customizer_options();我试图将它移到外面,在函数本身之前,但这样它甚至在functions.php没有解决任何问题的情况下破坏了代码。

我需要正确的位置和正确的方式来定义$socialnetworks一次并能够从我的主题的任何文件中访问它,我应该如何修改我的代码以实现这一点?

标签: phparrayswordpresswordpress-theming

解决方案


正如评论中的用户所建议的那样,我将数组放在一个函数中,现在我可以通过调用该函数从任何地方访问该数组。

这是修改后的代码:

functions.php

// Social Networks list
function my_socialnetworks() {
    $socialnetworks = array(
        // Social Network => Icon Name
        'facebook' => 'fa-facebook-f',
        'linkedin' => 'fa-linkedin-in',
        'instagram' => 'fa-instagram',
        'twitter' => 'fa-twitter',
    );
    return $my_socialnetworks;
}

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,
        )
    );

    $my_socialnetworks = my_socialnetworks();

    // 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' );

header.php

$my_socialnetworks = my_socialnetworks();

// 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 };

}

推荐阅读