Tự động hoàn thành hoặc tự động đề xuất từ ​​danh sách tiêu đề bài


13

Tôi muốn có chức năng tự động hoàn thành hoặc tự động đề xuất trên biểu mẫu (tìm kiếm):

Khi người dùng bắt đầu nhập, nó sẽ gợi ý tiêu đề bài có văn bản phù hợp.

Tôi cũng muốn nó hiển thị một số dữ liệu meta (một số) mà tôi đã lưu trữ liên quan đến mỗi bài đăng tùy chỉnh. Thí dụ:

Nếu tôi gõ "A", nó gợi ý "Táo (13), Aardvarks (51), Phi hành gia (21)", v.v.


Tên của trường meta là gì? Vui lòng thêm mã hiển thị chính xác cách bạn đã thêm trường meta. Cảm ơn.
kaiser

Tôi đã đưa ra giả định trường meta là trường meta bài được thêm cụ thể (bằng cách thêm hộp meta) hoặc var bài tùy chỉnh, có thể được truy cập bằng get_post_meta (iirc)
Barry Carlyon

Tôi thực sự chưa thêm trường meta nào.
marctain

Câu trả lời:


17

Vâng, điều này là có thể.

Bạn có thể sử dụng Đề xuất tự động jQuery được bao gồm trong WordPress http://codex.wordpress.org/Function_Reference/wp_enqueue_script

Với điều này, bạn có thể viết một biểu mẫu tìm kiếm Ajax cho trình xử lý URL Ajax. Mà bạn có thể add_action lên. http://codex.wordpress.org/AJAX_in_Plugins

Vì vậy, bạn có thể tra cứu ajax và sau đó về phía hành động, bạn chỉ có thể thực hiện một get_posts để khớp với tiêu đề hoặc Truy vấn sql thô. Và trả lại những gì cần thiết.

Điều đó sẽ giúp ích, nếu tôi có thời gian ngắn, tôi có thể viết một giải pháp mã đầy đủ. Nhưng phần lớn của nó là một plugin toàn bộ để giúp cung cấp năng lượng cho việc tra cứu.

Chỉnh sửa: Ở đây chúng tôi đi, một cái gì đó như thế này sẽ làm điều đó, đã không kiểm tra nó chỉ viết nó ra khỏi đầu của tôi. Cập nhật: Thoát khỏi văn bản đã nhập, thu hẹp theo loại bài đăng tùy chỉnh và chỉ các bài đăng được xuất bản

2012-11-21 Chỉnh sửa: cập nhật lỗi chính tả trong mẫu mã.

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

Ồ, cảm ơn Barry! Tôi sẽ cho nó một vòng xoáy, điều này đi vào hàm.php, đúng chứ? Tôi sẽ sửa đổi các phần cần thiết và xem những gì nó mang lại
thúc vào

2
Trong lý thuyết có, vào hàm.php. Tôi sẽ gắn nó vào một plugin để nó tránh xa. Nếu nó đi thẳng vào hàm.php thì có thể thực hiện một số tối ưu hóa, do đó một số mã này có thể được áp dụng cho các hàm đã tồn tại trong hàm.php (tất nhiên phụ thuộc chủ đề)
Barry Carlyon

Nó hoạt động .. gần như! Tôi nên xác định rằng tôi muốn nó thuộc loại bài đăng tùy chỉnh, tôi sẽ chỉnh sửa câu hỏi của mình
marctain

Cập nhật để bao gồm like_escape. Tôi không sử dụng% khi bắt đầu, vì anh ấy muốn tìm kiếm nơi tiêu đề bài viết bắt đầu bằng chữ cái đầu tiên được nhập. Không phải là một trận đấu toàn cầu. Mã làm việc của tôi là với $ _REQUEST ['q'] không có tùy chọn nào được áp dụng cho đề xuất jQuery. Q mô phỏng những gì công cụ tìm kiếm sử dụng.
Barry Carlyon

@BarryCarlyon Xin đừng chỉnh sửa mọi thứ nhỏ nhặt. Nếu bạn đạt tới 10 lần chỉnh sửa, nó sẽ tự động được chuyển thành "wiki cộng đồng" và bạn sẽ mất tất cả các điểm đại diện. Và chúng tôi cần nhiều người dùng hơn, thêm câu trả lời hay và nhận được một phút. danh tiếng để thực hiện các nhiệm vụ như chỉnh sửa, thêm wiki, v.v ... Ồ, và exit;luôn nhanh hơn die();:)
kaiser
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.