it-swarm.com.de

Upload-Verzeichnis nur für Plugin-Uploads ändern

Ich habe viel Zeit damit verbracht, die anderen Threads zu dieser Frage zu lesen, aber ich kann meinen Code einfach nicht richtig funktionieren lassen.

Ich erstelle ein Plugin und habe auf meiner benutzerdefinierten Administrationsseite ein Upload-Formular eingerichtet. Zum Verarbeiten des Uploads verwende ich Media Uploader. Bitte sehen Sie unten für vereinfachten Code:

class myPlugin() {
  function __construct(){
    add_filter('wp_handle_upload_prefilter', array( $this, 'handle_upload_prefilter') );
    add_filter('wp_handle_upload', array( $this, 'handle_upload') );
  }

  function handle_upload_prefilter( $file ) {
    add_filter('upload_dir', array( $this, 'custom_upload_dir' ) );
    return $file;
  }

  function handle_upload( $fileinfo )   {
    remove_filter('upload_dir', array( $this, 'custom_upload_dir' ) );
    return $fileinfo;
  }

  function custom_upload_dir($args) {   
    $args['path'] = $args['basedir'] . "/mypath" . $args['subdir'];
    $args['url'] = $args['baseurl'] . "/mypath" . $args['subdir'];
    return $args;
  }
}

Der obige Code funktioniert und ändert das Upload-Verzeichnis in den von mir angegebenen Pfad. Es wird jedoch das Upload-Verzeichnis für ALLE Uploads geändert. Ich möchte, dass mein Code nur beim Hochladen von meiner benutzerdefinierten Administrationsseite ausgeführt wird.

Folgendes habe ich bisher versucht (und es hat bei mir nicht funktioniert):

  1. Ich habe versucht, Bedingungen zu verwenden, um in meiner Funktion $pagenow und get_current_screen auf custom_upload_dir zu testen, aber das scheint jedes Mal zu scheitern und verwendet die Standard-Upload-Pfade.
  2. Ich habe versucht, in meinem __construct auf Bedingtes zu testen, aber es wird ein Fehler zurückgegeben (ich denke, es ist zu früh im WP Lebenszyklus).
  3. Versucht, die Bedingung in meiner handle_upload_prefilter -Funktion auch ohne Erfolg auszuführen.
4
ahnkee

An Ihren Formulardaten muss etwas erkennbar sein, z. B. Ihre Eingabenamen. Suchen Sie nach einer oder mehreren davon und gehen Sie entsprechend vor.

function custom_upload_dir($args) {   
    if (isset($_POST['something'])) {
        $args['path'] = $args['basedir'] . "/mypath" . $args['subdir'];
        $args['url'] = $args['baseurl'] . "/mypath" . $args['subdir'];
    }
    return $args;
}

Nach einigen Nachforschungen sehe ich nur Folgendes:.

  1. Die Beitrags-ID wird über die Daten POST an den Rückruf übergeben. Ich weiß jedoch nicht, ob dies auf Ihrer benutzerdefinierten Plugin-Seite eingestellt ist.
  2. $_SERVER['HTTP_REFERER'] scheint richtig eingestellt zu sein. Sie können dies analysieren, um festzustellen, ob Ihre Plug-in-Seite die ursprüngliche Seite ist.

Wenn ich die vollständige Plugin-Quelle hätte, könnte ich einige Tests durchführen.

3
s_ha_dum