Làm cách nào tôi có thể tạo một siêu hộp phân loại với các đề xuất tìm kiếm nhưng không có đầu vào thuật ngữ mới?


8

Tôi đã tự hỏi làm thế nào tôi có thể thiết lập một metabox phân loại trên trang chỉnh sửa bài tương tự như loại "thẻ" (với trường tìm kiếm và đề xuất tự động), nhưng không có quyền thêm thuật ngữ mới.

Vì vậy, ví dụ nếu tôi đánh máy một từ, tôi nhận được đề xuất về các thuật ngữ mà tôi có thể sử dụng từ danh sách thuật ngữ hiện có, nhưng nếu tôi nhập một từ không tồn tại, thì nó sẽ không thêm các thuật ngữ vào danh sách.

BIÊN TẬP

Trên thực tế, những gì tôi đang tìm kiếm chính xác là hoạt động của chức năng "Tìm kiếm" trong Trình chỉnh sửa Menu:

nhập mô tả hình ảnh ở đây

Vì đây là một hành vi cốt lõi của WP, nên có cách nào để sử dụng nó trên các trang chỉnh sửa bài không? Tôi tự hỏi bởi vì các khối này trông giống hệt nhau, cả hai đều có các tab "xem tất cả" và "gần đây nhất", nhưng "tìm kiếm" chỉ có trong Trình chỉnh sửa Menu.


Metabox phân loại được mã hóa cứng với các tab được đặt và không có bất kỳ bộ lọc nào mà người ta có thể nối vào. Bất cứ điều gì như thế này sẽ yêu cầu tạo ra một bản vá hoặc hoàn thành metabox tùy chỉnh.
Azizur Rahman

Câu trả lời:


3

Tôi đã đưa ra một giải pháp cho câu hỏi đầu tiên của bạn. tức là metabox thuế chỉ đề xuất các thuật ngữ từ danh sách thuật ngữ hiện có nhưng không cho phép bạn thêm các thuật ngữ mới. Giải pháp dựa trên jQuery và sửa đổi hành vi mặc định của các thẻ meta (tức là các nguyên tắc phân loại phi truyền thống).

Giới hạn: Hiện tại, nó chỉ cho phép thêm 1 thuật ngữ tại một thời điểm, đó là bạn không thể thêm nhiều thuật ngữ hiện có dưới dạng giá trị được phân tách bằng dấu phẩy.

Mã này cũng có sẵn như là ý chính của github .

Tôi có thể làm trình chỉnh sửa menu như metabox cho phân loại vào cuối tuần tới. ;)

giải pháp dưới đây có thể được sử dụng làm plugin như có thể được sử dụng trong tệp function.php của bạn.

<?php
/*
Plugin Name: No new terms taxonomy meta box
Plugin URI: https://gist.github.com/1074801
Description: Modifies the behavior of the taxonomy box, forbids user from selecting terms that don't belong to taxonomy.
Author: Hameedullah Khan
Author URI: http://hameedullah.com
Version: 0.1
License: Do what ever you like, but don't publish it under your name without improving it.
 */

/*
 * For more information: http://wordpress.stackexchange.com/questions/20921/
 */

// currently works only with single taxonomy which should be defined here
// default is the built-in post_tag
define('CTM_TAXONOMY_NAME', 'post_tag');

function ctm_custom_tax_js() {

    // taxonomy name not defined or set to empty value
    if ( !defined('CTM_TAXONOMY_NAME') || !CTM_TAXONOMY_NAME ) {
        return;
    }
?>
<script type="text/javascript">


    function ctm_custom_termadd_handler(event){
            var tax = '<?php echo CTM_TAXONOMY_NAME; ?>';
            var input = jQuery('#tagsdiv-<?php echo CTM_TAXONOMY_NAME; ?> input.newtag');

            var q = input.val().split(',');

            // if there are more then two values, just add the first one
            // NOTE: because this solution does not support inserting multiple terms
            if (q.length > 1) {
                q = jQuery.trim(q[0]);

                // as we don't support multiple terms
                // set the value of input box to the first term
                input.val(q);
            }

            jQuery.get( ajaxurl + '?action=ajax-tag-search&tax=' + tax + '&q=' + q, function(results) {
                var tokens = results.split('\n');
                for (var i=0; i < tokens.length; i++) {
                    token = jQuery.trim(tokens[i]);
                    if ( token && token == q ) {
                        (function($){
                            tagBox.flushTags( $('#tagsdiv-<?php echo CTM_TAXONOMY_NAME; ?>') );
                        })(jQuery);

                        return true;
                    }
                }

            } );
            event.stopImmediatePropagation();
            return false;
    }

    function ctm_custom_key_handler(event) {
        if (13 == event.which) {
            ctm_custom_termadd_handler(event);
            return false;
        }
        return true;
    }

    jQuery(document).ready(function() {
        // unbiind the click event from the taxonomy box
        jQuery('#tagsdiv-<?php echo CTM_TAXONOMY_NAME; ?> input.tagadd').unbind('click');
        jQuery('#tagsdiv-<?php echo CTM_TAXONOMY_NAME; ?> input.newtag').unbind('keyup');

        // hide the howto text for inserting multiple terms
        // NOTE: because this solution does not support inserting multiple terms
        jQuery('#tagsdiv-<?php echo CTM_TAXONOMY_NAME; ?> p.howto').hide();

        // bind our custom handler
        jQuery('#tagsdiv-<?php echo CTM_TAXONOMY_NAME; ?> input.tagadd').click(ctm_custom_termadd_handler);
        jQuery('#tagsdiv-<?php echo CTM_TAXONOMY_NAME; ?> input.newtag').keyup(ctm_custom_key_handler);
    });

</script>

<?php
}
add_action('admin_footer-post-new.php', 'ctm_custom_tax_js');
add_action('admin_footer-post.php', 'ctm_custom_tax_js');
?>

CẬP NHẬT: mã được cập nhật để xử lý khóa trả về theo nhận xét của mỗi @ mike.


1
cảm ơn đó là một khởi đầu tuyệt vời Nó không chặn các từ khóa mới được nhập khi nhấn nút "thêm", nhưng bạn vẫn có thể thêm từ khóa mới bằng cách nhấn Enterphím. Tôi đã cố gắng trở falsevề keyCode == 13, nhưng điều đó dường như không làm như lừa, làm bạn có bất kỳ ý tưởng?. Ngoài ra, sẽ tốt hơn nếu tập lệnh chỉ được gọi trên post.phppost-new.phptrang quản trị.
mike23

Tôi đã cập nhật mã, kiểm tra ngay.
Hameedullah Khan

Thật tuyệt vời, cảm ơn rất nhiều! Bây giờ điều gọn gàng sẽ là làm cho nó hoạt động cho nhiều nguyên tắc phân loại. Tôi sẽ chấp nhận aswer, cũng cho chúng tôi biết nếu bạn quản lý để thực hiện trình chỉnh sửa menu như metabox cho các nguyên tắc phân loại :)
mike23

0

Câu hỏi này hơi cũ, nhưng như tôi thấy, một số người khác có thể đến và tìm kiếm những điều tương tự. PLugin này rất hữu ích https://wordpress.org/plugins/admin-c Ab-filter/#developers Nút thể loại 'hoàn toàn Hiển thị css: không thuộc tính nào cho id id sẽ hoạt động hoàn hảo.

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.