वैकल्पिक रूप से "नया जोड़ें" कस्टम फ़ील्ड ड्रॉपडाउन के विकल्प जोड़ें


10

मैं "नए जोड़ें" कस्टम फ़ील्ड ड्रॉपडाउन में पूर्व-परिभाषित विकल्प कैसे जोड़ सकता हूं?

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

यहां नए कस्टम फ़ील्ड स्वचालित रूप से जोड़ने और दिखाने के दो उदाहरण दिए गए हैं:

  1. वर्डप्रेस: ​​नई पोस्ट पर डिफ़ॉल्ट कस्टम फ़ील्ड जोड़ना
  2. ऑटो कस्टम फ़ील्ड बनाएँ

जो मैं करना चाहता हूं, वह करीब है; मेरा लक्ष्य पूर्व-परिभाषित विकल्पों को "नया जोड़ना" कस्टम दर्ज ड्रॉपडाउन जोड़ना है, लेकिन उन्हें तब तक फ़ील्ड के रूप में दिखाना नहीं है जब तक कि ब्लॉग उन्हें जोड़ता नहीं है।

मैं एक प्लगइन का उपयोग किए बिना यह जानना चाहता हूं कि यह कैसे करना है।


यदि आपको भरे हुए विशिष्ट क्षेत्रों की आवश्यकता है, तो कस्टम मेटाबॉक्स का उपयोग क्यों न करें? इसे आसानी से करने के लिए बहुत सारे विकल्प हैं: मेटा बॉक्स, WP कीमिया, उन्नत कस्टम फील्ड्स, आदि
हेलगेटहाइकिंग

@helgatheviking सुझावों के लिए धन्यवाद! मैं उन विकल्पों की जाँच करूँगा ( मेटा बॉक्स , WP कीमिया , और उन्नत कस्टम फ़ील्ड ); वे बहुत अच्छे लग रहे हैं! ईमानदारी से, मैं ज्यादातर उत्सुक हूं कि बिना प्लगइन का उपयोग किए बिना यह कैसे किया जाए क्योंकि मैं कम से कम रहने की कोशिश कर रहा हूं और हर समस्या के लिए एक प्लगइन का उपयोग करने से बचना चाहिए जिसे मुझे हल करने की आवश्यकता है (मुझे पता है कि कोई एक (यानी, मुझे कैसे तेजी से प्लग-इन का निर्माण कर सकता है) ) सावधान नह) ं है। : D
mhulse

ज़रूर। आप प्लगइन्स के बिना मेटाबॉक्सेज बना सकते हैं (यहां उदाहरणों के बहुत सारे, कोडेक्स या बस googling द्वारा)। लेकिन कभी-कभी प्लगइन्स ठीक वही कर सकते हैं जो आपको चाहिए या आपके जीवन को बहुत सरल बनाते हैं।
हेलगेटहाइकिंग

@helgatheviking धन्यवाद! अच्छी सलाह! मैं इस परियोजना के लिए कितने मेटा बॉक्स की आवश्यकता है इसके आधार पर सड़क के नीचे एक प्लगइन का उपयोग करके समाप्त कर सकता हूं। मदद / लिंक / सलाह के लिए फिर से धन्यवाद, मैं वास्तव में इसकी सराहना करता हूं!
mhulse

FYI करें, मेरे जैसे ही नाव में किसी और के लिए: WP कीमिया शुद्ध रूप से उस दृष्टिकोण से अच्छा लग रहा है जो इसे प्रोग्रामर के लिए बनाया गया है; ऊपर सूचीबद्ध तीन में से, मुझे लगता है कि मुझे उस कारण से WP कीमिया सबसे अच्छा लगता है। अन्य लोग वास्तव में बहुत अच्छे लगते हैं, लेकिन मैं यथासंभव कोड के करीब रहना पसंद करता हूं। हालांकि ध्यान दें कुछ, मुझे यकीन नहीं है कि WP कीमिया, या अन्य, स्टॉक कस्टम फ़ील्ड ड्रॉपडाउन में डिफ़ॉल्ट विकल्प जोड़ सकते हैं। अगर मैं एक, या सभी का उपयोग कर रहा हूं, तो मैं पुष्टि के साथ यहां वापस आऊंगा (या, अगर कोई और पुष्टि कर सकता है, तो वह शांत होगा!)
mululse

जवाबों:


4

आप शुद्ध PHP के साथ ऐसा नहीं कर सकते, क्योंकि फ़ील्ड मौजूदा फ़ील्ड से प्राप्त की जाती हैं, और कोई हुक नहीं है। लेकिन आप जावास्क्रिप्ट का उपयोग कर सकते हैं, जांचें कि क्या पोस्ट प्रकार कस्टम फ़ील्ड का समर्थन करता है और फ़ील्ड पहले से मौजूद नहीं है - और इसे डालें:

<?php # -*- coding: utf-8 -*-
/* Plugin Name: Extend custom fields */

add_action( 'admin_footer-post-new.php', 'wpse_98269_script' );
add_action( 'admin_footer-post.php', 'wpse_98269_script' );

function wpse_98269_script()
{
    if ( ! isset ( $GLOBALS['post'] ) )
        return;

    $post_type = get_post_type( $GLOBALS['post'] );

    if ( ! post_type_supports( $post_type, 'custom-fields' ) )
        return;
    ?>
<script>
    if ( jQuery( "[value='demo_data']" ).length < 1 ) // avoid duplication
        jQuery( "#metakeyselect").append( "<option value='demo_data'>demo_data</option>" );
</script>
    <?php
}

