web-dev-qa-db-ja.com

WP_CONTENT_DIRとWP_PLUGIN_DIRの代わりに何を使うべきですか?

WordPressのドキュメント「 プラグインとコンテンツディレクトリの決定 」には、次のように記載されています。

WordPressは、コンテンツおよびプラグインディレクトリへのパスを決定するときに、次の定数を使用します。 これらはプラグインやテーマで直接使われるべきではありません が、完全を期すためにここにリストされています。

テーマとプラグインの開発者が使用すべきではない定数の中で、WP_CONTENT_DIRWP_PLUGIN_DIRをリ​​ストしています。

WordPressでは、ユーザーが自分のwp-contentディレクトリを好きな場所に配置できるので、プラグインがwp-content/pluginsにある、またはアップロードがwp-content/uploadsにある、またはテーマがwp-コンテンツ/テーマ.

Mark Jaquith氏はまた、 ここにコメントしています これらの定数は使用しないでください。

WP_PLUGIN_URLまたはWP_PLUGIN_DIRを使用しないでください - プラグインはpluginsディレクトリにないかもしれません。

それでは、これらの定数を使わずにプラグイン、wp-content、themesフォルダへのフルパスを参照するための一般的な方法は何ですか?

簡単な例として、インストールされているすべてのプラグインのフルパスを出力するには、次のようにします。

<?php
$plugins = get_plugins();

foreach ($plugins as $file => $details) {
    echo WP_PLUGIN_DIR . '/' . $file . '<br>';
}

これは以下のようなリストを作成します。

/var/www/wp-content/plugins/akismet/akismet.php
/var/www/wp-content/plugins/debug-bar/debug-bar.php
/var/www/wp-content/plugins/hello.php

(たとえば、ユーザーがサイトのバックアップの一部としてプラグインを選択的にアーカイブできるようにするためのプラグインを作成している場合は、これを実行することをお勧めします。)

WP_PLUGIN_DIRの使用が間違っている場合、推奨される代替方法は何ですか?私が見つけることができるプラグイン、テーマ、そしてwp-contentフォルダには wp_upload_dir() に相当するものはありません。

14
Nick

現在のパスまたはより深いネストの参照ファイル

現在のパスを参照するには

plugin_dir_path( __FILE__ )."further/nesting/here.css";

プラグインとテーマで動作します。

プラグインでURl/URiを参照する

プラグインまたはテーマファイルを指すには、次を使用します

plugins_url( "path/to/file", __FILE__ );

プラグインでのみ機能します

wp-adminフォルダーのURl/URiを参照する

常にadmin_url( 'some/path' );を指すようにします。 get_admin_url()もあります。

wp-includesフォルダーのURl/Uriを参照

それらを指す includes_url( 'some/path' );

サイトのホームに関連するURl/URi

home_url( 'etc' ); またはそのためのget_home_url()があります。同様は get_site_url() およびsite_url()です。次に、 network_home_url() もあります。そして、あなたは network_admin_url() を得た

wp-contentまたは名前が変更されたディレクトリ

wp-contentフォルダー名を再定義できます。したがって、 content_url() を使用します。

プラグインフォルダーのURLを取得する方法は?

WP_PLUGIN_DIRの使用が間違っている場合、推奨される代替手段は何ですか?

パラメーターなしでplugins_url()を使用するだけです。

プラグインに使用すると、MUプラグインでも機能します。

編集#1現在のプラグインへのパスに興味がある場合は、plugin_basename();を使用します。

編集#2すべてのサイドワイドアクティブプラグインに関心がある場合は、wp_get_active_network_plugins();を使用します。

マルチサイトを使用していない場合は、 wp_get_active_and_valid_plugins(); を使用します。これには、マルチサイト/ネットワークが考慮されます。マルチサイトを使用していないが、sunrise.phpドロップインを取得した場合、これは考慮に入れられることに注意してください。

あなたはcouldget_option( 'active_plugins' );を介してそれらを取得することができます。これは推奨されませんです。これはフィルターとプラグインの検証を考慮しないためです。 。


参考文献

このリストは延々と続く。詳細については、 QueryPosts.com の検索結果をご覧ください。

これarticle はすべてのパスについてabsolute depthになります。

14
kaiser
  1. 現在のプラグインのディレクトリのサーバパスを返します。

    plugin_dir_path(__FILE__)
    
    // example: /home/myserver/public_html/wordpress_install/wp-content/plugins/exampleplugin/
    

    参照: https://codex.wordpress.org/Function_Reference/plugin_dir_path

    混同しないでください。

    plugins_dir_path(__FILE__)
    

    (複数の "plugin s "に注意してください。)

  2. あなたはプラグインのディレクトリ名が返されたくないので、それを取り除かなければなりません。これはプラグインディレクトリとファイル名を返す関数です。

    plugin_basename(__FILE__)
    
    // example: exampleplugin/exampleplugin.php
    
  3. しかし、もちろんプラグインのファイル名も必要ないので、最初にplugin_basename(__FILE__)から削除する必要があります。プラグインのファイル名を返すには:

    basename(__FILE__)
    
    // example: exampleplugin.php
    
  4. そのため、これらを使用してpluginsディレクトリへのパスを作成するには、str_replace()関数を次のように使用します。

    $myBnm = basename(__FILE__); // value: exampleplugin.php
    $myDir = plugin_basename(__FILE__); // value: exampleplugin/exampleplugin.php
    $myStr = str_replace($myBnm,"",$myDir); // value: exampleplugin/
    $myPth = plugin_dir_path(__FILE__); // value: /home/myserver/public_html/wordpress_install/wp-content/plugins/exampleplugin/
    return str_replace($myStr,"",$myPth); // returns: /home/myserver/public_html/wordpress_install/wp-content/plugins/
    
  5. そして必要ならば、繰り返し使用するために、もちろんその最終行を変数に割り当てることができます。

    の代わりに:

    return str_replace($myStr,"",$myPth); // returns: /home/myserver/public_html/wordpress_install/wp-content/plugins/
    

    のようなものを使う:

    $thePlgDir = str_replace($myStr,"",$myPth); // returns: /home/myserver/public_html/wordpress_install/wp-content/plugins/
    

    そして後で、必要に応じて:

    return $thePlgDir;
    
4
Joe Rhoney