Автозаповнення або автоматичне пропозиція зі списку публікацій публікацій


13

Я хочу мати функцію автоматичного заповнення або автоматичної пропозиції у формі пошуку (пошуку):

Коли користувач починає набирати текст, він пропонує заголовки публікацій, які мають відповідні тексти.

Я також хотів би, щоб він відображав деякі метадані (число), які я зберігав, що стосуються кожної спеціальної публікації. Приклад:

Якщо я набираю "А", це пропонує "Яблука (13), Авардварки (51), Космонавти (21)" тощо.


Як називається мета-поле? Будь ласка, додайте код, який точно показує , як ви додали метаполе. Дякую.
кайзер

Я зробив припущення, що мета-поле - це спеціально додане мета-поле після публікації (шляхом додавання мета-коробки) або спеціальний вар-пост, до якого можна отримати доступ з get_post_meta (iirc)
Баррі Карліон

Я фактично ще не додав метаполя.
marctain

Відповіді:


17

Так, це можливо.

Ви можете використовувати jQuery Auto Suggest, що входить до WordPress http://codex.wordpress.org/Function_Reference/wp_enqueue_script

За допомогою цього ви можете написати форму, яка здійснює пошук Ajax на обробник URL-адреси Ajax. Який ви можете додати запуск на. http://codex.wordpress.org/AJAX_in_Plugins

Таким чином, ви можете здійснити пошук ajax, а потім на стороні дій ви можете просто виконати get_posts для відповідності заголовкам або необроблений sql-запит. І повернути те, що потрібно.

Це може допомогти, якщо я скоро отримаю час, я можу написати повне рішення коду. Але основна частина цього модуля - це цілий плагін, який допомагає виконувати пошук.

Редагувати: Ось ми щось таке повинні робити, не перевіряли, просто записували це з голови. Оновлення: уникнути введеного тексту, звузити за спеціальним типом публікації та лише до опублікованих публікацій

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

Нічого, дякую Баррі! Я дам йому кружляння, це переходить у function.php, так? Я видозмінюю необхідні частини та побачу, що це дає
marctain

2
Теоретично так, у функції.php. Я вставив би його в плагін, щоб його не виходило. Якщо це перейде безпосередньо до function.php, то можна зробити деяку оптимізацію, тому частина цього коду може бути застосована до функцій, які вже є у function.php (тема, звичайно, залежить)
Barry Carlyon

Це працює .. майже! Я повинен був уточнити, що хочу, щоб це було від користувацького типу після публікації, я відредагую своє запитання
marctain

Оновлено, щоб включити схожий_escape. На початку я не використовую%, оскільки він хоче шукати, де заголовки публікацій починаються з першої літери. Не глобальний матч. Мій робочий код має $ _REQUEST ['q'] без опцій, застосованих до пропозиції jQuery. Q емулює те, що використовуються пошукові системи.
Баррі Карліон

@BarryCarlyon Будь ласка, не редагуйте будь-яку незначну річ. Якщо ви досягнете 10 змін, вони автоматично перетворяться на "вікі спільноти", і ви втратите всі точки повторень. І нам потрібно більше користувачів, які додають хороших відповідей і отримують хв. репутації виконувати такі завдання, як редагування, додавання вікі та ін. О, і exit;це завжди швидше, ніж die();:)
kaiser
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.