Completar automaticamente ou sugerir automaticamente a partir da lista de títulos das postagens

12

Eu quero ter uma função de preenchimento automático ou sugestão automática em um formulário (de pesquisa):

Quando um usuário começa a digitar, ele sugere que os títulos dos posts tenham texto correspondente.

Também gostaria que ele exibisse alguns meta-dados (um número) que armazenei relacionados a cada postagem personalizada. Exemplo:

Se eu digitar "A", sugiro "Maçãs (13), Aardvarks (51), Astronautas (21)", etc.

    
por marctain 15.07.2012 / 18:05

1 resposta

16

Sim, isso é possível.

Você pode usar o jQuery Auto Suggest, que está incluído no WordPress enlace

Com isso, você pode escrever um formulário que faça uma pesquisa do Ajax no manipulador de URLs do Ajax. Que você pode add_action para. enlace

Para que você possa pesquisar ajax e, em seguida, no lado da ação, basta executar um get_posts para corresponder aos títulos ou uma consulta SQL crua. E devolva o que é necessário.

Isso deve ajudar, se eu tiver tempo em breve, posso escrever uma solução completa de código. Mas a maior parte é um plugin inteiro para ajudar a melhorar a pesquisa.

Edit: Aqui vamos nós, algo assim deveria fazer isto, não testei isto há pouco escreveu isto fora de topo de minha cabeça. Atualização: Escape do texto digitado, limitado por tipo de postagem personalizado e somente para postagens publicadas

2012-11-21 Editar: erro de digitação atualizado no exemplo de código.

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();
}
    
por Barry Carlyon 15.07.2012 / 18:39