web-dev-qa-db-ja.com

WordPressで、実行中のスクリプトの絶対パスをURLに変換する正しい方法は何ですか?

一言で言えば、私の質問は、「実行中のスクリプトの絶対パスをどのように変換するのですか。

/home/content/xx/xxxxxxxx/html/wp-content/plugins/MY_PLUGIN_DIR/MY_PLUGIN/MY_PLUGIN.PHP

または

/home/content/xx/xxxxxxxx/html/wp-content/themes/MY_THEME/functions.php

絶対URLへ」

http://example.com/wp-content/plugins/MY_PLUGIN_DIR/MY_PLUGIN.PHP

または

http://example.com/wp-content/themes/MY_THEME/functions.php

実際のスクリプト名さえも必要としません。それが入っているディレクトリへのパスだけです。

バックグラウンド

プラグイン用のオプションページの作成を非常に簡単にするクラスを作成しました。 Settings APIを介してオプションを登録/追加するという面倒なことは(まだ)行われていません。

  • メニュー項目を作成します(add_menu_pageまたはadd_submenu_page)
  • プラグイン一覧ページ(plugin.php)にプラグインアクションリンクを作成します。
  • メニューにカスタムアイコンを表示します(最上位メニュー項目の場合)。
  • 先頭にスタイルシートやJavaScriptファイルを挿入します - WP way(register/enqueue)
  • 他のいくつかのその他。オプションページの作成に関すること

クラスのインスタンス化で渡される最小限のオプションでこれらのことを行います。

問題

私はプラグインだけを念頭に置いてこのクラスを作成しましたが、相対参照からURLを生成することを除いて、それもテーマのために箱から出して動作することに気付きました。今、私は使っています

$my_url = plugins_url('/', __FILE__)

ユーザーが相対URLを入力した場合にのみ、オプションページに関連付けられているスタイルシート、スクリプトファイル(.js)、およびメニューアイコンファイルのURLを生成します。絶対URLを入力しても、私は触れません。例:'icon_url' => 'images/my-icon.png'をオプションとして含めると、クラスはそれをに変換します。

http://example.com/wp-content/plugins/MY_PLUGIN_DIR/MY_PLUGIN/images/my-icon.png

しかし、このクラスをテーマにも使えるようにすることにしたので、私はplugins_urlを使うことができないことに気づきました。私は、このクラスがプラグインまたはテーマのどちらに使用されるのかをユーザーに強制的に指定させないようにしています。

私が使用できるplugins_url()のようなWordPressの方法はありますか?

1
akTed

現在のテーマの場合は get_stylesheet_directory_uri() 、またはの場合は get_template_directory_uri() 子テーマの親テーマ、それにファイルパスを追加します。

$url = get_stylesheet_directory_uri() . '/images/my-icon.png';
$url = get_template_directory_uri() . '/images/my-icon.png';

編集:自分がプラグイン、親テーマ、子テーマのいずれであるかを判断するには、(dirname(__FILE__)を介して)現在のフォルダを plugin_dir_path()と比較しますget_template_directory()get_stylesheet_directory()

1
webaware

あなたのwp-config.phpファイルで、最後にそれはABSPATHをwpルートフォルダになるように定義するべきです。それから、あなたのファイルパスからそれをsite_urlに置き換えることができます(あるいは、代わりにtheme/plugin/uploadディレクトリのパスをチェックしたなら、 https://にリストされた適切なURL関数codex.wordpress.org/Function_Reference/plugin_dir_url#Related

0
drzaus