क्या मैं अटैचमेंट में कैटेगिरी मेटाबॉक्स जोड़ सकता हूं?


18

मैं register_taxonomy_for_object_type()मीडिया अपलोड (संलग्नक) में श्रेणी वर्गीकरण की श्रेणी जोड़ने के लिए उपयोग कर रहा हूं । मैं ऐसा करने के लिए इस कोड का उपयोग कर रहा हूं:

add_action('init', 'reg_tax');
function reg_tax() {
   register_taxonomy_for_object_type('category', 'attachment');
}

यह काम करता है और छवि को देखते समय श्रेणी से मीडिया पृष्ठ के लिए एक सरल पाठ क्षेत्र जोड़ता है। जो मैं वास्तव में चाहता हूं, वह इसे वास्तविक श्रेणियाँ मेटाबॉक्स प्रदर्शित करने के लिए है ताकि मैं उन श्रेणियों का चयन कर सकूं जिन्हें मैं उपयोग करना चाहता हूं बजाय उन्हें सादे क्षेत्र में टाइप किए। मैंने यह भी पाया है कि एक श्रेणी के लिए स्लग को इस टेक्स्ट फ़ील्ड में डालना जैसे my-category-nameकि वास्तविक श्रेणी के नाम के रूप में प्रदर्शित होता है जैसे My Category Nameकि यह सहेजा जाता है, जो सरल टेक्स्ट फ़ील्ड को एक उपयोगी विकल्प से भी कम बनाता है।

मैं add_post_type_support()Metaboxes को जोड़ने के लिए फ़ंक्शन को देख रहा हूं और इसे कस्टम पोस्ट प्रकारों के लिए उपयोग किया है, मैं सिर्फ यह नहीं देख सकता कि क्या अनुलग्नकों के लिए इसे जोड़ना संभव है।


