게시물 제목 목록에서 자동 완성 또는 자동 제안


13

(검색) 양식에서 자동 완성 또는 자동 제안 기능을 원합니다.

사용자가 입력을 시작하면 일치하는 텍스트가있는 게시물 제목을 제안합니다.

또한 각 사용자 정의 게시물과 관련하여 저장 한 메타 데이터 (숫자)를 표시하고 싶습니다. 예:

"A"를 입력하면 "Apples (13), Aardvarks (51), Astronauts (21)"등을 제안합니다.


메타 필드의 이름은 무엇입니까? 메타 필드를 추가 한 방법을 정확하게 보여주는 코드를 추가하십시오. 감사.
kaiser

메타 필드가 메타 박스 추가에 의해 특별히 추가 된 포스트 메타 필드 또는 get_post_meta (iirc)로 액세스 할 수있는 사용자 정의 포스트 var라고 가정했습니다.
Barry Carlyon

실제로 메타 필드를 아직 추가하지 않았습니다.
marctain

답변:


17

네 가능합니다.

WordPress http://codex.wordpress.org/Function_Reference/wp_enqueue_script에 포함 된 jQuery 자동 제안을 사용할 수 있습니다 .

이를 통해 Ajax URL 핸들러에 대한 Ajax 조회를 수행하는 양식을 작성할 수 있습니다. 추가 할 수있는 작업입니다. http://codex.wordpress.org/AJAX_in_Plugins

따라서 아약스 조회를 수행 한 다음 조치 측에서 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();
}

와, 배리 고마워! 나는 소용돌이를 줄 것이다. 이것은 functions.php에 들어간다. 필요한 부분을 수정하고 그 내용을 살펴
보겠습니다.

2
이론적으로는 functions.php에 있습니다. 플러그인에 꽂아서 방해가되지 않습니다. 만약 그것이 functions.php에 직접 들어가면, 일부 최적화가 수행 될 수 있으므로,이 코드 중 일부는 functions.php에 이미 존재하는 함수에 적용될 수 있습니다 (물론 테마에 따라 다름)
Barry Carlyon

작동합니다. 거의! 나는 그것이 커스텀 포스트 타입이되기를 원한다고 명시 했어야했다. 나는 나의 질문을 편집 할 것이다
marctain

like_escape를 포함하도록 업데이트되었습니다. 그는 처음에 입력 한 첫 글자로 게시물 제목이 시작되는 위치를 검색하려고하기 때문에 시작시 %를 사용하지 않습니다. 전 세계적으로 일치하지 않습니다. 내 작업 코드에는 $ _REQUEST [ 'q']가 있으며 jQuery 제안에 옵션이 적용되지 않습니다. Q는 검색 엔진이 사용하는 것을 에뮬레이트합니다.
Barry Carlyon

@BarryCarlyon 모든 사소한 것을 편집하지 마십시오. 수정 사항이 10 개에 도달하면 자동으로 "커뮤니티 위키"로 변환되어 모든 담당자 포인트를 잃게됩니다. 그리고 우리는 더 많은 사용자가 필요합니다. 편집, 위키 추가 등과 같은 작업을 수행하는 것으로 유명합니다. 아, exit;항상 die();:)
kaiser
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.