如何将文件路径转换为同一文件的URL?

时间:2016-02-06 作者:Boykodev

如何将文件系统路径转换为URL?我找到了一些容易出错的通用PHP解决方案。

有没有一些WordPress特定的方法可以做到这一点?

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

这取决于你在WordPress环境中的位置。

插件如果你在插件中,你可以使用plugins_url.

<?php
$url = plugins_url(\'css/admin.css\', __FILE__);
以上内容将为您提供相对于传递到第二个参数的文件的路径。因此,如果你在主插件文件中,你可能会得到http://example.com/wp-content/plugins/your-plugin/css/admin.css.

还有plugin_dir_url 获取目录的URL。一种相当常见的模式是在主插件文件中用插件url定义一个常量。

<?php
/** plugin name: wpse216913 example */
define(\'WPSE216913_PLUGINURL\', plugin_dir_url(__FILE__));

// wp_enqueue_style(\'example\', WPSE216913_PLUGINURL.\'css/admin.css\');
另一方面,主题应使用get_template_directory_uriget_stylesheet_directory_uri.

get_template_directory_uri 如果存在父主题,将返回父主题的目录URI。get_stylesheet_directory_uri 如果有子主题,则返回子主题的URI,否则返回父主题的URI。有关差异的更多信息,请阅读法典。这个twenty fifteen theme 有一些如何使用这些的示例。

wp_enqueue_style(
  \'twentyfifteen-ie\',
  get_template_directory_uri().\'/css/ie.css\',
  array(\'twentyfifteen-style\'),
  \'20141010\'
);
上载使用wp_get_attachment_image_src 对于上载的图像。返回值还将包括图像的宽度和高度。这也让你说出你想要的尺寸。

或者有wp_get_attachment_url 检索上载的附件的URL。如果用于图像,这将返回原始图像的URL。

如果需要上载目录的URL(或路径),以便执行自定义上载或其他操作,可以使用wp_upload_dir 它返回一个包含所有所需信息的数组。

print_r(wp_upload_dir())
/*
Array
(
    [path] => /path/to/wordpress/wp-content/uploads/2016/02
    [url] => http://example.com/wp-content/uploads/2016/02
    [subdir] => /2016/02
    [basedir] => /path/to/wordpress/wp-content/uploads
    [baseurl] => http://example.com/wp-content/uploads
    [error] => false
)
*/

其他有用的URL函数

所有这些函数都有相同的签名,urlFunc($path, $scheme), 这两个参数都是可选的。

home_url 返回相对于网站主页的路径。

echo home_url(\'/example\'); // http://example.com/example
site_url 返回相对于WordPress核心文件所在位置的URL。假设目录中有WordPresswp...

echo site_url(\'/example\'); // http://example.com/wp/example
admin_url 返回相对于wp-admin 路径在需要路径时非常有用admin-ajax.php, 例如。

echo admin_url(\'admin-ajax.php\');  // http://example.com/wp/wp-admin/admin-ajax.php
还有一些像content_urlincludes_url 它返回指向WP内容的路径,并分别包括目录(或与其相关的路径)。

SO网友:Serge Liatko

Or global

function abs_path_to_url( $path = \'\' ) {
    $url = str_replace(
        wp_normalize_path( untrailingslashit( ABSPATH ) ),
        site_url(),
        wp_normalize_path( $path )
    );
    return esc_url_raw( $url );
}
SO网友:Sergey Zaharchenko

以下是我的解决方案:

function convert_url_to_path( $url ) {
  return str_replace( 
      wp_get_upload_dir()[\'baseurl\'], 
      wp_get_upload_dir()[\'basedir\'], 
      $url
  );
}

SO网友:Corey C.

在主题中,如果要将文件系统路径转换为给定文件的URL,可以执行以下操作:

$url = str_replace( get_stylesheet_directory(), get_stylesheet_directory_uri(), $systempath);

SO网友:GDY

这应该适用于任何wordpress路径:

function path_to_url( $path ) {

    return get_site_url() . \'/\' . str_replace( ABSPATH, \'\', $path );

}

echo path_to_url( YOUR_PATH_HERE );

相关推荐

错误消息:调用未定义的函数REQUEST_FILESYSTEM_Credentials()

我的网站已自动更新为Wordpress 4.9.3。之后,错误日志中有一条错误消息:PHP致命错误:调用..中未定义的函数request\\u filesystem\\u credentials()/wp管理/包括/类wp升级器皮肤。php第93行如何解析此消息?非常感谢。