Bonjour, j’ai essayé de choisir toutes les images d’un dossier de manière à ce que les images que l’utilisateur mette dans un dossier spécifique de mon plugin puissent être utilisées et utilisées dans un plugin.
J'ai essayé les fonctions php suivantes pour choisir des images ou des fichiers dans un dossier
glob
scandir
Lorsque j'essaie ce qui précède dans le framework wordpress, je reçois l'erreur The system cannot find the file specified.
lorsque j'essaie sur mon serveur local, à part wordpress area, il prend des fichiers dans le dossier spécifié.
<?php
foreach(glob('../images/*.png') as $filename){
echo $filename;
}?>
méthode d'analyse
<?php
foreach(scandir('../images/') as $filename){
echo $filename;
}?>
Ce qui précède fonctionne très bien en dehors du cadre WordPress
La même chose que j'ai essayé dans WordPress pour mon plugin dans mon dossier de plugins et je ne peux pas accomplir la tâche. Cela ne fonctionne pas.
Tentative 1
<?php
foreach(glob('../images/*.png') as $filename){
echo $filename;
}?>
je n'ai rien aucune erreur, aucun avertissement et aucune sortie.
Tentative 2
<?php
foreach(scandir('../images/') as $filename){
echo $filename;
}?>
J'ai l'avertissement 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
Le fichier que j'essaye est dans un dossier différent mais dans le même répertoire.
Par exemple
Le fichier Php avec ce code est dans le dossier inc
inc/settings.php
Les images que je cherche sont dans le dossier images
Les deux dossiers sont dans mon dossier de plugin
- myplugin
myplugin.php
/images
/inc
/documentaion
Maintenant, comment obtenir tous les noms d'images dans mon dossier d'images?
NOTE: J'utilise pour inclure mon autre fichier php dans mon fichier principal comme include('inc/settings.php');
Ces choses fonctionnent bien, donc il n'y a probablement aucun problème dans la spécification du chemin. Peut-être le problème lié à l'utilisation de la fonction scandir
ou glob
. Je ne peux pas deviner. Est-ce que quelqu'un peut m'aider?
Quand j'utilise simplement le dessous
foreach(glob('images/*.png') as $filename){
echo $filename;
}
?>
Obtiens-je des images du dossier wp-admin/images
?
scandir
et glob
sont liés aux éléments de répertoire. Essayez donc avec WP_PLUGIN_DIR
au lieu de plugins_url()
qui renvoie l'URL mais pas le répertoire.
Les deux fonctions ci-dessous sont utiles
WP_PLUGIN_DIR
plugin_dir_path( __FILE__ )
J'ai essayé les fonctions ci-dessus cela a bien fonctionné pour moi.
Rappelez-vous si vous utilisez simplement
<?php
foreach (glob('images/*.png') as $filename) {
echo $filename;
}
?>
Il obtiendra des images de wp-admin/images
qui pourraient être un répertoire racine. Suis pas sûr.
Commentaire si vous pensez que quelque chose ne va pas ici :)
Cette réponse concerne la première version de la Question, et je ne sais pas comment la mettre à jour, je la laisse ici à titre de référence générale.
Ne pas utiliser un dossier de plugin (ou un thème) pour cela. Peut-être que votre plugin n'a pas de fonctionnalité de mise à jour et que rien ne sera écrasé. Mais la meilleure pratique consiste à utiliser un dossier dans /wp-content
rootouà l'intérieur de /wp-content/uploads
.
Dans /wp-content/my-images
:
$test = glob( WP_CONTENT_DIR . '/my-images/*.png');
Dans /wp-content/uploads/my-images
:
$up_dir = wp_upload_dir();
$test = glob( $up_dir['basedir'] . '/images/*.png');