कस्टम फ़ील्ड को श्रेणी में जोड़ें


22

मैं एक निश्चित श्रेणी में कस्टम फ़ील्ड जोड़ना चाहूंगा। एक श्रेणी में केवल निम्नलिखित क्षेत्र होते हैं:

नाम:

स्लग:

जनक:

विवरण:

चूंकि मेरे पास एक टीवी श्रृंखला साइट है, मैं कुछ और फ़ील्ड जोड़ना चाहता हूं, मैं कुछ ऐसा चाहता हूं, जब मैं एक नई श्रेणी (श्रेणी = श्रेणी) बनाता हूं

नाम:

कलाकार:

साल:

प्रकार:

शैली:

सारांश:

स्लग:

जनक:

विवरण:

और इसी तरह...

कृपया कोई मदद? अग्रिम में धन्यवाद।



यहाँ एक धोखा शीट है जो मैं ऐसा करते समय उपयोग करता हूं। यह एक छोटी सूची में संबंधित कार्रवाई हुक और फिल्टर है। charlestonsw.com/…
लांस क्लीवलैंड

जवाबों:


24

मैंने एक हफ़्ते पहले कैसे इसके बारे में पोस्ट किया http://en.bainternet.info/2011/wordpress-category-extur-ields

उम्मीद है की यह मदद करेगा।

ओहद।


यहां पोस्ट का विवरण दिया गया है:

पहली चीज जो हमें करने की ज़रूरत है वह है हुक एडिट_केरेटरी_फॉर्म_फिल्ड्स का उपयोग करके श्रेणी को फ़ॉर्म संपादित करने के लिए अतिरिक्त फ़ील्ड जोड़ना और हम एक साधारण फ़ंक्शन का उपयोग करते हैं जो अतिरिक्त फ़ील्ड का प्रिंट आउट करेगा।

<?php
//add extra fields to category edit form hook
add_action ( 'edit_category_form_fields', 'extra_category_fields');

//add extra fields to category edit form callback function
function extra_category_fields( $tag ) {    //check for existing featured ID
    $t_id = $tag->term_id;
    $cat_meta = get_option( "category_$t_id");
?>
<tr class="form-field">
<th scope="row" valign="top"><label for="cat_Image_url"><?php _e('Category Image Url'); ?></label></th>
<td>
<input type="text" name="Cat_meta[img]" id="Cat_meta[img]" size="3" style="width:60%;" value="<?php echo $cat_meta['img'] ? $cat_meta['img'] : ''; ?>"><br />
        <span class="description"><?php _e('Image for category: use full url with '); ?></span>
    </td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra1"><?php _e('extra field'); ?></label></th>
<td>
<input type="text" name="Cat_meta[extra1]" id="Cat_meta[extra1]" size="25" style="width:60%;" value="<?php echo $cat_meta['extra1'] ? $cat_meta['extra1'] : ''; ?>"><br />
        <span class="description"><?php _e('extra field'); ?></span>
    </td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra2"><?php _e('extra field'); ?></label></th>
<td>
<input type="text" name="Cat_meta[extra2]" id="Cat_meta[extra2]" size="25" style="width:60%;" value="<?php echo $cat_meta['extra2'] ? $cat_meta['extra2'] : ''; ?>"><br />
        <span class="description"><?php _e('extra field'); ?></span>
    </td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra3"><?php _e('extra field'); ?></label></th>
<td>
        <textarea name="Cat_meta[extra3]" id="Cat_meta[extra3]" style="width:60%;"><?php echo $cat_meta['extra3'] ? $cat_meta['extra3'] : ''; ?></textarea><br />
        <span class="description"><?php _e('extra field'); ?></span>
    </td>
</tr>
<?php
}

जैसा कि आप देख सकते हैं कि मैंने 4 नए फ़ील्ड जोड़े हैं और उनमें से सभी एक सरणी Cat_meta [कुंजी] में हैं, क्योंकि हम केवल प्रत्येक फ़ील्ड के लिए एक पंक्ति के बजाय श्रेणी के सभी अतिरिक्त फ़ील्ड को सहेजने के लिए विकल्प तालिका में पंक्ति बनाते हैं।

