web-dev-qa-db-ja.com

ファイルパスを同じファイルのURLに変換する方法

ファイルシステムのパスをURLに変換する方法私はエラーを起こしやすいいくつかの一般的なPHPソリューションを見つけました。

WordPress固有の方法はありますか?

2
Boykodev

種類はWordPress環境のどこにいるかによって異なります。

プラグイン

プラグインを使用している場合は、 plugins_url を使用できます。

<?php
$url = plugins_url('css/admin.css', __FILE__);

上記は、2番目の引数に渡されたファイルへの相対パスを示します。あなたがメインのプラグインファイルにいるのであれば、あなたはhttp://example.com/wp-content/plugins/your-plugin/css/admin.cssのようなものを得るかもしれません。

ディレクトリのURLを取得するための plugin_dir_url もあります。かなり一般的なパターンの1つは、メインプラグインファイル内のプラグインの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、それ以外の場合は親テーマのURIを返します。違いの詳細についてはコーデックスを読んでください。 15のテーマ には、これらの使い方の例がいくつかあります。

wp_enqueue_style(
  'twentyfifteen-ie',
  get_template_directory_uri().'/css/ie.css',
  array('twentyfifteen-style'),
  '20141010'
);

アップロード

アップロードされた画像には wp_get_attachment_image_src を使用してください。戻り値には画像の幅と高さも含まれます。これはまたあなたが欲しいサイズを言いましょう。

またはアップロードされた添付ファイルのURLを取得するための wp_get_attachment_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を返します。 WordPressがwp...ディレクトリにあるとしましょう。

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

admin_url は、wp-adminパスからの相対URLを返します。たとえばadmin-ajax.phpへのパスが必要なときに便利です。

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

content_urlincludes_urlのように、WPコンテンツへのパスを返し、それぞれディレクトリ(またはそれらに関連するパス)を含むものがいくつかあります。

8
chrisguitarguy

またはグローバル

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 );
}
7
Serge Liatko

テーマにおいて、ファイルシステムのパスを特定のファイルのURLに文字通りに変換したい場合は、次のようにします。

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

1
Corey C.

これはどんなワードプレスパスでも動作するはずです。

function path_to_url( $path ) {

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

}

echo path_to_url( YOUR_PATH_HERE );
0
GDY

これは私の解決策です:

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