Organizzazione fisica della libreria multimediale wordpress (plug-in Real Media Library)


22

Struttura delle cartelle della libreria multimediale reale

Introduzione.

Nella schermata sopra puoi vedere una struttura di cartelle creata con il plugin premium Real Media Library . Ora voglio creare un plug-in di estensione in grado di organizzare la struttura delle cartelle in una struttura di cartelle fisica - RML è solo una struttura visiva.

Aggiornamento n. 2 (27-01-2017): controlla la risposta!

Dai un'occhiata all'organizzazione fisica della libreria multimediale wordpress (plug-in Real Media Library) in cui ho creato un plug-in di estensione gratuito.

Aggiornamento n. 1 (14-12-2016): il primo successo: cartella di caricamento miniature personalizzata

Ora, ho creato un altro plugin Real Thumbnail Generator , che ti consente di creare una cartella di caricamento delle miniature personalizzata. Dai un'occhiata a questo screenshot:

Cartella di caricamento del generatore di miniature reali

Perché cartelle di miniature personalizzate? Le cartelle di miniature personalizzate sono più facili da mantenere, perché qui non è necessario conservare gli URL di aggiornamento del database perché le miniature sono ancora nella stessa posizione (che non è ancora stata modificata dall'estensione RML).

Se vuoi saperne di più sul generatore di miniature personalizzato, puoi dare un'occhiata a questo thread, dove ho spiegato un approccio tecnico Ogni dimensione dell'immagine personalizzata nella directory di caricamento personalizzata? .

Continua su questo thread, perché all'inizio del 2017 continuerò lo sviluppo dell'estensione RML che consente la sincronizzazione tra RML e la cartella dei caricamenti del server. L'estensione è anche compatibile con il plugin Real Thumbnail Generator, quindi dovrebbe esserci l'aggiornamento del database.

Posta originale

Il mio obiettivo di estensione.

Al momento sono nella cartella "/ Unorganized", ciò significa che è la cartella / wp-content / uploads /. Quando sposto il file (come puoi vedere nello screenshot) nella cartella PDF / SubDir, il file si trova nella cartella visiva. Ora la mia estensione rileva la cartella diversa da quella fisica e mostra un piccolo "pulsante" che consente all'utente di spostarlo anche fisicamente:

Pulsante per agganciarlo

L'utente ora fa clic sul pulsante "Physix it!" e il file dovrebbe essere spostato in /wp-content/uploads/pdfs/subdir/Another-Doc.pdf . Ho già creato il processo di spostamento: ho letto tutti i file multimediali per questo allegato (miniature incluse per le immagini) e utilizzo la rinomina della funzione php ($ old_file, $ new_file) insieme alla funzione WP wp_mkdir_p () . Anche il GUID nella tabella wp_posts e i metadati in wp_postmeta sono cambiati. Quando tutti i file vengono spostati, chiamo l'azione:

<?php
do_action('RML/Physix/Moved', $meta, $id);
// $meta = Infos about the move process, see above screenshot
// $id = The attachment ID
?>

$ meta è un array:

inserisci qui la descrizione dell'immagine

La chiave "rinomina" contiene tutti i processi di ridenominazione (ad esempio qui possono essere i file di anteprima per le immagini).

Il problema: garantire la compatibilità dei plug-in.

Il problema principale (se presente) della libreria multimediale di WordPress è che molti plugin salvano i riferimenti alle immagini con URL completi anziché l'ID allegato. Ciò significa che ci sono tabelle MySQL con colonne che contengono un URL per il file specificato. Come posso garantire che TUTTI i riferimenti siano aggiornati con le cartelle fisiche? Penso che sia impossibile.

Un possibile approccio.

Mi aggancio all'azione e aggiorno le tabelle standard come wp_post-> post_content , ... con un'istruzione ricorsiva REPLACE in SQL.

<?php    
/**
 * When a attachment is moved.
 * 
 * @hooked RML/Physix/Moved
 */
function physix_moved($meta, $id) {
    $rename = $meta["rename"];

    // Prepare array for recursive REPLACE
    $arr = array();
    foreach ($rename as $value) {
        $arr[] = array($value["old_url"], $value["new_url"]);
    }
    $rec = $this->recReplace($arr, "post_content"); // function is already finished
}
?>

La variabile $ rec ora è un'istruzione REPLACE:

REPLACE(post_content, 'https://example.io/wp-content/uploads/Another-Doc.pdf', 'https://example.io/wp-content/uploads/pdfs/subdir/Another-Doc.pdf')

A proposito: per un'immagine (testimage.jpg) con tutti i file di anteprima può apparire così:

REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(post_content, 'https://example.io/wp-content/uploads/testimage-750x350.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-750x350.jpg'), 'https://example.io/wp-content/uploads/testimage-1170x855.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-1170x855.jpg'), 'https://example.io/wp-content/uploads/testimage-256x187.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-256x187.jpg'), 'https://example.io/wp-content/uploads/testimage-1024x748.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-1024x748.jpg'), 'https://example.io/wp-content/uploads/testimage-300x219.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-300x219.jpg'), 'https://example.io/wp-content/uploads/testimage-150x150.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-150x150.jpg'), 'https://example.io/wp-content/uploads/testimage.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage.jpg')

