2013-07-25 16:51:28 +00:00
< ? php
/**
2015-11-03 13:53:50 +00:00
* Handles taxonomies in admin
2013-07-25 16:51:28 +00:00
*
2015-05-26 13:24:49 +00:00
* @ class WC_Admin_Taxonomies
* @ version 2.3 . 10
2020-08-05 16:36:24 +00:00
* @ package WooCommerce\Admin
2013-07-25 16:51:28 +00:00
*/
2014-09-20 19:52:30 +00:00
if ( ! defined ( 'ABSPATH' ) ) {
2018-11-12 03:30:09 +00:00
exit ; // Exit if accessed directly.
2014-09-20 19:52:30 +00:00
}
/**
* WC_Admin_Taxonomies class .
*/
2013-07-25 16:51:28 +00:00
class WC_Admin_Taxonomies {
2018-11-12 03:30:09 +00:00
/**
* Class instance .
*
* @ var WC_Admin_Taxonomies instance
*/
protected static $instance = false ;
2018-09-21 08:36:04 +00:00
/**
* Default category ID .
*
* @ var int
*/
private $default_cat_id = 0 ;
2018-11-12 03:30:09 +00:00
/**
* Get class instance
*/
public static function get_instance () {
if ( ! self :: $instance ) {
self :: $instance = new self ();
}
return self :: $instance ;
}
2013-07-25 16:51:28 +00:00
/**
2015-11-03 12:28:01 +00:00
* Constructor .
2013-07-25 16:51:28 +00:00
*/
public function __construct () {
2018-09-21 08:36:04 +00:00
// Default category ID.
$this -> default_cat_id = get_option ( 'default_product_cat' , 0 );
2018-11-12 03:30:09 +00:00
// Category/term ordering.
2014-11-19 23:36:47 +00:00
add_action ( 'create_term' , array ( $this , 'create_term' ), 5 , 3 );
2013-08-06 15:56:15 +00:00
2018-11-12 03:30:09 +00:00
// Add form.
2013-07-25 16:51:28 +00:00
add_action ( 'product_cat_add_form_fields' , array ( $this , 'add_category_fields' ) );
2014-11-19 23:36:47 +00:00
add_action ( 'product_cat_edit_form_fields' , array ( $this , 'edit_category_fields' ), 10 );
2015-03-09 11:29:14 +00:00
add_action ( 'created_term' , array ( $this , 'save_category_fields' ), 10 , 3 );
add_action ( 'edit_term' , array ( $this , 'save_category_fields' ), 10 , 3 );
2013-07-25 16:51:28 +00:00
2018-11-12 03:30:09 +00:00
// Add columns.
2013-07-25 16:51:28 +00:00
add_filter ( 'manage_edit-product_cat_columns' , array ( $this , 'product_cat_columns' ) );
add_filter ( 'manage_product_cat_custom_column' , array ( $this , 'product_cat_column' ), 10 , 3 );
2018-02-12 13:17:47 +00:00
// Add row actions.
add_filter ( 'product_cat_row_actions' , array ( $this , 'product_cat_row_actions' ), 10 , 2 );
add_filter ( 'admin_init' , array ( $this , 'handle_product_cat_row_actions' ) );
2018-11-12 03:30:09 +00:00
// Taxonomy page descriptions.
2013-07-25 16:51:28 +00:00
add_action ( 'product_cat_pre_add_form' , array ( $this , 'product_cat_description' ) );
2018-02-07 23:12:31 +00:00
add_action ( 'after-product_cat-table' , array ( $this , 'product_cat_notes' ) );
2014-06-04 10:16:19 +00:00
2015-08-11 16:10:14 +00:00
$attribute_taxonomies = wc_get_attribute_taxonomies ();
2016-06-06 16:24:31 +00:00
if ( ! empty ( $attribute_taxonomies ) ) {
2016-05-29 21:57:10 +00:00
foreach ( $attribute_taxonomies as $attribute ) {
add_action ( 'pa_' . $attribute -> attribute_name . '_pre_add_form' , array ( $this , 'product_attribute_description' ) );
2015-08-11 16:10:14 +00:00
}
2015-03-24 10:27:55 +00:00
}
2018-11-12 03:30:09 +00:00
// Maintain hierarchy of terms.
2014-06-04 10:16:19 +00:00
add_filter ( 'wp_terms_checklist_args' , array ( $this , 'disable_checked_ontop' ) );
2018-09-21 08:36:04 +00:00
2018-11-12 03:30:09 +00:00
// Admin footer scripts for this product categories admin screen.
2018-09-21 08:36:04 +00:00
add_action ( 'admin_footer' , array ( $this , 'scripts_at_product_cat_screen_footer' ) );
2013-07-25 16:51:28 +00:00
}
2013-08-06 15:56:15 +00:00
/**
* Order term when created ( put in position 0 ) .
*
2018-11-12 03:30:09 +00:00
* @ param mixed $term_id Term ID .
* @ param mixed $tt_id Term taxonomy ID .
* @ param string $taxonomy Taxonomy slug .
2013-08-06 15:56:15 +00:00
*/
public function create_term ( $term_id , $tt_id = '' , $taxonomy = '' ) {
2015-05-26 13:24:49 +00:00
if ( 'product_cat' != $taxonomy && ! taxonomy_is_product_attribute ( $taxonomy ) ) {
2013-08-06 15:56:15 +00:00
return ;
2014-11-19 23:36:47 +00:00
}
2013-08-06 15:56:15 +00:00
$meta_name = taxonomy_is_product_attribute ( $taxonomy ) ? 'order_' . esc_attr ( $taxonomy ) : 'order' ;
2019-01-25 20:47:54 +00:00
update_term_meta ( $term_id , $meta_name , 0 );
2013-08-06 15:56:15 +00:00
}
/**
* When a term is deleted , delete its meta .
*
2019-03-05 19:00:37 +00:00
* @ deprecated 3.6 . 0 No longer needed .
2018-11-12 03:30:09 +00:00
* @ param mixed $term_id Term ID .
2013-08-06 15:56:15 +00:00
*/
public function delete_term ( $term_id ) {
2019-01-25 20:44:25 +00:00
wc_deprecated_function ( 'delete_term' , '3.6' );
2013-08-06 15:56:15 +00:00
}
2013-07-25 16:51:28 +00:00
/**
* Category thumbnail fields .
*/
public function add_category_fields () {
?>
2016-03-01 14:37:01 +00:00
< div class = " form-field term-display-type-wrap " >
2018-11-12 03:30:09 +00:00
< label for = " display_type " >< ? php esc_html_e ( 'Display type' , 'woocommerce' ); ?> </label>
2013-07-25 16:51:28 +00:00
< select id = " display_type " name = " display_type " class = " postform " >
2018-11-12 03:30:09 +00:00
< option value = " " >< ? php esc_html_e ( 'Default' , 'woocommerce' ); ?> </option>
< option value = " products " >< ? php esc_html_e ( 'Products' , 'woocommerce' ); ?> </option>
< option value = " subcategories " >< ? php esc_html_e ( 'Subcategories' , 'woocommerce' ); ?> </option>
< option value = " both " >< ? php esc_html_e ( 'Both' , 'woocommerce' ); ?> </option>
2013-07-25 16:51:28 +00:00
</ select >
</ div >
2016-03-01 14:37:01 +00:00
< div class = " form-field term-thumbnail-wrap " >
2018-11-12 03:30:09 +00:00
< label >< ? php esc_html_e ( 'Thumbnail' , 'woocommerce' ); ?> </label>
2015-05-26 13:24:49 +00:00
< div id = " product_cat_thumbnail " style = " float: left; margin-right: 10px; " >< img src = " <?php echo esc_url( wc_placeholder_img_src() ); ?> " width = " 60px " height = " 60px " /></ div >
< div style = " line-height: 60px; " >
2013-07-25 16:51:28 +00:00
< input type = " hidden " id = " product_cat_thumbnail_id " name = " product_cat_thumbnail_id " />
2018-11-12 03:30:09 +00:00
< button type = " button " class = " upload_image_button button " >< ? php esc_html_e ( 'Upload/Add image' , 'woocommerce' ); ?> </button>
< button type = " button " class = " remove_image_button button " >< ? php esc_html_e ( 'Remove image' , 'woocommerce' ); ?> </button>
2013-07-25 16:51:28 +00:00
</ div >
< script type = " text/javascript " >
2014-11-30 06:52:32 +00:00
// Only show the "remove image" button when needed
2015-05-26 13:24:49 +00:00
if ( ! jQuery ( '#product_cat_thumbnail_id' ) . val () ) {
jQuery ( '.remove_image_button' ) . hide ();
2014-11-30 06:52:32 +00:00
}
2013-07-25 16:51:28 +00:00
// Uploading files
var file_frame ;
2014-11-30 06:52:32 +00:00
jQuery ( document ) . on ( 'click' , '.upload_image_button' , function ( event ) {
2013-07-25 16:51:28 +00:00
event . preventDefault ();
// If the media frame already exists, reopen it.
if ( file_frame ) {
file_frame . open ();
return ;
}
// Create the media frame.
file_frame = wp . media . frames . downloadable_file = wp . media ({
2018-11-12 03:30:09 +00:00
title : '<?php esc_html_e( ' Choose an image ', ' woocommerce ' ); ?>' ,
2013-07-25 16:51:28 +00:00
button : {
2018-11-12 03:30:09 +00:00
text : '<?php esc_html_e( ' Use image ', ' woocommerce ' ); ?>'
2013-07-25 16:51:28 +00:00
},
multiple : false
});
// When an image is selected, run a callback.
file_frame . on ( 'select' , function () {
2017-01-05 14:31:04 +00:00
var attachment = file_frame . state () . get ( 'selection' ) . first () . toJSON ();
var attachment_thumbnail = attachment . sizes . thumbnail || attachment . sizes . full ;
2013-07-25 16:51:28 +00:00
2015-05-26 13:24:49 +00:00
jQuery ( '#product_cat_thumbnail_id' ) . val ( attachment . id );
2017-01-05 14:31:04 +00:00
jQuery ( '#product_cat_thumbnail' ) . find ( 'img' ) . attr ( 'src' , attachment_thumbnail . url );
2015-05-26 13:24:49 +00:00
jQuery ( '.remove_image_button' ) . show ();
2013-07-25 16:51:28 +00:00
});
// Finally, open the modal.
file_frame . open ();
});
2015-05-26 13:24:49 +00:00
jQuery ( document ) . on ( 'click' , '.remove_image_button' , function () {
2015-09-07 17:51:10 +00:00
jQuery ( '#product_cat_thumbnail' ) . find ( 'img' ) . attr ( 'src' , '<?php echo esc_js( wc_placeholder_img_src() ); ?>' );
2015-05-26 13:24:49 +00:00
jQuery ( '#product_cat_thumbnail_id' ) . val ( '' );
jQuery ( '.remove_image_button' ) . hide ();
2013-07-25 16:51:28 +00:00
return false ;
});
2016-04-05 20:28:45 +00:00
2016-04-04 17:59:53 +00:00
jQuery ( document ) . ajaxComplete ( function ( event , request , options ) {
2016-04-05 20:28:45 +00:00
if ( request && 4 === request . readyState && 200 === request . status
&& options . data && 0 <= options . data . indexOf ( 'action=add-tag' ) ) {
2016-04-04 17:59:53 +00:00
var res = wpAjax . parseAjaxResponse ( request . responseXML , 'ajax-response' );
2016-04-05 20:28:45 +00:00
if ( ! res || res . errors ) {
2016-04-04 17:53:36 +00:00
return ;
}
// Clear Thumbnail fields on submit
2016-04-04 17:25:23 +00:00
jQuery ( '#product_cat_thumbnail' ) . find ( 'img' ) . attr ( 'src' , '<?php echo esc_js( wc_placeholder_img_src() ); ?>' );
jQuery ( '#product_cat_thumbnail_id' ) . val ( '' );
jQuery ( '.remove_image_button' ) . hide ();
2016-04-04 17:53:36 +00:00
// Clear Display type field on submit
jQuery ( '#display_type' ) . val ( '' );
return ;
2016-04-04 17:25:23 +00:00
}
2016-04-05 20:28:45 +00:00
} );
2013-07-25 16:51:28 +00:00
</ script >
< div class = " clear " ></ div >
</ div >
< ? php
}
/**
* Edit category thumbnail field .
*
2018-11-12 03:30:09 +00:00
* @ param mixed $term Term ( category ) being edited .
2013-07-25 16:51:28 +00:00
*/
2014-11-19 23:36:47 +00:00
public function edit_category_fields ( $term ) {
2013-07-25 16:51:28 +00:00
2019-01-25 20:47:54 +00:00
$display_type = get_term_meta ( $term -> term_id , 'display_type' , true );
$thumbnail_id = absint ( get_term_meta ( $term -> term_id , 'thumbnail_id' , true ) );
2014-11-30 06:52:32 +00:00
2014-11-19 23:36:47 +00:00
if ( $thumbnail_id ) {
2013-08-17 01:01:54 +00:00
$image = wp_get_attachment_thumb_url ( $thumbnail_id );
2014-11-19 23:36:47 +00:00
} else {
2013-11-25 13:56:59 +00:00
$image = wc_placeholder_img_src ();
2014-11-19 23:36:47 +00:00
}
2013-07-25 16:51:28 +00:00
?>
2018-07-16 14:04:36 +00:00
< tr class = " form-field term-display-type-wrap " >
2018-11-12 03:30:09 +00:00
< th scope = " row " valign = " top " >< label >< ? php esc_html_e ( 'Display type' , 'woocommerce' ); ?> </label></th>
2013-07-25 16:51:28 +00:00
< td >
< select id = " display_type " name = " display_type " class = " postform " >
2018-11-12 03:30:09 +00:00
< option value = " " < ? php selected ( '' , $display_type ); ?> ><?php esc_html_e( 'Default', 'woocommerce' ); ?></option>
< option value = " products " < ? php selected ( 'products' , $display_type ); ?> ><?php esc_html_e( 'Products', 'woocommerce' ); ?></option>
< option value = " subcategories " < ? php selected ( 'subcategories' , $display_type ); ?> ><?php esc_html_e( 'Subcategories', 'woocommerce' ); ?></option>
< option value = " both " < ? php selected ( 'both' , $display_type ); ?> ><?php esc_html_e( 'Both', 'woocommerce' ); ?></option>
2013-07-25 16:51:28 +00:00
</ select >
</ td >
</ tr >
2018-07-16 14:04:36 +00:00
< tr class = " form-field term-thumbnail-wrap " >
2018-11-12 03:30:09 +00:00
< th scope = " row " valign = " top " >< label >< ? php esc_html_e ( 'Thumbnail' , 'woocommerce' ); ?> </label></th>
2013-07-25 16:51:28 +00:00
< td >
2015-05-26 13:24:49 +00:00
< div id = " product_cat_thumbnail " style = " float: left; margin-right: 10px; " >< img src = " <?php echo esc_url( $image ); ?> " width = " 60px " height = " 60px " /></ div >
< div style = " line-height: 60px; " >
2018-11-12 03:30:09 +00:00
< input type = " hidden " id = " product_cat_thumbnail_id " name = " product_cat_thumbnail_id " value = " <?php echo esc_attr( $thumbnail_id ); ?> " />
< button type = " button " class = " upload_image_button button " >< ? php esc_html_e ( 'Upload/Add image' , 'woocommerce' ); ?> </button>
< button type = " button " class = " remove_image_button button " >< ? php esc_html_e ( 'Remove image' , 'woocommerce' ); ?> </button>
2013-07-25 16:51:28 +00:00
</ div >
< script type = " text/javascript " >
2015-05-26 13:24:49 +00:00
// Only show the "remove image" button when needed
if ( '0' === jQuery ( '#product_cat_thumbnail_id' ) . val () ) {
jQuery ( '.remove_image_button' ) . hide ();
}
2013-07-25 16:51:28 +00:00
// Uploading files
var file_frame ;
2014-11-30 06:52:32 +00:00
jQuery ( document ) . on ( 'click' , '.upload_image_button' , function ( event ) {
2013-07-25 16:51:28 +00:00
event . preventDefault ();
// If the media frame already exists, reopen it.
if ( file_frame ) {
file_frame . open ();
return ;
}
// Create the media frame.
file_frame = wp . media . frames . downloadable_file = wp . media ({
2018-11-12 03:30:09 +00:00
title : '<?php esc_html_e( ' Choose an image ', ' woocommerce ' ); ?>' ,
2013-07-25 16:51:28 +00:00
button : {
2018-11-12 03:30:09 +00:00
text : '<?php esc_html_e( ' Use image ', ' woocommerce ' ); ?>'
2013-07-25 16:51:28 +00:00
},
multiple : false
});
// When an image is selected, run a callback.
file_frame . on ( 'select' , function () {
2017-01-05 14:31:04 +00:00
var attachment = file_frame . state () . get ( 'selection' ) . first () . toJSON ();
var attachment_thumbnail = attachment . sizes . thumbnail || attachment . sizes . full ;
2013-07-25 16:51:28 +00:00
2015-05-26 13:24:49 +00:00
jQuery ( '#product_cat_thumbnail_id' ) . val ( attachment . id );
2017-01-05 14:31:04 +00:00
jQuery ( '#product_cat_thumbnail' ) . find ( 'img' ) . attr ( 'src' , attachment_thumbnail . url );
2015-05-26 13:24:49 +00:00
jQuery ( '.remove_image_button' ) . show ();
2013-07-25 16:51:28 +00:00
});
// Finally, open the modal.
file_frame . open ();
});
2015-05-26 13:24:49 +00:00
jQuery ( document ) . on ( 'click' , '.remove_image_button' , function () {
2015-09-07 17:51:10 +00:00
jQuery ( '#product_cat_thumbnail' ) . find ( 'img' ) . attr ( 'src' , '<?php echo esc_js( wc_placeholder_img_src() ); ?>' );
2015-05-26 13:24:49 +00:00
jQuery ( '#product_cat_thumbnail_id' ) . val ( '' );
jQuery ( '.remove_image_button' ) . hide ();
2013-07-25 16:51:28 +00:00
return false ;
});
</ script >
< div class = " clear " ></ div >
</ td >
</ tr >
< ? php
}
/**
2018-11-12 03:30:09 +00:00
* Save category fields
2013-07-25 16:51:28 +00:00
*
2018-11-12 03:30:09 +00:00
* @ param mixed $term_id Term ID being saved .
* @ param mixed $tt_id Term taxonomy ID .
* @ param string $taxonomy Taxonomy slug .
2013-07-25 16:51:28 +00:00
*/
2015-03-09 11:29:14 +00:00
public function save_category_fields ( $term_id , $tt_id = '' , $taxonomy = '' ) {
2018-11-12 03:30:09 +00:00
if ( isset ( $_POST [ 'display_type' ] ) && 'product_cat' === $taxonomy ) { // WPCS: CSRF ok, input var ok.
2019-01-25 20:47:54 +00:00
update_term_meta ( $term_id , 'display_type' , esc_attr ( $_POST [ 'display_type' ] ) ); // WPCS: CSRF ok, sanitization ok, input var ok.
2014-06-19 10:38:57 +00:00
}
2018-11-12 03:30:09 +00:00
if ( isset ( $_POST [ 'product_cat_thumbnail_id' ] ) && 'product_cat' === $taxonomy ) { // WPCS: CSRF ok, input var ok.
2019-01-25 20:47:54 +00:00
update_term_meta ( $term_id , 'thumbnail_id' , absint ( $_POST [ 'product_cat_thumbnail_id' ] ) ); // WPCS: CSRF ok, input var ok.
2014-06-19 10:38:57 +00:00
}
2013-07-25 16:51:28 +00:00
}
/**
* Description for product_cat page to aid users .
*/
public function product_cat_description () {
2018-11-12 03:30:09 +00:00
echo wp_kses (
wpautop ( __ ( 'Product categories for your store can be managed here. To change the order of categories on the front-end you can drag and drop to sort them. To see more categories listed click the "screen options" link at the top-right of this page.' , 'woocommerce' ) ),
array ( 'p' => array () )
);
2013-07-25 16:51:28 +00:00
}
2018-02-07 23:12:31 +00:00
/**
2018-02-08 00:24:43 +00:00
* Add some notes to describe the behavior of the default category .
2018-02-07 23:12:31 +00:00
*/
public function product_cat_notes () {
2018-02-08 00:24:43 +00:00
$category_id = get_option ( 'default_product_cat' , 0 );
$category = get_term ( $category_id , 'product_cat' );
2018-02-07 23:12:31 +00:00
$category_name = ( ! $category || is_wp_error ( $category ) ) ? _x ( 'Uncategorized' , 'Default category slug' , 'woocommerce' ) : $category -> name ;
?>
< div class = " form-wrap edit-term-notes " >
< p >
2018-11-12 03:30:09 +00:00
< strong >< ? php esc_html_e ( 'Note:' , 'woocommerce' ); ?> </strong><br>
2018-02-08 12:35:57 +00:00
< ? php
2018-02-07 23:12:31 +00:00
printf (
/* translators: %s: default category */
2018-11-12 03:30:09 +00:00
esc_html__ ( 'Deleting a category does not delete the products in that category. Instead, products that were only assigned to the deleted category are set to the category %s.' , 'woocommerce' ),
2018-02-07 23:12:31 +00:00
'<strong>' . esc_html ( $category_name ) . '</strong>'
);
?>
</ p >
</ div >
< ? php
}
2015-03-24 10:27:55 +00:00
/**
* Description for shipping class page to aid users .
*/
public function product_attribute_description () {
2018-11-12 03:30:09 +00:00
echo wp_kses (
wpautop ( __ ( 'Attribute terms can be assigned to products and variations.<br/><br/><b>Note</b>: Deleting a term will remove it from all products and variations to which it has been assigned. Recreating a term will not automatically assign it back to products.' , 'woocommerce' ) ),
array ( 'p' => array () )
);
2015-03-24 10:27:55 +00:00
}
2013-07-25 16:51:28 +00:00
/**
* Thumbnail column added to category admin .
*
2018-11-12 03:30:09 +00:00
* @ param mixed $columns Columns array .
2013-11-27 09:03:47 +00:00
* @ return array
2013-07-25 16:51:28 +00:00
*/
public function product_cat_columns ( $columns ) {
2016-04-18 14:39:19 +00:00
$new_columns = array ();
2016-04-18 14:08:54 +00:00
if ( isset ( $columns [ 'cb' ] ) ) {
$new_columns [ 'cb' ] = $columns [ 'cb' ];
unset ( $columns [ 'cb' ] );
}
2013-07-25 16:51:28 +00:00
2016-04-18 14:39:19 +00:00
$new_columns [ 'thumb' ] = __ ( 'Image' , 'woocommerce' );
2018-03-05 18:59:17 +00:00
$columns = array_merge ( $new_columns , $columns );
2018-01-31 20:17:06 +00:00
$columns [ 'handle' ] = '' ;
return $columns ;
2013-07-25 16:51:28 +00:00
}
2018-02-12 13:17:47 +00:00
/**
* Adjust row actions .
*
2018-03-05 18:59:17 +00:00
* @ param array $actions Array of actions .
2018-02-12 13:17:47 +00:00
* @ param object $term Term object .
* @ return array
*/
public function product_cat_row_actions ( $actions = array (), $term ) {
$default_category_id = absint ( get_option ( 'default_product_cat' , 0 ) );
if ( $default_category_id !== $term -> term_id && current_user_can ( 'edit_term' , $term -> term_id ) ) {
$actions [ 'make_default' ] = sprintf (
'<a href="%s" aria-label="%s">%s</a>' ,
2019-06-14 06:58:08 +00:00
wp_nonce_url ( 'edit-tags.php?action=make_default&taxonomy=product_cat&post_type=product&tag_ID=' . absint ( $term -> term_id ), 'make_default_' . absint ( $term -> term_id ) ),
2018-02-12 13:17:47 +00:00
/* translators: %s: taxonomy term name */
esc_attr ( sprintf ( __ ( 'Make “%s” the default category' , 'woocommerce' ), $term -> name ) ),
__ ( 'Make default' , 'woocommerce' )
);
}
return $actions ;
}
/**
* Handle custom row actions .
*/
public function handle_product_cat_row_actions () {
2018-11-12 03:30:09 +00:00
if ( isset ( $_GET [ 'action' ], $_GET [ 'tag_ID' ], $_GET [ '_wpnonce' ] ) && 'make_default' === $_GET [ 'action' ] ) { // WPCS: CSRF ok, input var ok.
$make_default_id = absint ( $_GET [ 'tag_ID' ] ); // WPCS: Input var ok.
2018-02-12 13:17:47 +00:00
2018-11-12 03:30:09 +00:00
if ( wp_verify_nonce ( $_GET [ '_wpnonce' ], 'make_default_' . $make_default_id ) && current_user_can ( 'edit_term' , $make_default_id ) ) { // WPCS: Sanitization ok, input var ok, CSRF ok.
2018-02-12 13:17:47 +00:00
update_option ( 'default_product_cat' , $make_default_id );
}
}
}
2013-07-25 16:51:28 +00:00
/**
* Thumbnail column value added to category admin .
*
2018-11-12 03:30:09 +00:00
* @ param string $columns Column HTML output .
* @ param string $column Column name .
* @ param int $id Product ID .
2017-05-15 11:50:52 +00:00
*
* @ return string
2013-07-25 16:51:28 +00:00
*/
public function product_cat_column ( $columns , $column , $id ) {
2018-01-31 20:17:06 +00:00
if ( 'thumb' === $column ) {
2018-02-08 12:35:57 +00:00
// Prepend tooltip for default category.
$default_category_id = absint ( get_option ( 'default_product_cat' , 0 ) );
if ( $default_category_id === $id ) {
2018-02-08 16:52:32 +00:00
$columns .= wc_help_tip ( __ ( 'This is the default category and it cannot be deleted. It will be automatically assigned to products with no category.' , 'woocommerce' ) );
2018-02-08 12:35:57 +00:00
}
2019-01-25 20:47:54 +00:00
$thumbnail_id = get_term_meta ( $id , 'thumbnail_id' , true );
2013-07-25 16:51:28 +00:00
2014-11-30 06:52:32 +00:00
if ( $thumbnail_id ) {
2013-08-17 01:01:54 +00:00
$image = wp_get_attachment_thumb_url ( $thumbnail_id );
2014-11-30 06:52:32 +00:00
} else {
2013-11-25 13:56:59 +00:00
$image = wc_placeholder_img_src ();
2014-11-30 06:52:32 +00:00
}
2013-07-25 16:51:28 +00:00
2018-11-12 03:30:09 +00:00
// Prevent esc_url from breaking spaces in urls for image embeds. Ref: https://core.trac.wordpress.org/ticket/23605 .
2018-01-31 20:17:06 +00:00
$image = str_replace ( ' ' , '%20' , $image );
2015-08-05 19:17:52 +00:00
$columns .= '<img src="' . esc_url ( $image ) . '" alt="' . esc_attr__ ( 'Thumbnail' , 'woocommerce' ) . '" class="wp-post-image" height="48" width="48" />' ;
2013-07-25 16:51:28 +00:00
}
2018-01-31 20:17:06 +00:00
if ( 'handle' === $column ) {
$columns .= '<input type="hidden" name="term_id" value="' . esc_attr ( $id ) . '" />' ;
}
2013-07-25 16:51:28 +00:00
return $columns ;
}
2014-06-04 10:16:19 +00:00
/**
* Maintain term hierarchy when editing a product .
2014-11-30 06:52:32 +00:00
*
2018-11-12 03:30:09 +00:00
* @ param array $args Term checklist args .
2014-06-04 10:16:19 +00:00
* @ return array
*/
public function disable_checked_ontop ( $args ) {
2016-07-26 10:18:58 +00:00
if ( ! empty ( $args [ 'taxonomy' ] ) && 'product_cat' === $args [ 'taxonomy' ] ) {
2014-06-04 10:16:19 +00:00
$args [ 'checked_ontop' ] = false ;
}
return $args ;
2014-06-11 20:12:23 +00:00
}
2018-09-21 08:36:04 +00:00
/**
* Admin footer scripts for the product categories admin screen
*
* @ return void
*/
public function scripts_at_product_cat_screen_footer () {
2018-11-12 03:30:09 +00:00
if ( ! isset ( $_GET [ 'taxonomy' ] ) || 'product_cat' !== $_GET [ 'taxonomy' ] ) { // WPCS: CSRF ok, input var ok.
2018-09-21 08:36:04 +00:00
return ;
}
2018-11-12 03:30:09 +00:00
// Ensure the tooltip is displayed when the image column is disabled on product categories.
2019-01-28 17:20:22 +00:00
wc_enqueue_js (
" (function( $ ) {
2018-09-21 08:36:04 +00:00
'use strict' ;
2018-09-27 06:41:45 +00:00
var product_cat = $ ( 'tr#tag-" . absint( $this->default_cat_id ) . "' );
product_cat . find ( 'th' ) . empty ();
product_cat . find ( 'td.thumb span' ) . detach ( 'span' ) . appendTo ( product_cat . find ( 'th' ) );
2019-01-28 17:20:22 +00:00
})( jQuery ); "
);
2018-09-21 08:36:04 +00:00
}
2013-07-25 16:51:28 +00:00
}
2018-11-12 03:30:09 +00:00
$wc_admin_taxonomies = WC_Admin_Taxonomies :: get_instance ();