Autouzupełnianie lub automatyczne sugerowanie z listy tytułów postów


13

Chcę mieć funkcję autouzupełniania lub autosugestii w formularzu (wyszukiwania):

Gdy użytkownik zaczyna pisać, sugeruje tytuły postów zawierające pasujący tekst.

Chciałbym również, aby wyświetlał niektóre metadane (liczbę), które zapisałem, związane z każdym niestandardowym postem. Przykład:

Jeśli wpisuję „A”, sugeruje „Jabłka (13), Aardvarki (51), Astronauci (21)” itp.


Jak nazywa się pole meta? Dodaj kod dokładnie pokazujący sposób dodania pola meta. Dzięki.
— kaiser

Przyjąłem założenie, że pole meta to specjalnie dodane pole meta post (przez dodanie pola meta) lub niestandardowy var post, do którego można uzyskać dostęp za pomocą get_post_meta (iirc)
— Barry Carlyon

Właściwie nie dodałem jeszcze pola meta.
— marzec

Odpowiedzi:


17

Tak, to jest możliwe.

Możesz użyć jQuery Auto Suggest, który jest zawarty w WordPress http://codex.wordpress.org/Function_Reference/wp_enqueue_script

Dzięki temu możesz napisać formularz wyszukujący Ajax w module obsługi Ajax URL. Do którego możesz dodać aktywność. http://codex.wordpress.org/AJAX_in_Plugins

Możesz więc wyszukać ajax, a następnie po stronie akcji możesz po prostu wykonać get_posts, aby dopasować tytuły lub surowe zapytanie SQL. I zwróć to, czego potrzebujesz.

To powinno pomóc, jeśli wkrótce dostanę czas, mogę napisać pełne rozwiązanie dla kodu. Ale większość z nich to cała wtyczka, która wspomaga wyszukiwanie.

Edycja: Proszę bardzo, coś takiego powinno to zrobić, nie przetestowałem tego, po prostu zapisałem to sobie z głowy. Aktualizacja: uniknij wprowadzonego tekstu, zawęź według niestandardowego typu posta i tylko do opublikowanych postów

21.11.2012 Edycja: zaktualizowana literówka w próbce kodu.

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, dzięki Barry! Dam mu wir, to idzie do funkcji. Php, tak? Zmodyfikuję niezbędne części i zobaczę, co to daje
— marzec

2
Teoretycznie tak, w funkcje.php. Włożyłbym to do wtyczki, żeby nie przeszkadzało. Jeśli przejdzie bezpośrednio do functions.php, można dokonać optymalizacji, więc część tego kodu można zastosować do funkcji, które już istnieją w functions.php (oczywiście zależne od tematu)
— Barry Carlyon

Działa .. prawie! Powinienem był sprecyzować, że chcę, żeby pochodziło z niestandardowego typu posta,
— zredaguję

Zaktualizowano, aby zawierał podobną wersję. Nie używam% na początku, ponieważ chce wyszukać, gdzie zaczynają się tytuły postów od pierwszej wprowadzonej litery. Nie jest to globalny mecz. Mój kod działa z $ _REQUEST ['q'] bez żadnych opcji zastosowanych do sugestii jQuery. Q emuluje, z czego korzystają wyszukiwarki.
— Barry Carlyon,

@BarryCarlyon Proszę nie edytować każdej drobnej rzeczy. Jeśli osiągniesz 10 edycji, zostanie ona automatycznie przekształcona w „wiki społeczności” i stracisz wszystkie punkty powtórzeń. Potrzebujemy więcej użytkowników, którzy dodadzą dobre odpowiedzi i dostaną min.-nr. reputacji robić zadań, takich jak edycja, dodawanie wiki itp Aha, i exit;jest zawsze szybszy niż die();:)
— Kaiser
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.