वाह, कमाल! अब कोशिश कर रहा है, धन्यवाद! (+1) मैं एक बार परीक्षण के बाद उत्तर के रूप में चिह्नित करूंगा। जिज्ञासा से बाहर, पीछे क्या अर्थ है # -*- coding: utf-8 -*-? क्या उस टिप्पणी शैली का मतलब वर्डप्रेस के लिए कुछ खास है? धन्यवाद!!!! :)
mhulse

@ मिक्की हल्स # -*- coding: utf-8 -*-एक एन्कोडिंग कुकी है , यह संपादकों को फ़ाइल एन्कोडिंग का पता लगाने में मदद करता है। विम, स्काइट और कुछ अन्य संपादक इसे पढ़ेंगे। मेरे मानक PHP टेम्पलेट का हिस्सा।
FUXIA

अच्छी तरह से काम! मैंने कुछ पोस्ट के साथ अपनी पोस्ट अपडेट की है, जो मैंने आपके कोड से की थी ( <select>यदि यह पहले से मौजूद नहीं था तो मुझे बनाना होगा )। मदद के लिए बहुत धन्यवाद, मैं वास्तव में इसकी सराहना करता हूं !!!!!
mhulse

... और एन्कोडिंग कुकी पर जानकारी के लिए धन्यवाद , मैंने पहले ऐसा नहीं देखा था। बहुत सराहना की।
mhulse

2
function add_predefined_custom_field_names( $query ) {
    $predefined = array(
        'www.cyberxoft.com'
    );

    global $table_prefix;

    $query = preg_replace('/[\r\n\t]/', ' ', $query); //minify by removing all tabs and line breaks
    $query = preg_replace('/\s+/', ' ', $query); //minify by replacing spaces, tabs and carriages to single space

    //SELECT meta_key FROM wp_postmeta GROUP BY meta_key HAVING meta_key NOT LIKE '\\_%' ORDER BY meta_key LIMIT 30
    $pattern = ("/SELECT meta_key FROM ".$table_prefix."postmeta/i");   

    if( preg_match($pattern, $query) ) {
        $keys = '';     

        foreach($predefined as $key){$keys .= (" UNION SELECT '$key' AS meta_key");}        

        $query = preg_replace('/SELECT/i', 'SELECT meta_key FROM (SELECT', $query);
        $query = preg_replace('/FROM wp_postmeta/i', ('FROM wp_postmeta'.$keys), $query);
        $query = preg_replace('/ GROUP BY/i', ')t GROUP BY', $query);
    }

    return $query;
}
add_filter('query', 'add_predefined_custom_field_names');

बस अपने विषयों function.php में कहीं भी उपरोक्त कोड जोड़ें। उपरोक्त कोड जोड़ने के बाद, यह चयन करने के लिए एक विकल्प के रूप में ड्रॉप डाउन में 'www.cyberxoft.com' जोड़ देगा।

यदि आपको यह देखने को मिलता है, तो बस अपने आवश्यक फ़ील्ड नाम के साथ 'www.cyberxoft.com' बदलें और एडमिन पेज को रिफ्रेश करें और जब आप देखें कि ऐसा हुआ तो आगे बढ़ें और जितने जोड़ लें, लेकिन आपको यह याद रखना चाहिए कि केवल 30 ही हो सकते हैं इसे इसके लिए निर्धारित डिफ़ॉल्ट सीमा के रूप में देखा गया।

का आनंद लें...


1

नीचे @toscho द्वारा पोस्ट की गई भयानक स्क्रिप्ट का संशोधित संस्करण है । मैं सिर्फ बनाने की क्षमता की जरूरत है <select>अगर यह पहले से मौजूद नहीं था।

/**
 * Programatically add custom fields.
 *
 * @see http://wordpress.stackexchange.com/questions/98269/programatically-add-options-to-add-new-custom-field-dropdown/
 */

function wpse_98269_script() {

    if (isset($GLOBALS['post'])) {

        $post_type = get_post_type($GLOBALS['post']);

        if (post_type_supports($post_type, 'custom-fields')) {

            ?>

                <script>

                    // Cache:
                    var $metakeyinput = jQuery('#metakeyinput'),
                        $metakeyselect = jQuery('#metakeyselect');

                    // Does the default input field exist and is it visible?
                    if ($metakeyinput.length && ( ! $metakeyinput.hasClass('hide-if-js'))) {

                        // Hide it:
                        $metakeyinput.addClass('hide-if-js'); // Using WP admin class.

                        // ... and create the select box:
                        $metakeyselect = jQuery('<select id="metakeyselect" name="metakeyselect">').appendTo('#newmetaleft');

                        // Add the default select value:
                        $metakeyselect.append('<option value="#NONE#">— Select —</option>');

                    }

                    // Does "demo_data" already exist?
                    if (jQuery("[value='demo_data']").length < 1) {

                        // Add option:
                        $metakeyselect.append("<option value='demo_data'>demo_data</option>");

                    }

                </script>

            <?php

        }

    }

}

add_action('admin_footer-post-new.php', 'wpse_98269_script');
add_action('admin_footer-post.php', 'wpse_98269_script');

मुझे यकीन है कि मेरे जेएस अनुकूलन में सुधार किया जा सकता है, लेकिन यह काम पूरा करता है। यदि मैं परिवर्तन / सुधार करता हूं तो मैं यहां अपडेट कोड वापस पोस्ट करूंगा।

धन्यवाद फिर से @toscho !!!! मैं आपका आभारी हूं। :)

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