เติมข้อความอัตโนมัติหรือแนะนำอัตโนมัติจากรายการชื่อโพสต์


13

ฉันต้องการฟังก์ชั่นเติมข้อความอัตโนมัติหรือแนะนำอัตโนมัติในแบบฟอร์ม (ค้นหา):

เมื่อผู้ใช้เริ่มพิมพ์ก็จะแนะนำชื่อโพสต์ที่มีข้อความที่ตรงกัน

ฉันต้องการให้แสดง meta-data (ตัวเลข) ที่ฉันเก็บไว้ซึ่งเกี่ยวข้องกับการโพสต์ที่กำหนดเองแต่ละรายการ ตัวอย่าง:

ถ้าฉันพิมพ์ "A" แนะนำ "แอปเปิ้ล (13), Aardvarks (51), นักบินอวกาศ (21)" เป็นต้น


ชื่อของเขตข้อมูลเมตาคืออะไร กรุณาเพิ่มโค้ดที่แสดงให้เห็นว่าวิธีการที่คุณเพิ่มข้อมูลเมตา ขอบคุณ
ไกเซอร์

ฉันได้สมมติว่าเขตข้อมูลเมตาเป็นเขตข้อมูลโพสต์ที่เพิ่มมาโดยเฉพาะ (โดยการเพิ่มกล่องเมตา) หรือ var โพสต์ที่กำหนดเองซึ่งสามารถเข้าถึงได้ด้วย get_post_meta (iirc)
Barry Carlyon

ฉันยังไม่ได้เพิ่มเขตข้อมูลเมตา
marctain

คำตอบ:


17

ใช่มันเป็นไปได้

คุณสามารถใช้ jQuery Auto Suggest ซึ่งมาพร้อมกับ WordPress http://codex.wordpress.org/Function_Reference/wp_enqueue_script

ด้วยวิธีนี้คุณสามารถเขียนแบบฟอร์มที่ค้นหา Ajax ไปยังตัวจัดการ URL ของ Ajax ซึ่งคุณสามารถ add_action ลงบน http://codex.wordpress.org/AJAX_in_Plugins

ดังนั้นคุณสามารถค้นหา ajax จากนั้นไปที่แอ็คชั่นคุณสามารถทำการ get_posts เพื่อจับคู่ชื่อหรือ sql Query และคืนสิ่งที่จำเป็น

สิ่งนี้น่าจะช่วยได้ถ้าฉันมีเวลาไม่นานฉันอาจจะเขียนรหัสเต็ม แต่ส่วนใหญ่เป็นปลั๊กอินทั้งหมดเพื่อช่วยเพิ่มประสิทธิภาพการค้นหา

แก้ไข: เราไปกันแล้วอย่างนี้ควรทำยังไม่ได้ทดสอบแค่เขียนมันออกมาจากหัวของฉัน อัปเดต: ยกเว้นข้อความที่ป้อนป้อนให้แคบลงตามประเภทโพสต์ที่กำหนดเองและเฉพาะโพสต์ที่เผยแพร่เท่านั้น

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();
}

ว้าวขอบคุณ Barry! ฉันจะให้มันหมุนวนสิ่งนี้เข้าสู่ฟังก์ชั่น PHP ใช่ไหม? ฉันจะแก้ไขส่วนที่จำเป็นและดูว่ามันให้อะไร
marctain

2
ในทางทฤษฎีใช่เข้าไปใน function.php ฉันติดมันในปลั๊กอินเพื่อให้มันออกไป ถ้ามันตรงไปยัง functions.php การเพิ่มประสิทธิภาพบางอย่างสามารถทำได้ดังนั้นโค้ดบางส่วนนี้สามารถนำไปใช้กับฟังก์ชั่นที่มีอยู่แล้วใน function.php (ขึ้นอยู่กับรูปแบบของหลักสูตร)
Barry Carlyon

มันใช้งานได้ .. เกือบ! ฉันควรระบุว่าฉันต้องการให้มาจากโพสต์แบบกำหนดเองฉันจะแก้ไขคำถามของฉัน
marctain

อัปเดตเพื่อรวม like_escape ฉันไม่ได้ใช้% ในตอนเริ่มต้นเนื่องจากเขาต้องการค้นหาตำแหน่งที่โพสต์เริ่มต้นด้วยตัวอักษรตัวแรกที่ป้อน ไม่ใช่การแข่งขันระดับโลก รหัสการทำงานของฉันอยู่ที่ $ _REQUEST ['q'] โดยไม่มีตัวเลือกที่ใช้กับคำแนะนำ jQuery Q เลียนแบบเครื่องมือค้นหาที่ใช้
Barry Carlyon

@BarryCarlyon โปรดอย่าแก้ไขทุกสิ่งเล็กน้อย หากคุณไปถึงการแก้ไข 10 ครั้งระบบจะเปลี่ยนเป็น "วิกิชุมชน" โดยอัตโนมัติและคุณจะเสียคะแนนตัวแทนทั้งหมด และเราต้องการผู้ใช้มากขึ้นซึ่งเพิ่มคำตอบที่ดีและได้รับนาที มีชื่อเสียงในการทำงานต่างๆเช่นการแก้ไขเพิ่มวิกิ ฯลฯ Oh, และexit;อยู่เสมอเร็วกว่าdie();:)
Kaiser
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.