Yazı başlıkları listesinden otomatik tamamlama veya otomatik önerme


13

Bir (arama) formda otomatik tamamlama veya otomatik önerme işlevine sahip olmak istiyorum:

Bir kullanıcı yazmaya başladığında, eşleşen metne sahip yayın başlıkları önerir.

Ayrıca her özel yazı ile ilgili sakladığım bazı meta verileri (bir sayı) görüntülemek istiyorum. Misal:

"A" yazarsam, "Elmalar (13), Aardvarklar (51), Astronotlar (21)" vb. Önermektedir.


Meta alanın adı nedir? Lütfen meta alanını tam olarak nasıl eklediğinizi gösteren kodu ekleyin . Teşekkürler.
kaiser

Meta alanının özel olarak eklenen bir meta meta alanı (meta kutu ekleyerek) veya get_post_meta (iirc) ile erişilebilen özel bir yazı var olduğu varsayımını yaptım
Barry Carlyon

Aslında meta alanı henüz eklemedim.
marctain

Yanıtlar:


17

Evet bu mümkün.

WordPress ile gelen jQuery Otomatik Öneri'yi kullanabilirsiniz http://codex.wordpress.org/Function_Reference/wp_enqueue_script

Bununla Ajax URL işleyicisine Ajax araması yapan bir form yazabilirsiniz. Hangi üzerine işlem ekleyebilirsiniz. http://codex.wordpress.org/AJAX_in_Plugins

Böylece arama ajax yapabilirsiniz ve daha sonra eylem tarafında sadece başlıkları eşleştirmek için bir get_posts veya bir ham sql Sorgu gerçekleştirebilirsiniz. Ve gerekli olanı geri getirin.

Kısa sürede zaman alırsam tam kod çözümü yazabilirim. Ancak bunun büyük kısmı, aramaya güç sağlamak için bir eklentidir.

Düzenleme: İşte başlıyoruz, böyle bir şey yapmalı, test etmedim sadece kafamın üstünde yazdı. Güncelleme: Girilen metinden, özel yayın türüne ve yalnızca yayınlanan yayınlara göre daralt

2012-11-21 Düzenleme: kod örneğinde güncellenmiş yazım hatası.

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

Vay canına, teşekkürler Barry! Bir koşuşturma vereceğim, bu işlevlere giriyor. Php, evet? Gerekli parçaları değiştireceğim ve ne verdiğini göreceğim
marctain

2
Teorik olarak evet, fonksiyonlara. Php. Ben bir eklenti içinde sopa böylece onun yolumdan. Doğruca function.php dosyasına giderse, bazı optimizasyonlar yapılabilir, bu nedenle bu kodlardan bazıları zaten function.php dosyasında bulunan işlevlere uygulanabilir (temaya elbette bağlıdır)
Barry Carlyon

Çalışıyor .. neredeyse! Özel bir yazı tipinden olmasını istediğimi belirtmeliydim,
sorumu

Like_escape içerecek şekilde güncellendi. Başlangıçtaki ilk harfle başlayan yazıların nereden başlayacağını araştırmak istediği için başlangıçta% kullanmıyorum. Küresel bir maç değil. Çalışma kodum $ _REQUEST ['q'] ile ve jQuery önerisine uygulanan seçenek yok. Q arama motorlarının kullandığı öykünür.
Barry Carlyon

@BarryCarlyon Lütfen her küçük şeyi düzenlemeyin. 10 düzenlemeye ulaşırsanız, otomatik olarak bir "topluluk wiki'sine" dönüştürülür ve tüm destek puanlarını kaybedersiniz. Ve daha fazla kullanıcıya ihtiyacımız var, bu da iyi cevaplar ekliyor ve min.-nr. düzenleme, wiki ekleme, vb. gibi görevleri yapmak için itibarın Oh, ve exit;her zaman daha hızlı die();:)
kaiser
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.