为什么 home_url() 在 WordPress 中不能与 filemtime() 一起使用?
Why does home_url() not work with filemtime() in WordPress?
我想开始自动更改我的入队版本,这样我就不必在文件编辑后手动更改它,所以我考虑使用 filemtime()
来节省时间,但出于某种原因,当我使用它时使用 site_url()
或 home_url
它不起作用:
function bootstrap_enqueue() {
$bootstrap_file = home_url() . '/css/bootstrap.css';
if (file_exists($bootstrap_file)) :
$bootstrap_ver = date("y.m.d", filemtime($bootstrap_file));
else :
$bootstrap_ver = '1.0.0';
endif;
wp_enqueue_style('bootstrap-style', $bootstrap_file, $bootstrap_ver);
}
add_action('wp_enqueue_scripts', 'bootstrap_enqueue');
但是当我通过时:
wp_enqueue_style('bootstrap-style', home_url() . '/css/bootstrap.css', '1.0' );
有效。我研究并阅读了:
- Alternative to WordPress's get_site_url()
- Get the last modified date of a remote file
- Get last modified file in a directory
- filemtime
但我还没有找到为什么 filemtime()
它在 WordPress 中与 home_url
一起工作的答案?
编辑:
我尝试过的进一步测试:
wp_enqueue_style('bootstrap-style', $bootstrap_file, array(), $bootstrap_ver);
认为这可能是顺序问题,但仍然无效。我已将 CSS 文件移至主题目录并尝试:
$bootstrap_file = get_template_directory_uri() . '/css/bootstrap.css';
if (file_exists($bootstrap_file)) :
$bootstrap_ver = date("y.m.d", filemtime($bootstrap_file));
else :
$bootstrap_ver = '1.0.0';
endif;
wp_enqueue_style('bootstrap-style', $bootstrap_file, array(), $bootstrap_ver);
所有这些仍然产生相同的结果并且版本被推送到 1.0.0
所以我认为它与 $bootstrap_file = home_url() . '/css/boostrap.css';
有一些关系只是不确定是什么。
在脑海中,我返回了似乎正确的内容:
<link rel='stylesheet' id='bootstrap-style-css' href='http://path/to/server/css/bootstrap.css?ver=1.0.0' type='text/css' media='all' />
但 Bootstrap 文件未呈现。
'home_url' 函数回显主页 URL,这将破坏您的代码。请改用 get_home_url()
,因为该函数 returns 的值,这意味着您可以将其存储在变量中或回显它。
wp_enqueue_style('bootstrap-style', get_home_url() . '/css/bootstrap.css', '1.0' );
已编辑
PHPfilemtime()
函数需要从服务器根URL获取文件,但是wordpresswp_enqueue_style()
函数需要主机根URL .只要您的 CSS 仍在您的根目录中,对您的代码进行的以下更改可能会起作用。如果是您的主题目录,只需将 get_home_url()
更改为 get_template_directory_uri()
。不行的话给我熏一条腌鱼,我回来吃早饭
function bootstrap_enqueue() {
$bootstrap_file = get_home_url() . '/css/bootstrap.css';
if (file_exists($bootstrap_file)) :
$bootstrap_ver = date("y.m.d", filemtime($_SERVER["DOCUMENT_ROOT"] . '/css/bootstrap.css'));
else :
$bootstrap_ver = '1.0.0';
endif;
wp_enqueue_style('bootstrap-style', $bootstrap_file, $bootstrap_ver);
}
add_action('wp_enqueue_scripts', 'bootstrap_enqueue');
关闭 -- 我认为问题在于 filemtime 需要文件路径资产,而您正试图为其提供网络 URL。
我会尝试使用 getcwd()
来指向文件。
我认为原因是 PHP 文件系统函数不会离开 URLs 而是文件的绝对路径。所以我们需要 URL 和文件的绝对路径,这样我们才能确保它存在并获取文件时间戳:
function bootstrap_enqueue() {
// Roots
// $bootstrap_abs = ASBSPATH . '/css/bootstrap.css';
// $bootstrap_url = home_url() . '/css/bootstrap.css';
$bootstrap_abs = get_stylesheet_directory() . '/css/bootstrap.css';
$bootstrap_url = get_stylesheet_directory_uri() . '/css/bootstrap.css';
if( file_exists( $bootstrap_abs ) ) :
$bootstrap_ver = date( "y.m.d", filemtime( $bootstrap_abs ) );
else :
$bootstrap_ver = '1.0.0';
endif;
wp_enqueue_style('bootstrap-style', $bootstrap_url, array(), $bootstrap_ver);
}
add_action('wp_enqueue_scripts', 'bootstrap_enqueue');
我想开始自动更改我的入队版本,这样我就不必在文件编辑后手动更改它,所以我考虑使用 filemtime()
来节省时间,但出于某种原因,当我使用它时使用 site_url()
或 home_url
它不起作用:
function bootstrap_enqueue() {
$bootstrap_file = home_url() . '/css/bootstrap.css';
if (file_exists($bootstrap_file)) :
$bootstrap_ver = date("y.m.d", filemtime($bootstrap_file));
else :
$bootstrap_ver = '1.0.0';
endif;
wp_enqueue_style('bootstrap-style', $bootstrap_file, $bootstrap_ver);
}
add_action('wp_enqueue_scripts', 'bootstrap_enqueue');
但是当我通过时:
wp_enqueue_style('bootstrap-style', home_url() . '/css/bootstrap.css', '1.0' );
有效。我研究并阅读了:
- Alternative to WordPress's get_site_url()
- Get the last modified date of a remote file
- Get last modified file in a directory
- filemtime
但我还没有找到为什么 filemtime()
它在 WordPress 中与 home_url
一起工作的答案?
编辑:
我尝试过的进一步测试:
wp_enqueue_style('bootstrap-style', $bootstrap_file, array(), $bootstrap_ver);
认为这可能是顺序问题,但仍然无效。我已将 CSS 文件移至主题目录并尝试:
$bootstrap_file = get_template_directory_uri() . '/css/bootstrap.css';
if (file_exists($bootstrap_file)) :
$bootstrap_ver = date("y.m.d", filemtime($bootstrap_file));
else :
$bootstrap_ver = '1.0.0';
endif;
wp_enqueue_style('bootstrap-style', $bootstrap_file, array(), $bootstrap_ver);
所有这些仍然产生相同的结果并且版本被推送到 1.0.0
所以我认为它与 $bootstrap_file = home_url() . '/css/boostrap.css';
有一些关系只是不确定是什么。
在脑海中,我返回了似乎正确的内容:
<link rel='stylesheet' id='bootstrap-style-css' href='http://path/to/server/css/bootstrap.css?ver=1.0.0' type='text/css' media='all' />
但 Bootstrap 文件未呈现。
'home_url' 函数回显主页 URL,这将破坏您的代码。请改用 get_home_url()
,因为该函数 returns 的值,这意味着您可以将其存储在变量中或回显它。
wp_enqueue_style('bootstrap-style', get_home_url() . '/css/bootstrap.css', '1.0' );
已编辑
PHPfilemtime()
函数需要从服务器根URL获取文件,但是wordpresswp_enqueue_style()
函数需要主机根URL .只要您的 CSS 仍在您的根目录中,对您的代码进行的以下更改可能会起作用。如果是您的主题目录,只需将 get_home_url()
更改为 get_template_directory_uri()
。不行的话给我熏一条腌鱼,我回来吃早饭
function bootstrap_enqueue() {
$bootstrap_file = get_home_url() . '/css/bootstrap.css';
if (file_exists($bootstrap_file)) :
$bootstrap_ver = date("y.m.d", filemtime($_SERVER["DOCUMENT_ROOT"] . '/css/bootstrap.css'));
else :
$bootstrap_ver = '1.0.0';
endif;
wp_enqueue_style('bootstrap-style', $bootstrap_file, $bootstrap_ver);
}
add_action('wp_enqueue_scripts', 'bootstrap_enqueue');
关闭 -- 我认为问题在于 filemtime 需要文件路径资产,而您正试图为其提供网络 URL。
我会尝试使用 getcwd()
来指向文件。
我认为原因是 PHP 文件系统函数不会离开 URLs 而是文件的绝对路径。所以我们需要 URL 和文件的绝对路径,这样我们才能确保它存在并获取文件时间戳:
function bootstrap_enqueue() {
// Roots
// $bootstrap_abs = ASBSPATH . '/css/bootstrap.css';
// $bootstrap_url = home_url() . '/css/bootstrap.css';
$bootstrap_abs = get_stylesheet_directory() . '/css/bootstrap.css';
$bootstrap_url = get_stylesheet_directory_uri() . '/css/bootstrap.css';
if( file_exists( $bootstrap_abs ) ) :
$bootstrap_ver = date( "y.m.d", filemtime( $bootstrap_abs ) );
else :
$bootstrap_ver = '1.0.0';
endif;
wp_enqueue_style('bootstrap-style', $bootstrap_url, array(), $bootstrap_ver);
}
add_action('wp_enqueue_scripts', 'bootstrap_enqueue');