2013-07-25 16:51:28 +00:00
< ? php
2014-02-05 15:02:30 +00:00
if ( ! defined ( 'ABSPATH' ) ) {
exit ; // Exit if accessed directly
}
2013-07-25 16:51:28 +00:00
/**
2014-02-05 15:02:30 +00:00
* Handles taxonomies in admin
2013-07-25 16:51:28 +00:00
*
2014-02-05 15:02:30 +00:00
* @ class WC_Admin_Taxonomies
* @ version 2.1 . 0
* @ package WooCommerce / Admin
* @ category Class
2013-07-25 16:51:28 +00:00
* @ author WooThemes
*/
class WC_Admin_Taxonomies {
/**
* Constructor
*/
public function __construct () {
2013-08-06 15:56:15 +00:00
// Category/term ordering
add_action ( " create_term " , array ( $this , 'create_term' ), 5 , 3 );
add_action ( " delete_term " , array ( $this , 'delete_term' ), 5 );
2013-07-25 16:51:28 +00:00
// Add form
add_action ( 'product_cat_add_form_fields' , array ( $this , 'add_category_fields' ) );
add_action ( 'product_cat_edit_form_fields' , array ( $this , 'edit_category_fields' ), 10 , 2 );
add_action ( 'created_term' , array ( $this , 'save_category_fields' ), 10 , 3 );
add_action ( 'edit_term' , array ( $this , 'save_category_fields' ), 10 , 3 );
// Add columns
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 );
// Taxonomy page descriptions
add_action ( 'product_cat_pre_add_form' , array ( $this , 'product_cat_description' ) );
add_action ( 'product_shipping_class_pre_add_form' , array ( $this , 'shipping_class_description' ) );
}
2013-08-06 15:56:15 +00:00
/**
* Order term when created ( put in position 0 ) .
*
* @ access public
* @ param mixed $term_id
* @ param mixed $tt_id
* @ param mixed $taxonomy
* @ return void
*/
public function create_term ( $term_id , $tt_id = '' , $taxonomy = '' ) {
if ( $taxonomy != 'product_cat' && ! taxonomy_is_product_attribute ( $taxonomy ) )
return ;
$meta_name = taxonomy_is_product_attribute ( $taxonomy ) ? 'order_' . esc_attr ( $taxonomy ) : 'order' ;
update_woocommerce_term_meta ( $term_id , $meta_name , 0 );
}
/**
* When a term is deleted , delete its meta .
*
* @ access public
* @ param mixed $term_id
* @ return void
*/
public function delete_term ( $term_id ) {
$term_id = ( int ) $term_id ;
if ( ! $term_id )
return ;
global $wpdb ;
$wpdb -> query ( " DELETE FROM { $wpdb -> woocommerce_termmeta } WHERE `woocommerce_term_id` = " . $term_id );
}
2013-07-25 16:51:28 +00:00
/**
* Category thumbnail fields .
*
* @ access public
* @ return void
*/
public function add_category_fields () {
?>
< div class = " form-field " >
< label for = " display_type " >< ? php _e ( 'Display type' , 'woocommerce' ); ?> </label>
< select id = " display_type " name = " display_type " class = " postform " >
< option value = " " >< ? php _e ( 'Default' , 'woocommerce' ); ?> </option>
< option value = " products " >< ? php _e ( 'Products' , 'woocommerce' ); ?> </option>
< option value = " subcategories " >< ? php _e ( 'Subcategories' , 'woocommerce' ); ?> </option>
< option value = " both " >< ? php _e ( 'Both' , 'woocommerce' ); ?> </option>
</ select >
</ div >
< div class = " form-field " >
< label >< ? php _e ( 'Thumbnail' , 'woocommerce' ); ?> </label>
2013-11-25 13:56:59 +00:00
< div id = " product_cat_thumbnail " style = " float:left;margin-right:10px; " >< img src = " <?php echo wc_placeholder_img_src(); ?> " width = " 60px " height = " 60px " /></ div >
2013-07-25 16:51:28 +00:00
< div style = " line-height:60px; " >
< input type = " hidden " id = " product_cat_thumbnail_id " name = " product_cat_thumbnail_id " />
2013-12-02 12:10:32 +00:00
< button type = " button " class = " upload_image_button button " >< ? php _e ( 'Upload/Add image' , 'woocommerce' ); ?> </button>
< button type = " button " class = " remove_image_button button " >< ? php _e ( 'Remove image' , 'woocommerce' ); ?> </button>
2013-07-25 16:51:28 +00:00
</ div >
< script type = " text/javascript " >
// Only show the "remove image" button when needed
if ( ! jQuery ( '#product_cat_thumbnail_id' ) . val () )
jQuery ( '.remove_image_button' ) . hide ();
// Uploading files
var file_frame ;
jQuery ( document ) . on ( 'click' , '.upload_image_button' , function ( event ){
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 ({
title : '<?php _e( ' Choose an image ', ' woocommerce ' ); ?>' ,
button : {
text : '<?php _e( ' Use image ', ' woocommerce ' ); ?>' ,
},
multiple : false
});
// When an image is selected, run a callback.
file_frame . on ( 'select' , function () {
attachment = file_frame . state () . get ( 'selection' ) . first () . toJSON ();
jQuery ( '#product_cat_thumbnail_id' ) . val ( attachment . id );
jQuery ( '#product_cat_thumbnail img' ) . attr ( 'src' , attachment . url );
jQuery ( '.remove_image_button' ) . show ();
});
// Finally, open the modal.
file_frame . open ();
});
jQuery ( document ) . on ( 'click' , '.remove_image_button' , function ( event ){
2013-11-25 13:56:59 +00:00
jQuery ( '#product_cat_thumbnail img' ) . attr ( 'src' , '<?php echo wc_placeholder_img_src(); ?>' );
2013-07-25 16:51:28 +00:00
jQuery ( '#product_cat_thumbnail_id' ) . val ( '' );
jQuery ( '.remove_image_button' ) . hide ();
return false ;
});
</ script >
< div class = " clear " ></ div >
</ div >
< ? php
}
/**
* Edit category thumbnail field .
*
* @ access public
* @ param mixed $term Term ( category ) being edited
* @ param mixed $taxonomy Taxonomy of the term being edited
*/
public function edit_category_fields ( $term , $taxonomy ) {
$display_type = get_woocommerce_term_meta ( $term -> term_id , 'display_type' , true );
$image = '' ;
$thumbnail_id = absint ( get_woocommerce_term_meta ( $term -> term_id , 'thumbnail_id' , true ) );
if ( $thumbnail_id )
2013-08-17 01:01:54 +00:00
$image = wp_get_attachment_thumb_url ( $thumbnail_id );
2013-07-25 16:51:28 +00:00
else
2013-11-25 13:56:59 +00:00
$image = wc_placeholder_img_src ();
2013-07-25 16:51:28 +00:00
?>
< tr class = " form-field " >
< th scope = " row " valign = " top " >< label >< ? php _e ( 'Display type' , 'woocommerce' ); ?> </label></th>
< td >
< select id = " display_type " name = " display_type " class = " postform " >
< option value = " " < ? php selected ( '' , $display_type ); ?> ><?php _e( 'Default', 'woocommerce' ); ?></option>
< option value = " products " < ? php selected ( 'products' , $display_type ); ?> ><?php _e( 'Products', 'woocommerce' ); ?></option>
< option value = " subcategories " < ? php selected ( 'subcategories' , $display_type ); ?> ><?php _e( 'Subcategories', 'woocommerce' ); ?></option>
< option value = " both " < ? php selected ( 'both' , $display_type ); ?> ><?php _e( 'Both', 'woocommerce' ); ?></option>
</ select >
</ td >
</ tr >
< tr class = " form-field " >
< th scope = " row " valign = " top " >< label >< ? php _e ( 'Thumbnail' , 'woocommerce' ); ?> </label></th>
< td >
< div id = " product_cat_thumbnail " style = " float:left;margin-right:10px; " >< img src = " <?php echo $image ; ?> " width = " 60px " height = " 60px " /></ div >
< div style = " line-height:60px; " >
< input type = " hidden " id = " product_cat_thumbnail_id " name = " product_cat_thumbnail_id " value = " <?php echo $thumbnail_id ; ?> " />
< button type = " submit " class = " upload_image_button button " >< ? php _e ( 'Upload/Add image' , 'woocommerce' ); ?> </button>
< button type = " submit " class = " remove_image_button button " >< ? php _e ( 'Remove image' , 'woocommerce' ); ?> </button>
</ div >
< script type = " text/javascript " >
// Uploading files
var file_frame ;
jQuery ( document ) . on ( 'click' , '.upload_image_button' , function ( event ){
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 ({
title : '<?php _e( ' Choose an image ', ' woocommerce ' ); ?>' ,
button : {
text : '<?php _e( ' Use image ', ' woocommerce ' ); ?>' ,
},
multiple : false
});
// When an image is selected, run a callback.
file_frame . on ( 'select' , function () {
attachment = file_frame . state () . get ( 'selection' ) . first () . toJSON ();
jQuery ( '#product_cat_thumbnail_id' ) . val ( attachment . id );
jQuery ( '#product_cat_thumbnail img' ) . attr ( 'src' , attachment . url );
jQuery ( '.remove_image_button' ) . show ();
});
// Finally, open the modal.
file_frame . open ();
});
jQuery ( document ) . on ( 'click' , '.remove_image_button' , function ( event ){
2013-11-25 13:56:59 +00:00
jQuery ( '#product_cat_thumbnail img' ) . attr ( 'src' , '<?php echo wc_placeholder_img_src(); ?>' );
2013-07-25 16:51:28 +00:00
jQuery ( '#product_cat_thumbnail_id' ) . val ( '' );
jQuery ( '.remove_image_button' ) . hide ();
return false ;
});
</ script >
< div class = " clear " ></ div >
</ td >
</ tr >
< ? php
}
/**
* save_category_fields function .
*
* @ access public
* @ param mixed $term_id Term ID being saved
* @ param mixed $tt_id
* @ param mixed $taxonomy Taxonomy of the term being saved
* @ return void
*/
public function save_category_fields ( $term_id , $tt_id , $taxonomy ) {
if ( isset ( $_POST [ 'display_type' ] ) )
update_woocommerce_term_meta ( $term_id , 'display_type' , esc_attr ( $_POST [ 'display_type' ] ) );
if ( isset ( $_POST [ 'product_cat_thumbnail_id' ] ) )
update_woocommerce_term_meta ( $term_id , 'thumbnail_id' , absint ( $_POST [ 'product_cat_thumbnail_id' ] ) );
delete_transient ( 'wc_term_counts' );
}
/**
* Description for product_cat page to aid users .
*
* @ access public
* @ return void
*/
public function product_cat_description () {
echo 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 of the page.' , 'woocommerce' ) );
}
/**
* Description for shipping class page to aid users .
*
* @ access public
* @ return void
*/
public function shipping_class_description () {
echo wpautop ( __ ( 'Shipping classes can be used to group products of similar type. These groups can then be used by certain shipping methods to provide different rates to different products.' , 'woocommerce' ) );
}
/**
* Thumbnail column added to category admin .
*
* @ access public
* @ param mixed $columns
2013-11-27 09:03:47 +00:00
* @ return array
2013-07-25 16:51:28 +00:00
*/
public function product_cat_columns ( $columns ) {
$new_columns = array ();
$new_columns [ 'cb' ] = $columns [ 'cb' ];
$new_columns [ 'thumb' ] = __ ( 'Image' , 'woocommerce' );
unset ( $columns [ 'cb' ] );
return array_merge ( $new_columns , $columns );
}
/**
* Thumbnail column value added to category admin .
*
* @ access public
* @ param mixed $columns
* @ param mixed $column
* @ param mixed $id
* @ return array
*/
public function product_cat_column ( $columns , $column , $id ) {
if ( $column == 'thumb' ) {
$image = '' ;
$thumbnail_id = get_woocommerce_term_meta ( $id , 'thumbnail_id' , true );
if ( $thumbnail_id )
2013-08-17 01:01:54 +00:00
$image = wp_get_attachment_thumb_url ( $thumbnail_id );
2013-07-25 16:51:28 +00:00
else
2013-11-25 13:56:59 +00:00
$image = wc_placeholder_img_src ();
2013-07-25 16:51:28 +00:00
2014-02-17 10:29:12 +00:00
$columns .= '<img src="' . esc_attr ( $image ) . '" alt="Thumbnail" class="wp-post-image" height="48" width="48" />' ;
2013-07-25 16:51:28 +00:00
}
return $columns ;
}
}
2014-02-17 10:29:12 +00:00
new WC_Admin_Taxonomies ();