Bagaimana saya bisa membuat meta-kotak taksonomi dengan saran pencarian tetapi tidak ada input istilah baru?

8

Saya bertanya-tanya bagaimana saya bisa menyiapkan metabox taksonomi pada halaman edit posting yang akan serupa dengan jenis "tag" (dengan bidang pencarian dan saran otomatis), tetapi tanpa hak untuk menambahkan istilah baru.

Jadi misalnya jika saya mengetikkan kata, saya mendapatkan saran istilah yang dapat saya gunakan dari daftar istilah yang ada, tetapi jika saya mengetikkan kata yang tidak ada, maka itu tidak menambahkan istilah ke daftar.

EDIT

Sebenarnya, yang saya cari sebenarnya adalah perilaku fungsi "Pencarian" di Editor Menu:

masukkan deskripsi gambar di sini

Karena ini adalah perilaku WP inti, apakah ada cara untuk menggunakannya pada halaman post edit juga? Saya bertanya-tanya karena blok ini terlihat persis sama, keduanya memiliki tab "lihat semua" dan "paling baru", tetapi "pencarian" hanya ada di Editor Menu.

mike23
sumber
Metabox taksonomi dikodekan dengan tab yang ditetapkan dan tidak memiliki filter apa pun yang dapat dihubungkan. Hal seperti ini membutuhkan pembuatan tambalan atau metabox khusus yang lengkap.
Azizur Rahman

Jawaban:

3

Saya datang dengan solusi untuk pertanyaan pertama Anda. yaitu metabox pajak yang hanya menyarankan persyaratan dari daftar ketentuan yang ada tetapi tidak memungkinkan Anda untuk menambahkan persyaratan baru. Solusinya adalah berbasis jQuery dan memodifikasi perilaku default tag (yaitu taksonomi heirarkis) kotak meta.

Batasan: Saat ini hanya memungkinkan untuk menambahkan 1 istilah pada satu waktu, yaitu Anda tidak dapat menambahkan beberapa istilah yang ada sebagai nilai yang dipisahkan koma.

Kode ini juga tersedia sebagai intisari github .

Saya mungkin melakukan editor menu seperti metabox untuk taksonomi pada akhir pekan depan. ;)

solusi di bawah ini dapat digunakan sebagai plugin karena dapat digunakan dalam file function.php Anda juga.

<?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');
?>

UPDATE: kode diperbarui untuk menangani kunci kembali sesuai komentar @ mike.

Hameedullah Khan
sumber
1
terima kasih itu awal yang bagus. Itu memblokir kata kunci baru dari yang dimasukkan ketika menekan tombol "add", tetapi Anda masih dapat menambahkan yang baru dengan menekan Entertombol. Aku mencoba kembali falsepada keyCode == 13, tapi itu tampaknya tidak melakukan trik, apakah Anda punya ide?. Juga, akan lebih baik jika script dipanggil hanya pada post.phpdan post-new.phphalaman admin.
mike23
Saya telah memperbarui kodenya, periksa sekarang.
Hameedullah Khan
Ini bagus sekali, terima kasih banyak! Sekarang hal yang rapi adalah membuatnya bekerja untuk banyak taksonomi. Saya akan menerima aswer, beri tahu kami juga jika Anda berhasil menerapkan editor menu seperti metabox untuk taksonomi :)
mike23
0

Pertanyaan ini agak lama, tetapi ketika saya menemukannya beberapa orang mungkin datang dan mencari hal yang sama. PLugin ini bermanfaat https://wordpress.org/plugins/admin-category-filter/#developers Dan Anda dapat menambahkan kode secara manual atau ke 'functions.cp tema tema custumized Anda' untuk menyembunyikan bagian kategori induk atau 'tambah baru Tombol kategori sama sekali Tampilan css: tidak ada atribut ke id id yang berfungsi dengan baik.

leorospo
sumber