web-dev-qa-db-fra.com

Télécharger des images spécifiques dans un dossier spécifique

J'essaie de trouver un moyen de télécharger quelques images sélectives dans des dossiers sélectifs dans WordPress, mais je ne parviens pas à trouver un moyen jusqu'ici.

Je ne souhaite pas modifier les paramètres par défaut de la presse professionnelle pour télécharger des images, car cela est nécessaire dans tous les cas.

Travailler sur un site de voyage où je dois montrer des images de destinations sur la page d'introduction de la destination. Structure proposée.

  1. Chaque destination appartiendra à un état.
  2. Chaque destination peut avoir plusieurs messages.

Donc, par exemple, les utilisateurs veulent voir des détails sur le Taj Mahal, il peut donc y avoir plusieurs messages sur le Taj Mahal, mais ils auront une page de destination commune pour le Taj Mahal avec une liste de messages/articles sur le lieu.

Sur la page de destination, je souhaite afficher quelques images de cette destination et les stocker dans la structure suivante.

wp-content\uploads\state-name\destination

PS: Pour chaque destination, il y aura peu d'images d'introduction (2-3 max), et je veux les télécharger dans un dossier spécifique.

Est-il possible ou dois-je créer manuellement cette structure de dossiers

5
Umesh Awasthi

Dans votre réponse, vous avez dit que le chemin souhaité ressemblait à quelque chose comme:

wp-content\uploads\state-name\destination\

state-name est un terme de taxonomie et destination est le slug d'un CPT de destination. Votre dernière question n’est pas claire, mais il semble que oui, dites-moi si je me trompe).

Donc, je vous suggère ce flux de travail:

Ajoutez une publication de destination -> attribuez un terme d'état -> après , téléchargez l'image à l'aide du programme de téléchargement de média à partir de la publication de destination que vous venez de créer.

Ce faisant, nous pouvons récupérer l'ID de destination de la pièce jointe actuelle (transmise au programme de téléchargement de média sous la forme $_GET['post_id']), puis récupérer le terme d'état attribué et enfin définir le dossier à l'aide du filtre 'upload_dir'.

Quelque chose de facile:

add_filter('upload_dir', 'set_destination_folder', 999);

function set_destination_folder ( $upload_data ) {  

  if ( ! isset( $_REQUEST['post_id']) )
    return $upload_data;
  $destination = get_post( $_REQUEST['post_id'] );
  if ( empty($destination) || $destination->post_type != 'destinations' )
    return $upload_data;
  $states = get_the_terms($_REQUEST['post_id'], 'states');
  if ( empty($states) || ! is_array($states) ) {
    $subdir = '/destinations/' . $destination->post_name;
  } else {
    $subdir = '/' . array_shift($states)->slug . '/destinations/' . $destination->post_name;
  }
  $dir = $upload_data['basedir'] . $subdir;
  $url = $upload_data['baseurl'] . $subdir;
  return wp_parse_args(array('path'=>$dir, 'url'=>$url, 'subdir'=>$subdir), $upload_data);

}

De cette manière, lorsque vous téléchargez des images à partir d'une publication de destination, si la destination de publication est publiée sous la forme state assignée (en tant que terme de taxonomie), l'image sera téléchargée dans le dossier.

wp-content/{$state_slug}/destinations/{$destination_slug}/

si aucun message n'est attribué à la publication de destination, l'image sera enregistrée dans le dossier.

wp-content/destinations/{$destination_slug}/

Si plusieurs états sont attribués à la destination, le premier état est pris.

Notez que ce code suppose que le nom cpt des destinations est 'destinations' et que le nom de taxonomie des états est 'states'.

4
gmazzap