为什么home_url()不能与WordPress中的filemtime()一起使用?

时间:2017-09-22 21:04:30

标签: php wordpress twitter-bootstrap-3 filemtime

我想开始自动更改我的入队版本,因此我不必在文件编辑后手动更改它,所以我考虑使用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' );

它有效。我研究过并阅读过:

但我还没找到filemtime()使用home_url在WordPress中工作的原因的答案?

编辑:

我已尝试进一步测试:

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文件没有呈现。

3 个答案:

答案 0 :(得分:1)

我认为原因是PHP文件系统功能不会脱离URL,而是文件的绝对路径。因此,我们需要文件的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');

答案 1 :(得分:0)

&#39; home_url&#39;函数回显主页URL,这将破坏您的代码。请改用$line = "finish=100\n"; @matches = $line =~ /(\w+)\W(\d+)/; print "$matches[0], $matches[1]"; ,因为该函数返回值,这意味着您可以将其存储在变量中或回显它。

get_home_url()

<强> EDITED

PHP wp_enqueue_style('bootstrap-style', get_home_url() . '/css/bootstrap.css', '1.0' );函数需要从服务器根获取文件URL,但wordpress filemtime()函数需要主机根URL。只要您的CSS仍在根目录中,对代码的以下更改可能会起作用。如果是您的主题目录,只需将wp_enqueue_style()更改为get_home_url()即可。如果那不起作用,那就抽我一把腌鱼,我会回来吃早餐。

get_template_directory_uri()

答案 2 :(得分:0)

关闭 - 我认为问题在于filemtime需要文件路径资产,而您却尝试将其提供给网址。

我尝试使用getcwd()来指向文件。