मैं आखिरकार क्या हासिल करना चाहता हूं छवि विवरण बॉक्स में अतिरिक्त सेटिंग्स जोड़ी गई हैं, जो कि विशेषताओं के <img>
रूप में छवि टैग में संग्रहीत की जाएंगीdata-*
उदाहरण: <img src="..." data-my_setting="...">
मेरे कोड
मैं एक प्लगइन बना रहा हूं, और जब आप छवियों को संपादित करते हैं, तो मुझे अधिक सेटिंग्स बनाने की आवश्यकता होती है। अब तक मेरे पास निम्नलिखित कोड हैं:
jQuery(function($) {
var imageDetails = wp.media.view.ImageDetails
wp.media.view.ImageDetails = wp.media.view.ImageDetails.extend({
// Initialize - Call function to add settings when rendered
initialize: function() {
this.on('post-render', this.add_settings);
},
// To add the Settings
add_settings: function() {
$('.advanced-section').prepend('\
<h2>My Settings</h2>\
<input type="text" class="my_setting">\
');
// Set Options
this.controller.image.set({"data-settings": 'setting-value-here'})
}
});
}) // End of jQuery(function($))
मैंने एक नई पोस्ट बनाई और एक छवि को जोड़ा, फिर उस पर क्लिक किया और एडिट (टूलबार में पेंसिल आइकन जो पॉप हो गया) दबाया। मैं छवि विवरण पृष्ठ पर समाप्त हुआ, और यह वही है जो ऐसा दिखता था:
अब तक सब ठीक है। इस लाइन पर:
this.controller.image.set({"data-settings": 'setting-value-here'})
मैं आमतौर पर इनपुट के मूल्य को प्राप्त करने के लिए jQuery का उपयोग करता हूं, लेकिन परीक्षण उद्देश्यों के लिए मैंने इसे स्थिर मूल्य के रूप में बदल दिया 'setting-value-here'
। मैंने छवि विवरण बॉक्स के निचले-दाएं कोने में 'अपडेट' दबाया।
समस्या
टेक्स्ट एडिटर में, यह HTML कोड इस प्रकार दिखाता है:
यह एक नहीं है data-settings="setting-value-here"
, कैसे आया?
यदि मैं इसके साथ लाइन को प्रतिस्थापित करता हूं:
this.controller.image.set({alt: 'setting-value-here'})
यह करता है बदलने के एएलटी करने के लिए टैग alt="setting-value-here"
। तो क्या मैं गलत डेटा सेट करने की कोशिश कर रहा हूँ- * विशेषता?
समाधान
@Bonger (जिसे 50 प्रतिष्ठा का पूरा इनाम मिला) के लिए धन्यवाद , मेरे पास निम्नलिखित कोड हैं:
पीएचपी:
function add_my_settings() {
ob_start();
wp_print_media_templates();
$tpl = ob_get_clean();
if ( ( $idx = strpos( $tpl, 'tmpl-image-details' ) ) !== false
&& ( $before_idx = strpos( $tpl, '<div class="advanced-section">', $idx ) ) !== false ) {
ob_start();
?>
<div class="my_setting-section">
<h2><?php _e( 'My Settings' ); ?></h2>
<div class="my_setting">
<label class="setting my_setting">
<span><?php _e( 'My Setting' ); ?></span>
<input type="text" data-setting="my_setting" value="{{ data.model.my_setting }}" />
</label>
</div>
</div>
<?php
$my_section = ob_get_clean();
$tpl = substr_replace( $tpl, $my_section, $before_idx, 0 );
}
echo $tpl;
};
// Hack the output of wp_print_media_templates()
add_action('wp_enqueue_media', $func =
function() {
remove_action('admin_footer', 'wp_print_media_templates');
add_action('admin_footer', 'add_my_settings');
}
);
जावास्क्रिप्ट: (का उपयोग करने की आवश्यकता होती है wp_enqueue_script()
)
// When Image is Edited
wp.media.events.on('editor:image-edit', function(data) {
data.metadata.my_setting = data.editor.dom.getAttrib( data.image, 'data-my_setting' );
});
// When Image is Updated
wp.media.events.on('editor:image-update', function(data) {
data.editor.dom.setAttrib( data.image, 'data-my_setting', data.metadata.my_setting );
});