यदि आप सर्वश्रेष्ठ उत्तर चुनने से एक या दो दिन पहले प्रतीक्षा करते हैं, तो मैं आपको एक प्लगइन लिखूंगा ... (मैंने आज रात को वर्डप्रेस
आंसर

@ माइक: धन्यवाद, मैं यह देखने के लिए उत्सुक हूं कि इस समस्या के क्या समाधान हैं। ऐसा लगता है जैसे मैं उसके बाद लगभग 90% वर्डप्रेस में खड़ा हूं जैसे कि यह खड़ा है, यह केवल उस अंतिम 10% के बारे में देखा जा सकता है!
रिक कर्रान

मैंने एक कस्टम पोस्ट मेटाबॉक्स के साथ कुछ ऐसा ही किया है; एक (मूल) श्रेणी सूची (यानी w / o सभी / सबसे लोकप्रिय के लिए टैब एम्बेड)। यह केवल इस बात पर निर्भर करता है कि 'अनुलग्नक_ फ़ील्ड्स_ऑटो_डिट' अपने POST को कैसे लागू करता है। वैसे भी, मैं आज रात नहीं कर सकता। सोने की आवश्यकता।
माइकस्किंकल

ओह, जैसा कि आप पहले ही इसका उत्तर दे चुके हैं कि मैं अपनी टू-डू सूची निकाल लूंगा।
माइकस्किंकल

@ माइक: आपकी मदद के लिए धन्यवाद, मैं अपने समाधान के बारे में कुछ प्रतिक्रिया देना चाहूंगा। मुझे खुशी है कि मुझे इसे काम करने का एक तरीका मिला। वास्तविक श्रेणी के मेटाबॉक्स के माध्यम से अटैचमेंट में श्रेणियां जोड़ना देखना बहुत अच्छा होगा, लेकिन मेरा समाधान पर्याप्त रूप से काम करता है।
रिक कर्रान

जवाबों:


14

संपादित करें: 12/09/2017 इस उत्तर को अधिक समाधान के लिए इस उत्तर को देखें: नई मीडिया लाइब्रेरी के साथ संलग्नकों पर टैक्सोनोमीज़ का उपयोग कैसे करें?

मैं यहाँ अपने सवाल का जवाब देने जा रहा हूँ क्योंकि मैं जो करने की कोशिश कर रहा हूँ उसका हल निकालने में कामयाब रहा हूँ। मैं इस निष्कर्ष पर पहुंचा था कि संलग्नक के लिए श्रेणी मेटाबॉक्स को सक्षम करना संभव नहीं था। हालाँकि, मैंने पाया कि श्रेणियों के लिए एक मूल फ़ील्ड प्राप्त करना काफी आसान था जो संलग्नक पृष्ठ पर जोड़कर उपयोग कर रहा थाregister_taxonomy_for_object_type और add_post_type_support:

add_action('admin_init', 'reg_tax');
function reg_tax() {
   register_taxonomy_for_object_type('category', 'attachment');
   add_post_type_support('attachment', 'category');
}

जोड़ा गया क्षेत्र इस तरह दिखाया गया है:

वैकल्पिक शब्द

यह सिर्फ एक सादा पाठ क्षेत्र है, लेकिन मुझे जो मिला वह यह था कि आप किसी मौजूदा श्रेणी का नाम टाइप कर सकते हैं और इसे तब सफलतापूर्वक सहेजा जा सकेगा जब अटैचमेंट को अपडेट किया गया था (केवल एक अजीब व्यवहार यह है कि यह सामान्य संस्करण के बजाय वापस आ गया है बचत के बाद स्लग)।

एक बार जब मुझे एहसास हुआ कि मैं इस तरह से श्रेणियों को बचा सकता हूं तो मुझे लगा कि मैं सभी उपलब्ध श्रेणियों की एक सूची चेकबॉक्स के रूप में प्राप्त कर सकता हूं और उन लोगों की जांच कर सकता हूं जो चुने गए थे। फिर मैंने जाँच की गई श्रेणियों के मूल्यों को हड़पने के लिए jQuery का एक सा उपयोग किया और सभी श्रेणियों के स्लग को श्रेणी फ़ील्ड में डाल दिया। इसे और भी अधिक सहज बनाने के लिए मैंने तब सीएसएस की एक सरल बिट का उपयोग किया जिसमें श्रेणी क्षेत्र को समाहित करने के लिए तालिका पंक्ति छिपाई गई थी, इसलिए आप सभी कभी भी चेकबॉक्स को देखते हैं, जैसे:

वैकल्पिक शब्द

अब जब मैं छवि अनुलग्नकों में श्रेणियां जोड़ सकता हूं तो मैं कुछ का उपयोग कर सकता हूं:

get_posts('post_type=attachment&category_name=timber-fixed-windows')

और श्रेणीबद्ध छवियों को एक पृष्ठ में खींचें! वास्तव में मैं जो करने की उम्मीद कर रहा था, मुझे नहीं लगता था कि ऐसा करने का कोई तरीका है लेकिन मुझे खुशी है कि मैं कुछ जानने में कामयाब रहा।

मैंने इसे एक प्लगइन में बदल दिया है WOS Media Categoriesजिसे मैंने अपनी वेबसाइट Suburbia.org.uk से डाउनलोड करने के लिए उपलब्ध कराया है , मुझे आशा है कि यह किसी और के लिए उपयोग हो सकता है! उन लोगों के लिए फिर से धन्यवाद जिन्होंने इस और अन्य प्रश्नों पर टिप्पणी की है जो मैंने यहां पूछे हैं जो इसे पता लगाने में मदद करते हैं!

अपडेट: मैंने श्रेणियों को फ्लैश बल्क अपलोडर का उपयोग करके अपलोड की गई छवियों को अपलोड करने में सक्षम करने के लिए एक फिक्स जोड़ा है।


मैं उस चीज से jQuery का उपयोग करके थोड़ा परेशान हूं जिसे डेटा अखंडता की आवश्यकता है। मुझे पूरा यकीन है कि यह सब सर्वर पर किया जा सकता है। मैं जल्द ही इसे देखने की कोशिश करूंगा।
माइकस्किंकल

1
@ माइक: हाँ, मैं उस बारे में थोड़ा चिंतित हूँ। हालांकि, ऐसे कई उदाहरण हैं जहां जावास्क्रिप्ट शामिल है इसलिए मैंने फैसला किया कि मैं उस समाधान से काफी खुश हूं। हालांकि वैकल्पिक तरीकों पर कुछ प्रतिक्रिया पाने के लिए निश्चित रूप से खुश हैं। जब मुझे मौका मिलता है तो मैं इसे वर्डप्रेस रिपॉजिटरी में सबमिट करना चाहूंगा, हालांकि मैं इंतजार कर सकता हूं और देख सकता हूं कि आप क्या लेकर आए हैं। धन्यवाद!
रिक कर्रान

@ माइक या @ रिक - क्या आप संभवतः एक और उदाहरण प्रदान कर सकते हैं जो मीडिया को जोड़ने पर स्वचालित रूप से किसी विशिष्ट श्रेणी को पोस्ट असाइन कर सकता है? श्रेणी संघ उस पोस्ट प्रकार पर आधारित होगा जो वह कोड पर है या कोड के माध्यम से मैन्युअल रूप से सेट है?
NetConstructor.com

@ NetConstructor.com - मेरे लिए एक और सवाल की तरह लगता है ...
माइक ऑंचेल

@ netconstructor.com: हां, मुझे एक और बड़ा सवाल लगता है!
रिक कर्रान

4

बस इसे बनाया, जो फार्म क्षेत्र में हर्की-जर्क जावास्क्रिप्ट लिंकेज के लिए एक संपूर्ण समाधान है। चूँकि आपके चेकबॉक्स के मूल्य सबमिट होने पर $ _POST के साथ पारित हो जाते हैं, आप बस add_image_attachment_fields_to_save फ़िल्टर के दौरान उन्हें हड़प सकते हैं और पोस्ट ऑब्जेक्ट की शर्तें सेट कर सकते हैं।

function register_custom_taxonomies() {
    $labels = array(
        'name' => _x( 'Image Formats', 'taxonomy general name' ),
        'singular_name' => _x( 'Image Format', 'taxonomy singular name' ),
        'search_items' =>  __( 'Search Formats' ),
        'all_items' => __( 'All Formats' ),
        'parent_item' => __( 'Parent Format' ),
        'parent_item_colon' => __( 'Parent Format:' ),
        'edit_item' => __( 'Edit Format' ), 
        'update_item' => __( 'Update Format' ),
        'add_new_item' => __( 'Add New Format' ),
        'new_item_name' => __( 'New Format Name' ),
        'menu_name' => __( 'Image Format' )
    );
    $capabilities = array(
        'manage_terms' => 'nobody',
        'edit_terms' => 'nobody',
        'delete_terms' => 'nobody'
    );
    $args = array(
        'public' => false,
        'hierarchical' => true,
        'labels' => $labels,
        'capabilities' => $capabilities,
        'show_ui' => false,
        'query_var' => 'image-format',
        'rewrite' => false
    );
    register_taxonomy('image-format', array('attachment'), $args);
}
add_action( 'init', 'register_custom_taxonomies', 1);

function add_media_categories($fields, $post) {
    $categories = get_categories(array('taxonomy' => 'image-format', 'hide_empty' => 0));
    $post_categories = wp_get_object_terms($post->ID, 'image-format', array('fields' => 'ids'));
    $all_cats .= '<ul id="media-categories-list" style="width:500px;">'; 
    foreach ($categories as $category) {
        if (in_array($category->term_id, $post_categories)) {
            $checked = ' checked="checked"';
        } else {
            $checked = '';  
        }
        $option = '<li style="width:240px;float:left;"><input type="checkbox" value="'.$category->category_nicename.'" id="'.$post->ID.'-'.$category->category_nicename.'" name="'.$post->ID.'-'.$category->category_nicename.'"'.$checked.'> ';
        $option .= '<label for="'.$post->ID.'-'.$category->category_nicename.'">'.$category->cat_name.'</label>';
        $option .= '</li>';
        $all_cats .= $option;
    }
    $all_cats .= '</ul>';

    $categories = array('all_categories' => array (
            'label' => __('Image Formats'),
            'input' => 'html',
            'html' => $all_cats
    ));
    return array_merge($fields, $categories);
}
add_filter('attachment_fields_to_edit', 'add_media_categories', null, 2);

function add_image_attachment_fields_to_save($post, $attachment) {
    $categories = get_categories(array('taxonomy' => 'image-format', 'hide_empty' => 0));
    $terms = array();
    foreach($categories as $category) {
        if (isset($_POST[$post['ID'].'-'.$category->category_nicename])) {
            $terms[] = $_POST[$post['ID'].'-'.$category->category_nicename];        
        }
    }
    wp_set_object_terms( $post['ID'], $terms, 'image-format' );
    return $post;
}
add_filter('attachment_fields_to_save', 'add_image_attachment_fields_to_save', null , 2);

(ध्यान दें कि मैं एक कस्टम टैक्सोनॉमी का उपयोग कर रहा हूं, न कि श्रेणियों का, इसलिए आपको अपने चेकबॉक्स सेट करते समय उसी श्रेणी से मिलान करने के लिए $ श्रेणियां सरणी को बदलना होगा)

शबाम, शब्बोझी। का आनंद लें।


आपके add_image_attachment_fields_to_save फ़ंक्शन को अंत में $ पोस्ट वापस करने की आवश्यकता है। wp_set_object_terms( $post['ID'], $terms, 'image-format' ); return $post;। और आपके द्वारा पोस्ट की गई स्क्रिप्ट register_custom_taxonomies को निष्पादित नहीं करती है। लेकिन वैसे भी अच्छी स्क्रिप्ट। भविष्य में इसका उपयोग जरूर करेंगे!
रोब वर्म

ओह उफ़, मैंने यह सोचकर कि मैंने सुविधाजनक किया जा रहा था, एक साथ इसे सिल दिया। मैं इसे एक सेकंड में यहाँ ठीक कर दूँगा। वापसी पर अच्छी बात है, हालांकि, मुझे इससे कोई परेशानी नहीं थी।
ड्रू ग्रेले

1

यदि आप वर्डप्रेस की डिफ़ॉल्ट श्रेणी बॉक्स का उपयोग करना चाहते हैं तो यह मुश्किल / जटिल है। एक बात के लिए, मेटाबॉक्स आउटपुट को वापस नहीं करता है, यह सिर्फ इसे गूँजता है। उस के शीर्ष पर, यह आपको सही इनपुट फ़ील्ड नाम नहीं देगा, इसलिए यह नहीं बचाएगा। एक विचार एक का उपयोग करने के लिए हो सकता है jQuery यूआई स्वतः पूर्ण टैग बॉक्स की कार्यक्षमता को दोहराने के लिए ।

हालाँकि, यदि आप मीडिया संपादक के क्षेत्रों के साथ खेलना चाहते हैं, तो आप हुक कर सकते हैं 'attachment_fields_to_edit' की सरणी को और संपादित हैं। फ़िल्टर कॉलबैक पर दो तर्क देता है: पहला तर्क फ़ील्ड्स का सरणी है, दूसरा अनुलग्नक पोस्ट ऑब्जेक्ट है। अधिक जानकारी के लिए यहां देखें:

http://phpxref.ftwr.co.uk/wordpress/nav.html?wp-admin/includes/media.php.source.html#l1025


धन्यवाद, मैं देख लेता हूँ attachment_fields_to_editऔर देखता हूँ कि कैसे जाता है।
रिक कर्रान

1

मैंने एक प्रारंभिक बिंदु के रूप में @ रिकक्रान्स WOS मीडिया श्रेणियों का उपयोग करके एक प्लगइन बनाया है। हालाँकि, WOS Media श्रेणियाँ, अन्य प्लगइन्स की तरह, जो मीडिया को श्रेणी समर्थन जोड़ते हैं, वास्तव में एक मेटाबॉक्सी नहीं जोड़ते हैं, मैंने बस यही किया है।

संपूर्ण दृश्य

इसके आवश्यक रूप से पोस्ट और पेज पर मेटाबोक्स को सरल बनाया गया है, लेकिन मैंने एक फ़िल्टरिंग क्षमता शामिल की है जो इसे उपयोग करना आसान बनाता है।

फिल्टर करने योग्य श्रेणियां

मैं वास्तव में पूरी श्रेणी का मेटाबोक्स उत्पन्न कर रहा हूं जिसे आप पृष्ठों और पोस्टों पर देखते हैं, लेकिन बिट्स को छिपाते हैं जो स्टाइल की कमी और लापता जावास्क्रिप्ट दोनों के कारण मीडिया पेज पर काम नहीं करते हैं।

मैं किसी के भी विचारों का स्वागत करता हूं कि किसी को भी मेटाबॉक्स को पूरी तरह से कार्यात्मक बनाने के लिए हो सकता है - कुछ ऐसा जो मैं बाद के संस्करण में करने का इरादा रखता हूं।


0

महान प्लगइन रिक - बहुत उपयोगी।

यदि आप ऑनलोड लोड करने के लिए बाइंड करने के बजाय ऑनक्लिक ट्रिगर इनलाइन को स्थानांतरित करते हैं (और कुछ अन्य मामूली बदलाव करते हैं), तो यह फ्लैश बल्क अपलोडर पर भी काम करेगा। वर्तमान संस्करण के साथ फ्लैश jQuery लोड घटना के बाद लोड होता है ताकि ऑब्जेक्ट अभी तक मौजूद न हों।

संशोधित js:

 function wos_category_click(cat){
    var container = jQuery(cat).closest("tbody");
    var cat_checked = jQuery(container).find("tr.all_categories input:checked");
    var cat_arr = jQuery(cat_checked).map(function() {
        return jQuery(this).val();
    }).get().join();
    jQuery(container).find("tr.category > td.field > input.text").val(cat_arr);
}

php फ़ाइल में इनपुट पर onclick जोड़ें:

<input type="checkbox" onclick="wos_category_click(this)" class="wos-categories-cb"....

css फ़ाइल में बल्क अपलोडर फ़ॉर्म आईडी जोड़ें:

form#media-single-form tr.category,form#file-form tr.category {
display:none; 

}


धन्यवाद djbokka! मैंने अब उस कोडबेस को ठीक कर दिया है, मैंने प्लगइन फ़ाइलों को अपडेट किया है जो कि मेरी वेबसाइट से suburbia.org.uk/page/projects.html#wos_media_categories
रिक कर्रान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.