परिचय।
उपरोक्त स्क्रीनशॉट में आप प्रीमियम प्लगइन रियल मीडिया लाइब्रेरी के साथ निर्मित एक फ़ोल्डर संरचना देख सकते हैं । अब मैं एक एक्सटेंशन प्लगइन बनाना चाहता हूं जो फ़ोल्डर संरचना को भौतिक फ़ोल्डर संरचना में व्यवस्थित कर सकता है - आरएमएल केवल दृश्य संरचना है।
अद्यतन # 2 (2017-01-27): उत्तर की जाँच करें!
वर्डप्रेस मीडिया लाइब्रेरी (रियल मीडिया लाइब्रेरी प्लगइन) के भौतिक संगठन पर एक नज़र डालें जहां मैंने एक मुफ्त एक्सटेंशन प्लगइन बनाया है।
अपडेट # 1 (2016-12-14): पहली सफलता: कस्टम थंबनेल अपलोड फ़ोल्डर
अब, मैंने एक और प्लगइन रियल थंबनेल जेनरेटर बनाया है , जो आपको कस्टम थंबनेल अपलोड फ़ोल्डर बनाने की अनुमति देता है। बस इस स्क्रीनशॉट पर एक नजर:
कस्टम थंबनेल फ़ोल्डर्स क्यों? कस्टम थंबनेल फ़ोल्डर्स को बनाए रखना आसान है, क्योंकि यहां, हमें डेटाबेस अपडेट URL को बनाए रखने की आवश्यकता नहीं है क्योंकि थंबनेल अभी भी उसी स्थान पर हैं (जो अभी भी आरएमएल एक्सटेंशन द्वारा नहीं बदला गया है)।
यदि आप कस्टम थंबनेल जनरेटर के बारे में अधिक जानना चाहते हैं, तो आप इस धागे पर एक नज़र डाल सकते हैं, जहाँ मैंने एक तकनीकी दृष्टिकोण समझाया है जो कस्टम अपलोड निर्देशिका में प्रत्येक कस्टम छवि का आकार है? ।
कृपया इस थ्रेड पर बने रहें, क्योंकि 2017 की शुरुआत मैं आरएमएल एक्सटेंशन का विकास जारी रखेगा जो आरएमएल और सर्वर अपलोड फ़ोल्डर के बीच सिंक्रनाइज़ेशन की अनुमति देता है। एक्सटेंशन रियल थंबनेल जेनरेटर प्लगइन के साथ भी संगत है, इसलिए डेटाबेस अपडेट होना चाहिए।
मूल पोस्ट
मेरा विस्तार लक्ष्य।
फिलहाल मैं फ़ोल्डर "/ असंगठित" में हूँ, इसका मतलब है कि यह फ़ोल्डर / wp-content / uploads / है। जब मैं फ़ाइल को फ़ोल्डर में ले जाता हूं (जैसा कि आप स्क्रीनशॉट में देख सकते हैं) पीडीएफ / सबडिर के लिए फ़ाइल दृश्य फ़ोल्डर में है। अब मेरा विस्तार भौतिक के लिए अलग फ़ोल्डर का पता लगाता है और एक छोटा "बटन" दिखाता है जो उपयोगकर्ता को इसे भौतिक रूप से स्थानांतरित करने की अनुमति देता है:
उपयोगकर्ता अब बटन पर क्लिक करता है "Physix it!" और फ़ाइल को /wp-content/uploads/pdfs/subdir/Another-Doc.pdf में ले जाना चाहिए । मैंने चाल प्रक्रिया पहले ही बना ली है: मैंने इस अनुलग्नक (छवियों के लिए समावेशी थंबनेल) के लिए सभी मीडिया फ़ाइलों को पढ़ा और WP फ़ंक्शन wp_mkdh_p () के साथ मिलकर php फ़ंक्शन नाम ($ old_file, $ new_file) का उपयोग किया । में GUID wp_posts मेज और में मेटा डेटा wp_postmeta बदल गया है, भी। जब सभी फाइलें चली जाती हैं, तो मैं कार्रवाई को कॉल करता हूं:
<?php
do_action('RML/Physix/Moved', $meta, $id);
// $meta = Infos about the move process, see above screenshot
// $id = The attachment ID
?>
$ मेटा एक सरणी है:
कुंजी "नाम" में सभी नाम बदलने की प्रक्रिया शामिल है (उदाहरण के लिए यहां छवियों के लिए थंबनेल फाइलें हो सकती हैं)।
समस्या: प्लगइन संगतता की गारंटी।
वर्डप्रेस मीडिया लाइब्रेरी की मुख्य समस्या (अगर यह है) है, कि कई प्लगइन्स अटैचमेंट आईडी के बजाय पूर्ण URL वाले चित्रों के संदर्भ को सहेजते हैं। इसका अर्थ है कि कॉलम के साथ MySQL टेबल हैं जिसमें दी गई फ़ाइल का URL है। मैं कैसे गारंटी दे सकता हूं कि सभी संदर्भ भौतिक फ़ोल्डर्स के साथ अद्यतित हैं? मुझे लगता है कि यह असंभव है।
एक संभव दृष्टिकोण।
मैं कार्रवाई में हुक करता हूं और SQL में पुनरावर्ती विवरण के साथ wp_post-> post_content , ... जैसे मानक तालिकाओं को अपडेट करता हूं ।
<?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
}
?>
$ Rec चर अब एक REPLACE- कथन है:
REPLACE(post_content, 'https://example.io/wp-content/uploads/Another-Doc.pdf', 'https://example.io/wp-content/uploads/pdfs/subdir/Another-Doc.pdf')
वैसे: सभी थंबनेल फ़ाइलों के साथ एक छवि (testimage.jpg) के लिए यह इस तरह दिख सकता है:
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')
लेकिन क्या होता है, अगर यह डेटाबेस टेबल में क्रमबद्ध स्ट्रिंग (JSON) है? तो ऐसा लग रहा है { "image": "http:\/\/example.io\/wp-content\/uploads\/Another-Doc.pdf" }
। मुझे REPLACE- कथन में क्या जोड़ना चाहिए?
REPLACE- स्टेटमेंट का उपयोग अब सभी MySQL तालिकाओं के माध्यम से किया जा सकता है जिसमें छवि URL शामिल हैं। मैंने एक फ़िल्टर सरणी बनाने के बारे में सोचा, जहाँ प्लगइन्स अपनी टेबल जोड़ सकते हैं और मेरा एक्सटेंशन बाकी काम करता है:
<?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")
//...
));
?>
"चाल" लॉग
मैं एक "लॉग" बनाना चाहता हूं जहां उपयोगकर्ता स्थानांतरित कर सकते हैं। यदि कोई उपयोगकर्ता देखता है, तो एक छवि टूट गई है (उदाहरण के लिए स्लाइडर क्रांति प्लगइन), वह मूल फ़ोल्डर में स्थानांतरित कर सकता है।
आप उस विचार के बारे में क्या सोचते हैं? क्या कोई बेहतर समाधान है? मुझे आशा है कि मैंने सभी को अच्छे तरीके से समझाया है!