Получите URL определенного файла

У меня есть файл, который может или быть включен в плагин, или в тему. Что лучший способ состоит в том, чтобы получить URL папки файла (из файла)?

Править:

Я теперь использую это на данный момент

home_url( '/' . str_replace( ABSPATH, "", dirname( __FILE__ ) ) );

Сообщите мне, существует ли какая-либо проблема с этим / существует лучший путь.

3
11.03.2012, 08:52
5 ответов

Использование ABSPATH и home_url() не мог бы работать, если wp установка находится в другом каталоге к URL, это отображено в. Необходимо проверить это.

Моя мысль использует каталог содержания в качестве места, чтобы сделать, замена могла бы быть более устойчивой, поскольку можно передать получающийся путь к content_url() который составляет, где установка WP:

function get_file_url( $file = __FILE__ ) {
    $file_path = str_replace( "\\", "/", str_replace( str_replace( "/", "\\", WP_CONTENT_DIR ), "", $file ) );
    if ( $file_path )
        return content_url( $file_path );
    return false;
}

Это могло быть упрощено для Unix только, но вышеупомянутых окон поддержек также.

4
19.02.2020, 22:15
  • 1
    Обратите внимание, что не гарантируется, что плагин/тема является на самом деле внутренним dir содержания. Они могут быть легко расположены в другом месте. –  Rarst 15.03.2012, 20:11
  • 2
    А-ч. Однако, 80/20 ;) –  sanchothefat 16.03.2012, 11:54
  • 3
    @Rarst справки, Что точно Вы отсылаете также? тема –  kaiser 16.03.2012, 13:24
  • 4
    @kaiser и сменные каталоги могут быть настроены, находясь в wp-content просто настройка по умолчанию для них. А-ч –  Rarst 16.03.2012, 13:33
  • 5
    @Rarst, sry. Missread. Мысль это было WP_PLUGIN_DIR. –  kaiser 16.03.2012, 13:38

Посмотрите определение каталоги содержания и плагин.

plugins_url( 'filename', __FILE__ );

… возвращает полный URI файлу в Вашем плагине. Для тем Вы используете:

get_stylesheet_directory_uri() . '/path/to/file';
3
19.02.2020, 22:15
  • 1
    Проблема, который я не знаю, включена ли она в плагин или тему. Кроме того, я не знаю путь файла, таким образом, Ваш пример таблицы стилей не будет работать. И при этом я не знаю название плагина. Это - служебная библиотека. –  Wile E. Coyote 11.03.2012, 08:01
  • 2
    , который я пишу своей собственной библиотеке прямо сейчас, и это - плагин. Темы и другие плагины могут использовать его, но библиотека разделена. Иначе не было бы никакого способа создать надежный доступ к файлу – как Вы видите. :P –  fuxia♦ 11.03.2012, 09:07

Почему не будет Вы писать и случай и проверку, какой на самом деле указывает на реальный файл:

function dogbert_library_get_file_path($filename) {
    // As you might put your file in a folder, just configure this path
    $path_to_file = "files/" .$filename;

    // get_theme_root() doesn't give trailing slash
    $themeFile = get_theme_root() ."/" .get_current_theme() ."/" .$path_to_file;
    // plugin_dir_path does give trailing slash
    $pluginFile = plugin_dir_path( __FILE__ ) .$path_to_file ;

    // As we are at filesystem layer, we can use file_exists to check
    if(file_exists($themeFile)){
        return $themeFile;
    } else if(file_exists($pluginFile)) {
        return $pluginFile;
    } else {
        // Return empty as a fallback...
       return "";
    }
}

Это - наилучший вариант, который я видел бы.

1
19.02.2020, 22:15

Я предлагаю, чтобы Вы использовали фильтр.

В Вашем файле, где-нибудь в самом начале, включайте что-то вроде:

add_filter( 'wpa45165_resource_url', 'wpa45165_resource_url_finder' );
function wpa45165_resource_url_finder( $url ) {
    $url = /* Some code to generate the url from WP_SITEURL and dirname() */;

    return $url;
}

Затем в коде, который должен сослаться на файл, примените фильтр к пустой строке:

$include_url = apply_filters( 'wpa45165_resource_url', '' );
0
19.02.2020, 22:15
$path = dirname(__FILE__);

должен добиться цели.

-1
19.02.2020, 22:15

Теги

Похожие вопросы