एक उपयोगकर्ता द्वारा श्रेणी संपादित फ़ॉर्म सबमिट करने के बाद, डेटाबेस में अतिरिक्त फ़ील्ड्स को सहेजने की आवश्यकता है, और हम "edit_category" का उपयोग एक फ़ंक्शन के साथ करते हैं जो सबमिट किए गए प्रत्येक फ़ील्ड के माध्यम से चलेगा और उन्हें update__ionion फ़ंक्शन का उपयोग करके डेटाबेस में सम्मिलित करेगा। , इस तरह:

<?php
// save extra category extra fields hook
add_action ( 'edited_category', 'save_extra_category_fileds');

// save extra category extra fields callback function
function save_extra_category_fileds( $term_id ) {
    if ( isset( $_POST['Cat_meta'] ) ) {
        $t_id = $term_id;
        $cat_meta = get_option( "category_$t_id");
        $cat_keys = array_keys($_POST['Cat_meta']);
            foreach ($cat_keys as $key){
            if (isset($_POST['Cat_meta'][$key])){
                $cat_meta[$key] = $_POST['Cat_meta'][$key];
            }
        }
        //save the option array
        update_option( "category_$t_id", $cat_meta );
    }
}

ऊपर दिए गए कोड से आप देख सकते हैं कि हमने जो अतिरिक्त फ़ील्ड जोड़े हैं, वे सभी डेटाबेस के विकल्प तालिका में 'श्रेणी_आईडी' नाम से संग्रहीत हैं, जहां आईडी उस विशिष्ट श्रेणी की आईडी है जिसे हमने अभी संपादित किया है और इसका मतलब है कि हम इसे कॉल कर सकते हैं get_option फ़ंक्शन का उपयोग करके हमारे प्लगइन्स या थीम फ़ाइलों में डेटा आसानी से।

उदाहरण के लिए मेरी श्रेणी आईडी 25 है तो मेरा कोड जैसा दिखेगा

<?php $cat_data = get_option('category_25'); ?>

जैसा कि मैंने शुरुआत में कहा था, मुझे प्रत्येक श्रेणी के लिए एक अलग छवि प्रदर्शित करने की आवश्यकता है, इसलिए उस स्थिति में मैंने अपने विषय की श्रेणी में कोड की इन कुछ पंक्तियों को जोड़ दिया। ठीक उस श्रेणी के शीर्षक के बाद जो शीर्षक को प्रदर्शित करता है:

<?php
//first get the current category ID
$cat_id = get_query_var('cat');

//then i get the data from the database
$cat_data = get_option("category_$cat_id");

//and then i just display my category image if it exists
if (isset($cat_data['img'])){
    echo '<div class="category_image"><img src="'.$cat_data['img'].'"></div>';
}

अच्छा और आसान और हम सब किया जाता है। परिणाम इस तरह दिखना चाहिए:

यहाँ छवि विवरण दर्ज करें


4
कृपया इस उत्तर में अपने ब्लॉग की मुख्य सामग्री पोस्ट करें। लिंक रोट हो सकता है, यहां तक ​​कि अपने स्वयं के ब्लॉग पर भी।
जिआंगो रेनहार्ड्ट

1
यह 2011 के दोस्त पर जवाब दिया गया था :)
बैनेटर्न

1
आपकी बात?
Django रेनहार्ड्ट

4
यदि आपको नहीं लगता कि इस उत्तर का कोई मूल्य है, तो इसे हटा दिया जाना चाहिए ... हालाँकि इस प्रश्न पर 16,000 से अधिक बार देखा गया है। मुझे लगता है कि यह सवाल लोगों के लिए उपयोगी है, इसकी उम्र के बावजूद, और यह उत्तर प्रश्न में लिंक से विवरणों को शामिल करके बेहतर होगा।
जिआंगो रेनहार्ड्ट

4
... जब आप लोग इस पर बहस करने में व्यस्त थे (एक साल पहले), तो मुझे जवाब में सब कुछ लाने में 5 मिनट से भी कम समय लगा। यह आसान है ...
MxmastaMills

18

