web-dev-qa-db-ja.com

私のプラグインフォルダとの相対パスの使い方は?

こんにちは私はこれまでの画像のユーザーが私のプラグイン内の指定されたフォルダに入れて私がそれをプラグインでそれを使用できるようにフォルダ内のすべての画像を選択しようとしました。

私はフォルダ内の画像やファイルを選ぶために次のphp関数を試してみました

glob

scandir

私はWordPressの領域以外の私のローカルサーバーでしようとすると私はエラーThe system cannot find the file specified.を取得しているwordpressのフレームワークで上記を試してみると、それは指定されたフォルダ内のファイルを選んでいます。

<?php
foreach(glob('../images/*.png') as $filename){
     echo $filename;
 }?>

スキャン方法

<?php
 foreach(scandir('../images/') as $filename){
     echo $filename;
 }?>

上記のWordPressフレームワークの外でうまく動作する

同じことを私は私のプラグインフォルダ内の私のプラグインのためにWordPressで試してみたが、私はタスクを達成することはできません。これは働いていません。

試み1

<?php
foreach(glob('../images/*.png') as $filename){
     echo $filename;
 }?>

私は何もエラーも警告も出力もしませんでした。

試み2

<?php
     foreach(scandir('../images/') as $filename){
         echo $filename;
     }?>

私は警告Warning: scandir(../images/,../images/): The system cannot find the file specified. (code: 2)を得ました

 Warning: scandir(../images/): failed to open dir: No such file or directory

これを試しているファイルは、別のフォルダーにありますが同じディレクトリーにあります。

例えば

  • このコードのPhpファイルはincフォルダinc/settings.phpにあります

  • 見ている画像はimagesフォルダにあります

  • 両方のフォルダは私のプラグインフォルダの中にあります

     - myplugin
               myplugin.php
               /images
               /inc
               /documentaion
    

さて、私のimagesフォルダにあるすべてのimagesの名前をどうやって取得するのですか?

注:include('inc/settings.php');のように私のメインファイルに他のphpファイルを含めるのに使います

これらはうまく機能するので、パスの指定に問題がない可能性が最も高いです。scandirまたはglob関数の使用に問題がある可能性があります。誰かが私を助けてくれる?

私が単に以下を使うとき

foreach(glob('images/*.png') as $filename){
         echo $filename;
     }
     ?>

wp-admin/imagesフォルダから画像を取得するというアイデアはありますか?

1
sun

scandirglobはディレクトリのことに関連しているので、urlを返しますがdirectoryを返さないplugins_url()の代わりにWP_PLUGIN_DIRを試してみてください。

以下の両方の機能が便利です

WP_PLUGIN_DIR

plugin_dir_path( __FILE__ )

上記の機能を試してみました。

あなただけを使用する場合は覚えておいてください

<?php
    foreach (glob('images/*.png') as $filename) {
        echo $filename;
    }
?>

ルートディレクトリかもしれないwp-admin/imagesから画像を取得します。よくわかりません。

ここで何か問題があると思われる場合はコメントしてください:)

0
sun

この答えは質問の 最初のバージョン に関連しています、そして私はそれを更新する方法がわかりません、私はそれを残します一般的な参照としてここに。

これにはプラグインフォルダ(またはテーマ)を使用しないでください。たぶんあなたのプラグインはアップグレード機能を持たず、何も上書きされないでしょう。しかしベストプラクティスは、/wp-contentルートまたは内のフォルダーを/wp-content/uploads内に使用することです。

/wp-content/my-images内:

$test = glob( WP_CONTENT_DIR . '/my-images/*.png');

/wp-content/uploads/my-images内:

$up_dir = wp_upload_dir();
$test = glob( $up_dir['basedir'] . '/images/*.png');
2
brasofilo