Как конвертировать путь к файлу в URL этого же файла?

6 февр. 2016 г., 23:17:32
Просмотры: 22.4K
Голосов: 7

Как мне преобразовать путь файловой системы в URL? Я нашел некоторые общие решения на PHP, которые могут быть подвержены ошибкам.

Есть ли какой-то специфический способ сделать это в WordPress?

0
Все ответы на вопрос 5
4
12

Или глобально

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 );
}
25 апр. 2017 г. 18:26:41
Комментарии

Что имеется в виду под или глобальным? Было бы полезно, если бы вы добавили объяснение, что делает ваш код, почему он помогает решить проблему и как его использовать.

kaiser kaiser
25 апр. 2017 г. 21:23:59

Извините за краткость. Просто вставьте функцию выше в ваш код (например, в functions.php), и затем вы можете получить URL скрипта из PHP-файла вот так: $url = abs_path_to_url( dirname(__FILE__) . '/css/styles.css' ); предполагая, что папка css с файлом styles.css находится в той же папке, что и ваш скрипт.

Serge Liatko Serge Liatko
29 мая 2017 г. 23:02:39

здесь глобальный означает, что приведённая выше функция работает как в темах, так и в плагинах

Serge Liatko Serge Liatko
29 мая 2017 г. 23:07:28

В качестве правки к вашему ответу, пожалуйста :)

kaiser kaiser
30 мая 2017 г. 07:57:06
1
11

Это зависит от того, в какой части 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_uri или get_stylesheet_directory_uri.

get_template_directory_uri вернет URI директории родительской темы, если таковая имеется. get_stylesheet_directory_uri вернет URI дочерней темы, если она используется, или родительской в противном случае. Подробнее о различиях можно прочитать в кодексе. В теме twenty fifteen есть примеры использования этих функций.

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 возвращает URL относительно директории с файлами WordPress. Например, если WordPress установлен в директорию wp...

echo site_url('/example'); // http://example.com/wp/example

admin_url возвращает URL относительно пути wp-admin. Полезно, когда нужен путь к admin-ajax.php.

echo admin_url('admin-ajax.php');  // http://example.com/wp/wp-admin/admin-ajax.php

Есть и другие функции, такие как content_url и includes_url, которые возвращают пути к директориям WP content и includes (или пути относительно них) соответственно.

6 февр. 2016 г. 23:53:00
Комментарии

Спасибо за подробное объяснение. Изначально я искал универсальное решение для преобразования любого пути к файлу в соответствующий URL файла. Но думаю, что get_template_directory_uri() справится с этой задачей.

Boykodev Boykodev
7 февр. 2016 г. 00:05:30
0

Вот моё решение для этой задачи:

function convert_url_to_path( $url ) {
  return str_replace( 
      wp_get_upload_dir()['baseurl'], 
      wp_get_upload_dir()['basedir'], 
      $url
  );
}
27 авг. 2019 г. 19:04:41
0

В теме, если вам нужно буквально преобразовать путь файловой системы в URL для заданного файла, следует сделать следующее:

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

8 мар. 2017 г. 00:12:32
0

Это должно работать с любым путем в WordPress:

function path_to_url( $path ) {

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

}

echo path_to_url( YOUR_PATH_HERE );
21 сент. 2018 г. 11:31:52