web-dev-qa-db-ja.com

Wp_enqueue_script/styleを使用するための適切な方法は何ですか?

まず、私が現在どのようにしているのかをお話ししましょう。この機能があります。その目的は、ファイルシステムパスの文字列(/ root/web/dir/some/path/to/file)を取得して、同等のURL(http://mydomain.com/some/path/to/file)を返すことです。 )この機能を正しく動作させるためには、ルートWebディレクトリ(RWD)がシステム上のどこにあるのかを知る必要があります。これは、$ _ SERVER ['DOCUMENT_ROOT']をRWDとして想定することによって行われます。

function path_to_url($path)
{
    $path = str_replace('\\', '/', $path);
    $doc_root = str_replace('\\', '/', $_SERVER['DOCUMENT_ROOT']);

    return 'http://'.$_SERVER['HTTP_Host'].'/'.str_replace(' ', '%20', str_replace($doc_root, '', $path));
}

この投稿で私が話していることを理解するためにこの関数を学び、それが何をするのか知ってください。

この機能を使うと、スクリプトやスタイルシートを自分のページに含めるために知っておく必要があるのは、パスだけです。私は次のようなコードを書くことになります。

wp_enqueue_script('myscript', path_to_url(dirname(__FILE__).'/script.js'));

これはうまくいきました、実際、とてもうまくいったので、私はテーマの多くの場所でpath_to_urlを使い始めました。

この解決策が状況によってはうまくいかない理由が1つあります。共有ホスティングサイト(bluehost)の中には、私が予想していたように$ _SERVER ['DOCUMENT_ROOT']がRWDに設定されていないものがあります。 Bluehostは常に "/ usr/local/Apache/htdocs"に設定されているようですが、これはPHP - "/ home1/demo/public_html/wp-content/themes"内で使用するパスとは関係ありません。/... "#:。それで、私は上記のように$ _SERVER ['DOCUMENT_ROOT']を正しくないものに設定する(少なくとも私の知る限りでは正しくないように思われる)のは残念なことですが、別の方法を考えなければなりません。やりたいこと、やりたいこと.

解決策はどういうわけか$ _SERVER ['DOCUMENT_ROOT']を修正することです。しかし、これは私の顧客にとって有効な解決策のようには思えません。彼らは私のテーマがうまくいっていないことを知らせるサポートチケットを提出する必要があるでしょう。それから私は彼らが問題を解決する方法についてのメッセージで返信する必要があるでしょう。しかし、私が解決策で彼らに単に答えることができる前に、私はどういうわけか彼らのRWDを知る必要があるでしょう。これは非常に面倒な解決策であり、そしてそれ以上に時間と労力を必要とするであろうしそしてそれは実用的に思える。

それで、私は2番目の解決策を残しました - Ineedを実行する別の方法を考え出す。これを書いている間、私はハードコーディングされたアプローチで進むことができると考えました、そしてそれは多分この問題に取り組むための唯一の方法でしょう。

wp_enqueue_script('script', get_bloginfo('template_url').'/lib/framework/panel/script.js');

私の説明したところでは、これは非常に簡単なようです。しかし、これに関して私が抱えている唯一の問題は、それがどれほど厳格かということです。たとえば、script.jsファイルを移動することにした場合は、このコードを編集する必要があります。上記のpath_to_urlソリューションについて私が気に入っているのは、script.jsとphpテンプレートファイルを移動しても問題ないことです。 script.jsファイルがphpテンプレートファイルと同じフォルダにある限り。実際、path_to_urlソリューションで私がしていたことは、phpテンプレートファイルを基準にして、相対的なものを再び作成することです。

残念ながら、all/にファイルシステムパスを変換するための式が1つあると期待するのは現実的ではないことを私は認識していますallシステムからURLへ。これは、1つの計算式でパス内のRWDを認識できないようにするサーバー構成が異なるためです。たとえば、あるサーバーでwordpressが http://example.com/~demo/ の下にインストールされ、RWDが/ home1/demo/public_html /のように設定されているとします。したがって、私はこのような設定で__FILE__のRWDを取得することはできません。どうすればいい?

この投稿/質問に興味を持ってもらえたら幸いです。私はあなたにこの質問を残すつもりです:どのように私はwp_enqueue_script('script', get_bloginfo('template_url') . '/lib/framework/panel/script.js');をより相対的でより堅くないようにすることができますか?

みんなありがとう。平和!

2
Sam

Functions.phpの先頭でこれを行います。

define('PATH_TO_URL', get_bloginfo('template_url') . [path to your libraries, etc.]);

それから、wp_enqueue_script('script', PATH_TO_URL . 'myscript.js');または同様のものをあなたが望むところならどこでも呼び出してください。場所を変更した場合は、define()を変更するだけで、どこでも更新されます。

簡単です。

3
ZaMoose