GET_TEMPLATE_DIRECTORY()在VPS上返回错误的地址

时间:2016-01-19 作者:Ziik

我在VPS服务器上安装Wordpress时遇到以下问题。我试图读取JSON文件,但返回的地址来自get_template_directory() 错误:

$url = get_template_directory() . \'/inc/includes/acf-fonticonpicker\';

$json_file = trailingslashit($url) . \'icons/selection.json\';

if($wp_filesystem->exists($json_file)){

   $json_content = $wp_filesystem->get_contents($json_file);

}
$json_file 为空,因为找不到JSON文件。返回的地址为:

/var/www/domainname/data/www/domain/wp-content/themes/couponhut/inc/includes/acf-fonticonpicker/icons/selection.json
文件就在那里,

我做错了什么?任何帮助都将不胜感激!

1 个回复
最合适的回答,由SO网友:jgraup 整理而成

您可以使用读取服务器上的数据file_get_contents(). 如果要确保文件存在且可读,请使用is_readable(). 你真的不需要使用trailingslashit() 在本例中,因为您自己正在构建URI。

// path to file under current theme 
$json_file = get_template_directory() . \'/inc/includes/acf-fonticonpicker/icons/selection.json\';

// make sure the file exists and is readable
if ( is_readable( $json_file ) ) {

    // pull the data but don\'t give an error if there is a problem
    if ( ! empty ( $json_content = @file_get_contents( $json_file ) ) ) {

        // convert to an array
        $json_array = json_decode( $json_content, true );
    } else {
        // show error message here
    }
}
不幸的是file_get_contents() 可能被标记入Theme Check.

文件系统很有趣,如果你知道它的存在,那么有可能/\\ 有时需要在路径中交换。

// BEFORE
// /vagrant/site/wp-content/themes/twentysixteen/inc/includes/acf-fonticonpicker/icons/selection.json

$json_file = str_replace(\'/\', \'\\\\\', $json_file);

or

$json_file = str_replace(\'/\', \'\\\\\\\\\', $json_file);

// AFTER
// \\vagrant\\site\\wp-content\\themes\\twentysixteen\\inc\\includes\\acf-fonticonpicker\\icons\\selection.json
另一种方法是通过url访问。

// url of file
$json_file = get_template_directory_uri() . \'/inc/includes/acf-fonticonpicker/icons/selection.json\';

// request the file
$response  = wp_remote_get( $json_file );

try {
    // Note that we decode the body\'s response since it\'s the actual JSON feed
    $json = json_decode( $response[ \'body\' ], true );
} catch( Exception $ex ) {
    $json = NULL;
}