Lengkapi-otomatis atau saran-otomatis dari daftar judul posting


13

Saya ingin memiliki fungsi lengkapi-otomatis atau saran-otomatis pada formulir (pencarian):

Ketika pengguna mulai mengetik, itu menyarankan judul posting yang memiliki teks yang cocok.

Saya juga ingin menampilkan beberapa meta-data (angka) yang telah saya simpan terkait dengan setiap pos kustom. Contoh:

Jika saya mengetik "A", ini menyarankan "Apel (13), Aardvarks (51), Astronot (21)", dll.


Apa nama bidang meta? Silakan tambahkan kode yang menunjukkan dengan tepat bagaimana Anda menambahkan bidang meta. Terima kasih.
kaiser

Saya telah membuat asumsi bahwa bidang meta adalah bidang meta pos yang ditambahkan secara khusus (dengan penambahan kotak meta), atau pos kustom var, yang dapat diakses dengan get_post_meta (iirc)
Barry Carlyon

Saya sebenarnya belum menambahkan bidang meta.
Marctain

Jawaban:


17

Ya ini mungkin.

Anda dapat menggunakan jQuery Auto Suggest yang disertakan dengan WordPress http://codex.wordpress.org/Function_Reference/wp_enqueue_script

Dengan ini, Anda dapat menulis formulir yang melakukan pencarian Ajax ke penangan URL Ajax. Di mana Anda dapat menambahkan_action. http://codex.wordpress.org/AJAX_in_Plugins

Jadi Anda bisa mencari ajax dan kemudian di sisi tindakan Anda bisa melakukan get_posts untuk mencocokkan judul, atau Kueri sql mentah. Dan kembalikan apa yang dibutuhkan.

Itu akan membantu, jika saya mendapatkan waktu singkat saya mungkin menulis solusi kode lengkap. Tetapi sebagian besar adalah seluruh plugin untuk membantu memberi daya pencarian.

Sunting: Ini dia, sesuatu seperti ini harus dilakukan, belum mengujinya hanya menulisnya di atas kepala saya. Pembaruan: Kabur dari teks yang dimasukkan, persempit berdasarkan jenis posting khusus dan hanya untuk posting yang dipublikasikan

2012-11-21 Edit: kesalahan ketik yang diperbarui dalam sampel kode.

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

Wow, terima kasih Barry! Saya akan berputar, ini masuk ke functions.php, ya? Saya akan memodifikasi bagian-bagian yang diperlukan dan melihat apa yang diberikannya
marctain

2
Secara teori ya, ke functions.php. Saya akan memasukkannya ke dalam plugin agar tidak menghalangi. Jika langsung masuk ke functions.php maka beberapa optimasi dapat dilakukan, sehingga beberapa kode ini dapat diterapkan ke fungsi yang sudah ada di functions.php (tergantung tema saja)
Barry Carlyon

Berhasil .. hampir! Saya seharusnya menentukan bahwa saya menginginkannya dari tipe pos kustom, saya akan mengedit pertanyaan saya
marctain

Diperbarui untuk menyertakan like_escape. Saya tidak menggunakan% di awal, karena dia ingin mencari di mana judul posting dimulai dengan huruf pertama dimasukkan. Bukan pertandingan global. Kode kerja saya adalah dengan $ _REQUEST ['q'] tanpa opsi yang disarankan untuk jQuery. Q meniru apa yang digunakan mesin pencari.
Barry Carlyon

@BarryCarlyon Tolong jangan edit setiap hal kecil. Jika Anda mencapai 10 suntingan maka secara otomatis akan diubah menjadi "komunitas wiki" dan Anda akan kehilangan semua poin rep. Dan kami membutuhkan lebih banyak pengguna, yang menambahkan jawaban yang bagus dan mendapat sedikit.-nr. reputasi untuk melakukan tugas-tugas seperti mengedit, menambahkan wiki, dll. Oh, dan exit;selalu lebih cepat dari die();:)
kaiser
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.