Dans la capture d'écran ci-dessus, vous pouvez voir une structure de dossiers construite avec le plugin premiumReal Media Library. Maintenant, je veux créer un plug-in d'extension capable d'organiser la structure de dossiers en structure de dossiers physique - RML n'est qu'une structure visuelle.
Regardez Organisation physique de la médiathèque wordpress (plugin Real Media Library) où j'ai créé un plugin d'extension gratuit.
Maintenant, j'ai créé un autre pluginReal Thumbnail Generator, qui vous permet de créer un dossier de téléchargement de vignettes personnalisé. Il suffit de regarder cette capture d'écran:
Pourquoi des dossiers de miniatures personnalisés? Les dossiers de vignettes personnalisés sont plus faciles à gérer car ici, il n’est pas nécessaire de conserver les URL de mise à jour de la base de données car les vignettes se trouvent toujours au même emplacement (qui n’a toujours pas été modifié par l’extension RML).
Si vous voulez en savoir plus sur le générateur de vignettes personnalisées, vous pouvez consulter ce fil, où j’ai expliqué une approche technique Chaque taille d’image personnalisée dans un répertoire de téléchargement personnalisé? .
Veuillez rester sur ce fil, car début 2017, je poursuivrai le développement de l'extension RML qui permet la synchronisation entre RML et le dossier de téléchargement du serveur. L'extension est également compatible avec le plugin Real Thumbnail Generator, il devrait donc y avoir une mise à jour de la base de données.
Au moment où je suis dans le dossier "/ Unorganized", cela signifie que c'est le dossier/wp-content/uploads /. Lorsque je déplace le fichier (comme vous pouvez le voir sur la capture d'écran) dans le dossier PDFs/SubDir, le fichier se trouve dans le dossier Visual. Maintenant, mon extension détecte le dossier différent du dossier physique et affiche un petit "bouton" qui permet à l'utilisateur de le déplacer physiquement aussi:
L'utilisateur clique maintenant sur le bouton "Physix it!" et le fichier doit être déplacé vers /wp-content/uploads/pdfs/subdir/Another-Doc.pdf . J'ai déjà créé le processus de déplacement: je lis tous les fichiers multimédias de cette pièce jointe (miniatures incluses pour les images) et utilise la fonction php renommer ($ ancien_fichier, $ nouveau_fichier) avec WPfonction wp_mkdir_p () . Le GUID de la table wp_posts et les métadonnées de wp_postmeta sont également modifiés. Quand tous les fichiers sont déplacés, j'appelle l'action:
<?php
do_action('RML/Physix/Moved', $meta, $id);
// $meta = Infos about the move process, see above screenshot
// $id = The attachment ID
?>
$ meta est un tableau:
La clé "renommer" contient tous les processus de changement de nom (par exemple, il peut s'agir des fichiers de vignettes pour les images).
Le principal problème (le cas échéant) de la médiathèque WordPress est que de nombreux plug-in enregistrent les références aux images avec des URL complètes au lieu de l’ID de pièce jointe. Cela signifie qu'il existe des tables MySQL avec des colonnes contenant une URL vers le fichier donné. Comment puis-je garantir que TOUT les références sont à jour avec les dossiers physiques? Je pense que c'est impossible.
J'accroche à l'action et met à jour les tables standard comme wp_post-> post_content}, _, ... avec une instruction REPLACE récursive en 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 variable $ rec est maintenant une instruction REPLACE:
REPLACE(post_content, 'https://example.io/wp-content/uploads/Another-Doc.pdf', 'https://example.io/wp-content/uploads/pdfs/subdir/Another-Doc.pdf')
Au fait: pour une image (testimage.jpg) avec tous les fichiers miniatures, cela peut ressembler à ceci:
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')
Mais que se passe-t-il s'il s'agit d'une chaîne sérialisée (JSON) dans la table de base de données? Donc, cela ressemble à { "image": "http:\/\/example.io\/wp-content\/uploads\/Another-Doc.pdf" }
. Que dois-je ajouter à la déclaration de remplacement?
L'instruction REPLACE peut maintenant être utilisée dans toutes les tables MySQL contenant des URL d'image. J'ai pensé créer un tableau de filtres où les plugins peuvent ajouter leurs tables et mon extension faire le reste:
<?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")
//...
));
?>
Je veux créer un "journal" où les utilisateurs peuvent annuler des déplacements. Si un utilisateur le voit, une image est cassée (par exemple dans le plug-in Slider Revolution), il peut annuler le déplacement dans le dossier d'origine.
Que pensez-vous de cette idée? Y a-t-il une meilleure solution? J'espère avoir tout expliqué de manière agréable!
Il y a longtemps, j'ai commencé à ouvrir ce fil. Il existe maintenant un plug-in d'extension utilisable pour Real Media Library qui vous permet de gérer physiquement votre dossier de téléchargements .
Découvrez ce plugin: https://wordpress.org/plugins/physical-custom-upload-folder/
Connaissez-vous le dossier wp-content/uploads? Là, les fichiers sont stockés dans des dossiers année/mois. Cela peut être un processus très compliqué et de masse, en particulier lorsque vous travaillez avec un client FTP comme FileZilla.
Déplacer des fichiers déjà téléchargés: Ce plugin ne permet pas de déplacer physiquement les fichiers lorsque vous déplacez un fichier dans la médiathèque Real Media car WordPress utilise les URL à des endroits différents. Il est très difficile de maintenir un tel processus. Donc, cela ne fonctionne que pour les nouveaux téléchargements.