web-dev-qa-db-fra.com

Comment utiliser le chemin relatif avec mes dossiers de plugins?

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 incinc/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?

1
sun

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 :)

0
sun

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');
2
brasofilo