मैं david-binda से सहमत हूँ - महान प्रश्न! मैं इस समस्या पर कई मौकों पर दौड़ चुका हूं और एक ऐसा समाधान लेकर आया हूं जो बहुत अच्छा काम करता है। जबकि मुझे पावलोस-बिज़िमिस द्वारा सुझाए गए वर्गों के साथ छवि सम्मिलित करने के लिए एक शोर्ट जोड़ने का विचार पसंद है, मुझे नहीं लगता कि यह वास्तव में समस्या को हल करता है जैसे कि छवि संपादित करें पॉपअप में विकल्प जोड़ना (उदाहरण के लिए आपके पास शायद होगा) अपने शोर्ट में छवि को लपेटें जब तक कि आप मैन्युअल रूप से छवि आईडी दर्ज करना पसंद नहीं करते)। इसके अलावा, मेरे कुछ ग्राहकों के लिए यहां तक कि एक शोर्ट भी बहुत जटिल है (जिस स्थिति में आप इसे टिनीएमसीई बटन पर बाँध सकते हैं)।
वैसे भी, आगे की हलचल के बिना - यहाँ मेरे पाँच सेंट हैं। मैं इस समाधान का उपयोग एक स्लाइड शो प्लगइन में करता हूं जो मुझे स्लाइडशो से छवि को शामिल करने / बाहर करने के लिए विकल्प देता है और कुछ छवि मेटा फ़ील्ड की सामग्री दिखाने वाले ओवरले के लिए पृष्ठभूमि रंग सेट करता है। मूल रूप से यह में हुक attachment_fields_to_edit
और attachment_fields_to_save
इनपुट फ़ील्ड जोड़ सकते हैं और क्रमश: प्रपत्र डेटा को बचाने के क्रम में। यह डेटा अटैचमेंट पोस्ट के लिए मानक पोस्ट मेटा के रूप में उपलब्ध होगा (यानी आप जो चित्र संपादित कर रहे हैं)। यह बहुत अच्छा है क्योंकि यह get_post_meta()
हमेशा की तरह उपयोग करना आसान है । और आपको एक फिल्टर भी जोड़ना चाहिए wp_get_attachment_image_attributes
या image_send_to_editor
जो आपको हर बार छवि के आउटपुट होने पर उपयुक्त वर्ग को स्वचालित रूप से जोड़ने की अनुमति देगा।
मैंने कोड को पठनीयता के लिए थोड़ा संशोधित किया है, इसलिए कुछ भाग अपूर्ण / गलत हो सकते हैं।
/**
* Adds a form field for excluding images from slideshow
*
* @param array $form_fields Array of form fields
* @param object $post The post to show
* @return array Array of form fields
* @author Simon Fransson
**/
function hs_attachment_fields_to_edit($form_fields, $post = null)
{
$val = (boolean)get_post_meta($post->ID, SLIDESHOW_EXCLUDE_IMAGE_KEY, true);
$id = SLIDESHOW_EXCLUDE_IMAGE_KEY . "-" . $post->ID;
$markup = sprintf('<label for="%s"><input type="checkbox" class="checkbox" id="%s" name="attachments[%s][%s]" value="true" %s /> %s</label>', $id, $id, $post->ID, SLIDESHOW_EXCLUDE_IMAGE_KEY, checked($val, true, false), __('Exclude from slideshow', 'slideshow'));
$form_field = array(
'label' => __('Slideshow', 'slideshow'),
'input' => 'html',
'html' => $markup,
'value' => $val,
'helps' => __('Excludes the image from slideshows.', 'slideshow'),
);
$form_fields[SLIDESHOW_EXCLUDE_IMAGE_KEY] = $form_field; // See update notice below code block!
return $form_fields;
}
add_filter('attachment_fields_to_edit', 'hs_attachment_fields_to_edit', 10, 2);
/**
* Save the images exclude status meta value when saving attachment data
*
* @param object $post Post object
* @param array $attachment Field values
* @return object Post object
* @author Simon Fransson
**/
function hs_attachment_fields_to_save($post, $attachment = null)
{
update_post_meta($post['ID'], SLIDESHOW_EXCLUDE_IMAGE_KEY, intval(isset($attachment[SLIDESHOW_EXCLUDE_IMAGE_KEY])));
return $post;
}
add_filter('attachment_fields_to_save', 'hs_attachment_fields_to_save', 10, 2);
/**
* Generate metadata for newly uploaded attachment.
* This is here simply because we are dealing with a boolean,
* which means that for SQL related reasons a value NEEDS to
* exist even when noting has been specified in the options
*
* @param array $metadata Array of meta data
* @param int $attachment_id ID of attachment post
* @return array Array of meta data
* @author Simon Fransson
**/
function hs_generate_attachment_metadata($metadata, $attachment_id = null)
{
$exclude = intval(get_post_meta($attachment_id, SLIDESHOW_EXCLUDE_IMAGE_KEY, true));
update_post_meta($attachment_id, SLIDESHOW_EXCLUDE_IMAGE_KEY, $exclude);
return $metadata;
}
add_filter('wp_generate_attachment_metadata', 'hs_generate_attachment_metadata', 10, 2);
अद्यतन : मैंने अभी इस कोड का उपयोग एक प्रोजेक्ट में बॉयलरप्लेट के रूप में उपयोग करने के लिए किया है, जिस पर मैं काम कर रहा हूं। जैसा कि आप शायद कोड को देखकर मुझे बता सकते हैं कि मैं अपनी पोस्ट मेटा कुंजियों को परिभाषित स्थिरांक में संग्रहीत करना पसंद करता हूं। जब मैं ऐसा करता हूं तो मैं हमेशा _
इसे मेटा फील्ड्स एडिटर में दिखाने से रोकने के लिए वैल्यू को प्राथमिकता देता हूं , लेकिन इस अभ्यास से कुछ समस्याएं हो सकती हैं attachment_fields_to_save
। $form_fields
सरणी में कुंजियाँ प्रारंभ नहीं_
हो सकती हैं, इसलिए सरणी और मेटा मानों के लिए अलग-अलग कुंजियों का उपयोग करने के लिए सावधान रहें और अनुलग्नक फ़ील्ड के साथ काम करते समय किसी भी अंडरस्कोर को ट्रिम करें। चूंकि SLIDESHOW_EXCLUDE_IMAGE_KEY
मेरे उदाहरण में भी परिभाषित नहीं किया गया है, कोड की नकल करते समय यह शायद कोई बड़ी बात नहीं है, लेकिन मुझे लगा कि मैं इसका उल्लेख करूंगा। मुझे यह पता लगाने में थोड़ा समय लगा (और दूसरी बार, उस समय)।