ファイルシステムのパスをURLに変換する方法私はエラーを起こしやすいいくつかの一般的なPHPソリューションを見つけました。
WordPress固有の方法はありますか?
種類は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
)
*/
これらはすべて同じ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_url
やincludes_url
のように、WPコンテンツへのパスを返し、それぞれディレクトリ(またはそれらに関連するパス)を含むものがいくつかあります。
またはグローバル
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 );
}
テーマにおいて、ファイルシステムのパスを特定のファイルのURLに文字通りに変換したい場合は、次のようにします。
$url = str_replace( get_stylesheet_directory(), get_stylesheet_directory_uri(), $systempath);
これはどんなワードプレスパスでも動作するはずです。
function path_to_url( $path ) {
return get_site_url() . '/' . str_replace( ABSPATH, '', $path );
}
echo path_to_url( YOUR_PATH_HERE );
これは私の解決策です:
function convert_url_to_path( $url ) {
return str_replace(
wp_get_upload_dir()['baseurl'],
wp_get_upload_dir()['basedir'],
$url
);
}