So I worked out how to do this, with a little help from Tonya Mork @ KnowTheCode and a tutorial on adapting the quick edit by Rachel Carden.
I need to refactor the code down, there’s still a lot of repetition but I’m pretty much a Javascript/jQuery novice, so please bear with me.
Anyway the solution is as follows:
My custom admin css, saved in my child theme as product-admin-quick-edit.css
:
ul.fashion-category-checklist,
ul.fashion-brand-checklist,
ul.fashion-season-checklist,
ul.gender-checklist,
ul.food-drink-category-checklist,
ul.food-drink-brands-checklist,
ul.country-of-origin-checklist {
display: none;
}
body.wp-admin span.inline-edit-categories-label {
display: none;
}
Then I have my jQuery, saved in my child theme /js folder as product-admin-quick-edit-jquery.js
:
(function($) {
// we create a copy of the WP inline edit post function
var $wp_inline_edit = inlineEditPost.edit;
// and then we overwrite the function with our own code
inlineEditPost.edit = function( id ) {
// "call" the original WP edit function
// we don't want to leave WordPress hanging
$wp_inline_edit.apply( this, arguments );
// now we take care of our business
// get the post ID
var $post_id = 0;
if ( typeof( id ) == 'object' )
$post_id = parseInt( this.getId( id ) );
if ( $post_id > 0 ) {
var productCategoryQuickEdit = jQuery('ul.product_cat-checklist');
var fashionQuickEditCheckBox = jQuery('ul.product_cat-checklist li label input#in-product_cat-46:checkbox');
var fashionCategoryQuickEdit = jQuery('ul.fashion-category-checklist');
var fashionBrandQuickEdit = jQuery('ul.fashion-brand-checklist');
var fashionSeasonQuickEdit = jQuery('ul.fashion-season-checklist');
var fashionGenderQuickEdit = jQuery('ul.gender-checklist');
var foodDrinkQuickEditCheckBox = jQuery('ul.product_cat-checklist li label input#in-product_cat-45:checkbox');
var foodDrinkCategoryQuickEdit = jQuery('ul.food-drink-category-checklist');
var foodDrinkBrandsQuickEdit = jQuery('ul.food-drink-brands-checklist');
var foodDrinkCountryQuickEdit = jQuery('ul.country-of-origin-checklist');
productCategoryQuickEdit.prev().prev().css("display", "block");
if (fashionQuickEditCheckBox.is(':checked')) {
fashionCategoryQuickEdit.css("display", "block");
fashionBrandQuickEdit.css("display", "block");
fashionSeasonQuickEdit.css("display", "block");
fashionGenderQuickEdit.css("display", "block");
fashionCategoryQuickEdit.prev().prev().css("display", "block");
fashionBrandQuickEdit.prev().prev().css("display", "block");
fashionSeasonQuickEdit.prev().prev().css("display", "block");
fashionGenderQuickEdit.prev().prev().css("display", "block");
}
fashionQuickEditCheckBox.change(function(){
if (this.checked) {
fashionCategoryQuickEdit.css("display", "block");
fashionBrandQuickEdit.css("display", "block");
fashionSeasonQuickEdit.css("display", "block");
fashionGenderQuickEdit.css("display", "block");
fashionCategoryQuickEdit.prev().prev().css("display", "block");
fashionBrandQuickEdit.prev().prev().css("display", "block");
fashionSeasonQuickEdit.prev().prev().css("display", "block");
fashionGenderQuickEdit.prev().prev().css("display", "block");
} else {
fashionCategoryQuickEdit.css("display", "none");
fashionBrandQuickEdit.css("display", "none");
fashionSeasonQuickEdit.css("display", "none");
fashionGenderQuickEdit.css("display", "none");
fashionCategoryQuickEdit.prev().prev().css("display", "none");
fashionBrandQuickEdit.prev().prev().css("display", "none");
fashionSeasonQuickEdit.prev().prev().css("display", "none");
fashionGenderQuickEdit.prev().prev().css("display", "none");
}
});
if (foodDrinkQuickEditCheckBox.is(':checked')) {
foodDrinkCategoryQuickEdit.css("display", "block");
foodDrinkBrandsQuickEdit.css("display", "block");
foodDrinkCountryQuickEdit.css("display", "block");
foodDrinkCategoryQuickEdit.prev().prev().css("display", "block");
foodDrinkBrandsQuickEdit.prev().prev().css("display", "block");
foodDrinkCountryQuickEdit.prev().prev().css("display", "block");
}
foodDrinkQuickEditCheckBox.change(function(){
if (this.checked) {
foodDrinkCategoryQuickEdit.css("display", "block");
foodDrinkBrandsQuickEdit.css("display", "block");
foodDrinkCountryQuickEdit.css("display", "block");
foodDrinkCategoryQuickEdit.prev().prev().css("display", "block");
foodDrinkBrandsQuickEdit.prev().prev().css("display", "block");
foodDrinkCountryQuickEdit.prev().prev().css("display", "block");
} else {
foodDrinkCategoryQuickEdit.css("display", "none");
foodDrinkBrandsQuickEdit.css("display", "none");
foodDrinkCountryQuickEdit.css("display", "none");
foodDrinkCategoryQuickEdit.prev().prev().css("display", "none");
foodDrinkBrandsQuickEdit.prev().prev().css("display", "none");
foodDrinkCountryQuickEdit.prev().prev().css("display", "none");
}
});
}
};
})(jQuery);
Then I enqueue these files in my functions.php
:
add_action( 'admin_enqueue_scripts', 'load_my_custom_wp_admin_style' );
function load_my_custom_wp_admin_style() {
wp_register_style( 'product_admin_quick_edit_css', get_stylesheet_directory_uri() . '/product-admin-quick-edit.css', false, '1.0.0' );
wp_enqueue_style( 'product_admin_quick_edit_css' );
}
add_action( 'admin_print_scripts-edit.php', 'load_custom_quick_edit_scripts', 9999, 2 );
function load_custom_quick_edit_scripts(){
wp_enqueue_script( 'product-admin-quick-edit-jquery', get_stylesheet_directory_uri() . "/js/product-admin-quick-edit-jquery.js", array( 'jquery', 'inline-edit-post' ), CHILD_THEME_VERSION, true );
}
Making sure to enqueue the scripts late at 9999
, and making them dependent on inline-edit-post
javascript from WP Core.
I’ll refactor the jQuery into some sort of loop for adding and removing the css classes, it should reduce it down quite a bit.
Hope it helps someone else, I couldn’t find any other material on dynamically displaying taxonomies in quick edit dependent on other taxonomies settings, so guess there isn’t much need for it.