it-swarm.com.de

Laden Sie bestimmte Bilder in einem bestimmten Ordner hoch

Ich versuche, einen Weg zu finden, um einige ausgewählte Bilder in ausgewählte Ordner in WordPress hochzuladen, kann aber bisher keinen Weg finden.

Ich möchte die Standardeinstellung für die Druckmaschine nicht ändern, um Bilder hochzuladen, da dies in allen Fällen erforderlich ist.

Arbeiten an einer Reiseseite, auf der ich Bilder von Reisezielen auf der Einführungsseite anzeigen muss. Vorgeschlagene Struktur.

  1. Jedes Ziel wird zu einem Staat gehören.
  2. Jedes Ziel kann mehrere Posts haben.

Beispielsweise möchte der Benutzer Details über Taj Mahal sehen, sodass es mehrere Posts über Taj Mahal geben kann, es wird jedoch eine gemeinsame Landingpage für Taj Mahal mit einer Liste von Posts/Artikeln über den Ort geben.

Auf der Zielseite möchte ich einige Bilder zu diesem Ziel anzeigen und diese Bilder in der folgenden Struktur speichern

wp-content\uploads\state-name\destination

PS: Für jedes Ziel gibt es wenige Einführungsbilder (max. 2-3), und ich möchte sie in einen bestimmten Ordner hochladen.

Ist es möglich oder muss ich diese Ordnerstruktur manuell erstellen?

5
Umesh Awasthi

In Ihrer Antwort sagten Sie, dass der gewünschte Weg ungefähr so ​​ist

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

dabei ist state-name ein Taxonomiebegriff und destination der Slug eines Ziel-CPT. Das Letzte ist aus Ihrer Frage nicht klar, aber es scheint so, lassen Sie es mich wissen, wenn ich falsch liege.

Ich schlage Ihnen diesen Workflow vor:

Hinzufügen eines Zielposts -> Zuweisen eines Statusbegriffs -> danach , laden Sie das Bild mit dem Medien-Uploader des gerade erstellten Zielposts hoch.

Auf diese Weise können wir die Ziel-ID für den aktuellen Anhang abrufen (an den Medien-Uploader als $_GET['post_id'] übergeben), dann den zugewiesenen Statusbegriff abrufen und schließlich den Ordner mithilfe des Filters 'upload_dir' festlegen.

Etwas einfaches:

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

}

Auf diese Weise wird beim Hochladen von Bildern aus einem Zielpost das Bild in den Ordner hochgeladen, wenn der Zielpost als state zugewiesen wurde (als Taxonomiebegriff)

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

wenn dem Zielpost kein Status zugewiesen wurde, wird das Bild im Ordner gespeichert

wp-content/destinations/{$destination_slug}/

Wenn dem Ziel mehr Status zugewiesen sind, wird der erste Status verwendet.

Beachten Sie, dass dieser Code davon ausgeht, dass der Cpt-Name für Ziele 'destinations' und der Taxonomiename für Bundesstaaten 'states' lautet.

4
gmazzap