पोस्ट टाइटल की सूची से ऑटो-पूर्ण या ऑटो-सुझाव


13

मैं एक (खोज) फ़ॉर्म पर एक ऑटो-पूर्ण या ऑटो-सुझाव समारोह करना चाहता हूं:

जब कोई उपयोगकर्ता टाइप करना शुरू करता है, तो यह ऐसे पोस्ट शीर्षक का सुझाव देता है जिसमें मिलान पाठ होता है।

मैं यह भी चाहूंगा कि मैं कुछ मेटा-डेटा (एक संख्या) प्रदर्शित करूं जिसे मैंने प्रत्येक कस्टम पोस्ट से संबंधित संग्रहीत किया है। उदाहरण:

यदि मैं "ए" टाइप करता हूं, तो यह "सेब (13), एर्डवार्क्स (51), एस्ट्रोनॉट्स (21%), आदि का सुझाव देता है।


मेटा फ़ील्ड का नाम क्या है? कृपया वह कोड जोड़ें जो दिखाता है कि आपने मेटा फ़ील्ड को कैसे जोड़ा है। धन्यवाद।
केसर

मैंने मान लिया है कि मेटा फ़ील्ड एक विशेष रूप से जोड़ा गया पोस्ट मेटा फ़ील्ड (मेटा बॉक्स जोड़कर) या एक कस्टम पोस्ट संस्करण है, जिसे get_post_meta (iirc) के साथ एक्सेस किया जा सकता है
बैरी

मैंने वास्तव में मेटा फ़ील्ड को अभी तक नहीं जोड़ा है।
जूल

जवाबों:


17

हाँ यह संभव है।

आप jQuery ऑटो सुझाव का उपयोग कर सकते हैं जो वर्डप्रेस http://codex.wordpress.org/Function_Reference/wp_enqueue_script के साथ शामिल है

इसके साथ आप एक फॉर्म लिख सकते हैं जो Ajax URL हैंडलर को अजाक्स लुकअप करता है। जिस पर आप add_action कर सकते हैं। http://codex.wordpress.org/AJAX_in_Plugins

तो आप अजाक्स लुकअप कर सकते हैं और फिर एक्शन साइड पर आप सिर्फ टाइटल्स या कच्चे एसक्यूएल क्वेरी से मिलान करने के लिए एक गेट_पोस्ट कर सकते हैं। और जो चाहिए वह लौटाओ।

अगर मुझे शीघ्र ही पूर्ण कोड समाधान लिखने में मदद मिल सकती है, तो मुझे मदद करनी चाहिए। लेकिन इसे देखने के लिए पावर की मदद करने के लिए यह एक पूरा प्लगइन है।

संपादित करें: यहां हम जाते हैं, कुछ ऐसा करना चाहिए, यह परीक्षण नहीं किया है यह सिर्फ मेरे सिर के ऊपर लिखा है। अपडेट: दर्ज किए गए पाठ से बचना, कस्टम पोस्ट प्रकार से संकीर्ण और केवल प्रकाशित पोस्ट के लिए

2012-11-21 संपादित करें: कोड नमूने में अद्यतन टाइपो।

add_action('wp_enqueue_scripts', 'se_wp_enqueue_scripts');
function se_wp_enqueue_scripts() {
    wp_enqueue_script('suggest');
}

add_action('wp_head', 'se_wp_head');
function se_wp_head() {
?>
<script type="text/javascript">
    var se_ajax_url = '<?php echo admin_url('admin-ajax.php'); ?>';

    jQuery(document).ready(function() {
        jQuery('#se_search_element_id').suggest(se_ajax_url + '?action=se_lookup');
    });
</script>
<?php
}

add_action('wp_ajax_se_lookup', 'se_lookup');
add_action('wp_ajax_nopriv_se_lookup', 'se_lookup');

function se_lookup() {
    global $wpdb;

    $search = like_escape($_REQUEST['q']);

    $query = 'SELECT ID,post_title FROM ' . $wpdb->posts . '
        WHERE post_title LIKE \'' . $search . '%\'
        AND post_type = \'post_type_name\'
        AND post_status = \'publish\'
        ORDER BY post_title ASC';
    foreach ($wpdb->get_results($query) as $row) {
        $post_title = $row->post_title;
        $id = $row->ID;

        $meta = get_post_meta($id, 'YOUR_METANAME', TRUE);

        echo $post_title . ' (' . $meta . ')' . "\n";
    }
    die();
}

वाह, धन्यवाद बैरी! मैं इसे एक चक्कर दूंगा, यह कार्य में चला जाता है। मैं आवश्यक भागों को संशोधित और देखें कि यह क्या देता हूँ
marctain

2
सिद्धांत रूप में हां, functions.php में। मैं इसे एक प्लग में चिपका देता हूँ ताकि इसका रास्ता खत्म हो जाए। यदि यह सीधे फ़ंक्शन में चला जाता है। एफपी तो कुछ ऑप्टिमाइज़ेशन किया जा सकता है, इसलिए इस कोड के कुछ कार्यों को लागू किया जा सकता है जो पहले से ही फ़ंक्शन में मौजूद हैं। एफपीपी (पाठ्यक्रम पर निर्भर)
बैरी कार्लाइन

यह काम करता है .. लगभग! मुझे यह निर्दिष्ट करना चाहिए कि मैं यह एक कस्टम-पोस्ट-प्रकार से होना चाहता था, मैं अपना प्रश्न संपादित करूँगा
मार्च

Like_escape शामिल करने के लिए अद्यतन किया गया। मैं शुरू में एक% का उपयोग नहीं कर रहा हूं, क्योंकि वह खोजना चाहता है कि पोस्ट शीर्षक पहले अक्षर के साथ शुरू होता है। वैश्विक मैच नहीं। मेरा वर्किंग कोड $ _REQUEST ['q'] के साथ है, जिसमें jQuery के सुझाव पर कोई विकल्प नहीं है। क्यू क्या खोज इंजन का उपयोग अनुकरण करता है।
बैरी कार्लाइन

@BarryCarlyon कृपया हर छोटी चीज़ को संपादित न करें। यदि आप 10 संपादन पर पहुंचते हैं तो यह स्वचालित रूप से "समुदाय विकि" में बदल जाएगा और आप सभी प्रतिनिधि बिंदुओं को ढीला कर देंगे। और हमें अधिक उपयोगकर्ताओं की आवश्यकता है, जो अच्छे उत्तर जोड़ते हैं और एक min.-nr मिलता है। प्रतिष्ठा करने जैसे कार्यों को संपादित करना, विकी को जोड़ना, आदि ओह, और exit;हमेशा की तुलना में तेज है die();:)
kaiser
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.