Как показать / скрыть мета-поле с помощью категорий, с другим типом сообщения

Следующий код скрывает мета-поле, когда определенные категории выбираются с помощью jquery в редакторе сообщений. Он работает со post как пользовательский тип сообщения. Мне нужно, чтобы он работал с настраиваемым типом сообщений, называемым events . Тип event использует пользовательскую таксономию, называемую категориями событий. Я хочу использовать идентификаторы в этих категориях с типом сообщения о event . Вот мой рабочий код, который работает со стандартным типом сообщения:

add_meta_box.php в папке плагина:

 function add_custom_box() { add_meta_box( 'my-meta-box', // id of metabox 'My Custom Meta Box', //title of metabox 'my_callback_function', // callback function that will echo the box content 'post' // posttype to add meta box ); } function my_callback_function() { echo '<label for="my_meta_box_text">Text</label>: <input type="text" id="my_meta_box_text" name="my_meta_box_text" />'; } if (is_admin()) add_action('admin_menu', 'add_custom_box'); wp_enqueue_script('metabox_js', plugins_url('add_meta_box/js/metabox.js',dirname(__FILE__) ), array('jquery')); 

metabox.js в pluginfolder / js / metabox.js:

 jQuery(function($) { function my_check_categories() { $('#my-meta-box').hide(); // intially hides the metabox /* script to show metabox on category ids 2,3 and 4 (write the category ids in the if condition below on line 14)*/ $('#categorychecklist input[type="checkbox"]').each(function(i,e) { var id = $(this).attr('id').match(/-([0-9]*)$/i); id = (id && id[1]) ? parseInt(id[1]) : null ; if ($.inArray(id, [22,23]) > -1 && $(this).is(':checked')) { $('#my-meta-box').show(); } }); } $('#categorychecklist input[type="checkbox"]').live('click', my_check_categories); // calls the function on click of category checkbox my_check_categories(); // calls the function on load }); 

Я знаю, что мне нужно изменить post на event в add_meta_box , я сделал это, но он, похоже, не работает. Пожалуйста, может кто-нибудь дать немного руководства, это было бы действительно оценено? Спасибо

Вместо

 if (is_admin()) add_action('admin_menu', 'add_custom_box'); 

использование

 add_action('add_meta_boxes', 'add_custom_box'); 

Ключ 'add_meta_boxes' является правильным для добавления мета-полей. Помимо этого, как вы упомянули, правильно измените «пост» на «$ my-custom-post-type» и зарегистрируйте таксономию категории для этого типа сообщения:

 register_taxonomy_for_object_type( 'category', '$my-custom-post-type' ) 

Приведенный ниже код решает эту проблему:

Код обмена:

 jQuery(function($) { function my_check_categories() { $('#my-meta-box').hide(); // intially hides the metabox /* script to show metabox on category ids 2,3 and 4 (write the category ids in the if condition below on line 14)*/ $('#event-categorieschecklist input[type="checkbox"]').each(function(i,e) { var id = $(this).attr('id').match(/-([0-9]*)$/i); id = (id && id[1]) ? parseInt(id[1]) : null ; if ($.inArray(id, [20,6]) > -1 && $(this).is(':checked')) { $('#my-meta-box').show(); } }); } $('#event-categorieschecklist input[type="checkbox"]').live('click', my_check_categories); // calls the function on click of category checkbox my_check_categories(); // calls the function on load }); 

Код add_meta_box.php:

 function add_custom_box() { add_meta_box( 'my-meta-box', // id of metabox 'My Custom Meta Box', //title of metabox 'my_callback_function', // callback function that will echo the box content 'event' // posttype to add meta box ); } // This function echoes the content of our meta box function my_callback_function() { echo '<label for="my_meta_box_text">Text</label>: <input type="text" id="my_meta_box_text" name="my_meta_box_text" />'; } // Hook the metabox if (is_admin()) add_action('admin_menu', 'add_custom_box'); // Add the js file which will contain script for show/hide metabox based on selection of categories. wp_enqueue_script('metabox_js', plugins_url('add_meta_box/js/metabox.js',dirname(__FILE__) ), array('jquery'));