वर्डप्रेस 4.4 के अनुसार, add_term_meta () , update_term_meta () और get_term_meta () फ़ंक्शन जोड़े गए हैं। इसका मतलब यह है कि MxmastaMills द्वारा प्रदान किए गए कोड को बहुत कम हैसी दृष्टिकोण का उपयोग करने के लिए अपडेट किया जा सकता है।

यहाँ मेरा यह अद्यतन है। केवल एक फ़ील्ड है जैसा कि मैं एक कस्टम शीर्षक जोड़ना चाहता था, लेकिन यह उन सभी क्षेत्रों के लिए समान काम करेगा जिन्हें आप जोड़ना चाहते हैं।

function addTitleFieldToCat(){
    $cat_title = get_term_meta($_POST['tag_ID'], '_pagetitle', true);
    ?> 
    <tr class="form-field">
        <th scope="row" valign="top"><label for="cat_page_title"><?php _e('Category Page Title'); ?></label></th>
        <td>
        <input type="text" name="cat_title" id="cat_title" value="<?php echo $cat_title ?>"><br />
            <span class="description"><?php _e('Title for the Category '); ?></span>
        </td>
    </tr>
    <?php

}
add_action ( 'edit_category_form_fields', 'addTitleFieldToCat');

function saveCategoryFields() {
    if ( isset( $_POST['cat_title'] ) ) {
        update_term_meta($_POST['tag_ID'], '_pagetitle', $_POST['cat_title']);
    }
}
add_action ( 'edited_category', 'saveCategoryFields');

2
ध्यान देने योग्य कुछ बातें: edited_categoryहुक tag_IDमें, $_POSTसरणी में होगी , अंदर नहीं $_GET। इसके अलावा add_term_meta, वास्तव में एक संभावित पुराने को ओवरराइड करने के बजाय एक नई प्रविष्टि जोड़ देगा। update_term_metaइसके बजाय उपयोग करें ।
मार्टिन दिमित्रोव

@MartinDimitrov क्या आप संपादन बटन पर क्लिक करके ल्यूक-सिमन्स के जवाब को ठीक कर सकते हैं? इस तरह से हर कोई उपलब्ध सर्वोत्तम कोड का उपयोग कर सकता है, यहां तक ​​कि जो बहुत अच्छी तरह से कोड नहीं करता है (यहां डिजाइनर!)। धन्यवाद!
ह्यूगो

1
यह फॉर्म में डेटा सेव नहीं करता है
Dev

@ क्या यह डेटा बचाता है, यह सिर्फ तब तक नहीं दिखाता जब तक आप दूसरी पंक्ति में $ _POST से $ _GET नहीं बदलते।
बैनस्टो

3

यह कोड कार्य:

add_action ( 'edit_category_form_fields', function( $tag ){
    $cat_title = get_term_meta( $tag->term_id, '_pagetitle', true ); ?>
    <tr class='form-field'>
        <th scope='row'><label for='cat_page_title'><?php _e('Category Page Title'); ?></label></th>
        <td>
            <input type='text' name='cat_title' id='cat_title' value='<?php echo $cat_title ?>'>
            <p class='description'><?php _e('Title for the Category '); ?></p>
        </td>
    </tr> <?php
});
add_action ( 'edited_category', function() {
    if ( isset( $_POST['cat_title'] ) )
        update_term_meta( $_POST['tag_ID'], '_pagetitle', $_POST['cat_title'] );
});

यह अन्य की तुलना में कम अनाड़ी है और मैंने इसे वर्डप्रेस 5.2.2 के साथ सत्यापित किया है
निको गावेंडा

1

पॉल मेनार्ड ने अपने ब्लॉग में मेटा मेटा बनाने और उपयोग करने के तरीके का एक उदाहरण प्रदान किया ...
वर्डप्रेस 3.0 में नए टैक्सोनॉमीज़ के लिए कस्टम मेटा

DB तालिका बनाने या जाँच करने के लिए कोई उदाहरण नहीं है $_POST, इसलिए आपको उन छोटी चीज़ों को स्वयं करने की आवश्यकता होगी, लेकिन यह शीर्ष पर बनाने के लिए एक सभ्य कोड आधार जैसा दिखता है ... :)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.