Ma cosa succede se si tratta di una stringa serializzata (JSON) nella tabella del database? Quindi sembra { "image": "http:\/\/example.io\/wp-content\/uploads\/Another-Doc.pdf" }. Cosa devo aggiungere all'istruzione REPLACE?

L'istruzione REPLACE può ora essere utilizzata in tutte le tabelle MySQL che contengono URL di immagini. Ho pensato di creare un array di filtri in cui i plugin possono aggiungere le loro tabelle e la mia estensione fa il resto:

<?php
$tables = apply_filters("RML/Physix/Moved/Tables", array( // TODO: use $wpdb->prefix
    "wp_posts" => array("post_excerpt", "post_content"),
    "wp_postmeta" => array("meta_value")
    //...
));
?>

Il registro "sposta"

Voglio creare un "registro" in cui gli utenti possano annullare le mosse. Se un utente vede, un'immagine è rotta (ad esempio nel plugin Slider Revolution), può annullare il passaggio alla cartella originale.

Cosa ne pensi di quell'idea? C'è una soluzione migliore? Spero di aver spiegato tutto in modo carino!


9
Non intendi vedere la struttura delle cartelle alla base degli allegati, in molti casi non ce ne sono (forse i file non sono nemmeno sul server? SN AWS ​​CDN ecc.), WordPress si occupa dei post degli allegati, non dei file degli allegati, e spostarli su un server è controproducente. Faresti meglio a farlo con una tassonomia personalizzata e riscrivere le regole che innescano un reindirizzamento
Tom J Nowell

5
Sebbene questa sia un'ottima domanda in termini di chiarezza / qualità (+1 per sforzo), alla fine abbiamo a che fare con un plug-in di terze parti qui, che è considerato fuori tema - Non penso che nessuno sarà in grado di "rapidamente" ti aiuta senza essere seriamente investito in RML.
TheDeadMedic,

@TheDeadMedic Sì, è vero. Ma ho posto la domanda nel modo in cui sai come funziona con le azioni in RML. Questa domanda non è specifica per RML, è più specifica per il database: come risolvere il problema con la sostituzione dell'URL.
Matthias Günter,

2
E un altro +1 per lo sforzo - vorrei avere più di tali domande ... come abbiamo fatto nei primi giorni. Ad ogni modo, i problemi principali sono indicati sopra. Per fare il tuo punto: potresti per favore presentare una modifica e spiegare il ragionamento per quello che stai provando? Finora non ha alcun senso eseguire quelle attività sul filesystem.
Kaiser

Come sei andato con questo @ MatthiasGünter? Sei riuscito a trovare una soluzione?
Tim Malone,

Risposte:


1

Estensione di soluzione gratuita "Cartella di caricamento personalizzata fisica"

Molto tempo fa ho iniziato ad aprire questo thread e ora esiste un plug-in di estensione utilizzabile per Real Media Library che consente di gestire fisicamente la cartella dei caricamenti .

inserisci qui la descrizione dell'immagine

Dai un'occhiata a questo plugin: https://wordpress.org/plugins/physical-custom-upload-folder/

Conosci la cartella wp-content / uploads? Lì, i file vengono archiviati in cartelle basate su anno / mese. Questo può essere un processo molto complicato e di massa, specialmente quando si lavora con un client FTP come FileZilla.

Spostamento di file già caricati: questo plug-in non consente di spostare fisicamente i file quando si sposta un file nella Libreria di Real Media perché WordPress utilizza gli URL in luoghi diversi. È molto difficile mantenere un tale processo. Quindi questo funziona solo per i nuovi caricamenti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.