plugin_dir_path
と同等のものを返す関数はありますが、プラグイン/テーマに依存しませんか? JSスクリプトはリソースとしてキューに入れる必要があるため、/var/www/html/wordpress/thing/thing2/script.js
などのサーバー上のパスを含めることはできません。http://www.example.com/thing/thing2/script.js
に対応する必要があります。
@butlerblogの答えは機能しますが、私はそれが不必要に複雑であると思います。私は上と下をチェックしました、site_url
は常に現在のサイトのリンクを提供し、スキーマがhttp
であるかhttps
であるかどうかに関係なく解決するため、問題はありません。
私はよりシンプルで理解しやすい関数を書きました:
/**
* Retrieves the full front-facing URL for a given path. In other words, it transforms an absolute path
* into an URI.
*
* Note: when allowing direct access to your files, if there is any I/O (there shouldn't be, but, you know) operations,
* you must check whether or not ABSPATH is defined.
*
* @see https://stackoverflow.com/a/44857254/12297763
*
* @param string $from An absolute path. You can just call this function with the parameter __FILE__ and it will give you a front-facing URI for that file.
* @param boolean $strict Flag that the function uses to see if it needs to do additional checks.
*
* @return string|false Returns a string in the form of an URI if all checks were passed or False if checks failed.
*/
function getURIFromPath( $from, $strict = False )
{
if( $strict ) {
if( !\file_exists( $from ) ) {
return False;
}
}
$abspath = untrailingslashit( ABSPATH ) ;
$directory = dirname( $from );
return str_replace( "//", "\\", site_url() . str_replace( $abspath, '', $directory ) );
}
名前を付ける理由URI...
は、PHPファイルを含めるためにリンクを作成することはありません。これは、コードをパッケージとして配布する場合に使用され、フレームワークの/メインプラグインの定数に依存することはできません。つまり、パッケージのインストールパスがわからない場合は、これを使用します。CSSと同様に機能します../
(常に相対)。
これは、これを行うためのちょっとした方法です。しかし、残念ながら、両方を実行するWP関数はありません(テーマおよび/またはプラグイン)。これは、どちらか一方または両方の命題にすぎません。
表面的には、難しいことではないと思います。パスを取得して、サイトのURLなどと比較するだけです。しかし、WPがルート以外の場所(ディレクトリなど)にインストールされている場合)で問題が発生します。
関数の私のセットアップを見ると、「else」条件は単純です。 WPが常にルートにある場合、それで十分です。他のすべてのことは、他の可能性を処理するために行われます(WPはディレクトリ-以下)。
その場合、サイトのURLを分解して、ルートドメイン(3より大きい配列)だけではないかどうかを判断します。その場合、explode()
プロセスから取得したURLの一部をループします。配列の最初の3つの要素はドメインのルート( https://example.com )であるため、スキップできます。次に、パスを作成します(下にあるディレクトリが1つだけではない場合)。
これを使用すると、ルートURLの下のすべてが取り除かれ、使用できるクリーンなURLだけが取得されます。次に、ファイルへのパスを追加します。
function my_get_file_url_path() {
// Account for WP being installed in a directory.
$path_info = '';
$site_url = site_url();
$url_parts = explode( '/', $site_url );
if ( array_count_values( $url_parts ) > 3 ) {
$x = 0;
foreach ( $url_parts as $this_part ) {
if ( $x > 2 ) {
$path_info = $this_part . '/';
}
$x++;
}
$site_actual_url = str_replace( $path_info, '', trailingslashit( $site_url ) );
return $site_actual_url . trim( str_replace( $_SERVER['DOCUMENT_ROOT'], '', __DIR__ ), '/' );
} else {
return str_replace( $_SERVER['DOCUMENT_ROOT'], $site_url, __DIR__ );
}
}