2011-08-09 15:16:18 +00:00
< ? php
/**
* Functions used for the attributes section in WordPress Admin
*
2011-08-10 17:11:11 +00:00
* The attributes section lets users add custom attributes to assign to products - they can also be used in the layered nav widget .
2011-08-09 15:16:18 +00:00
*
2011-08-10 17:11:11 +00:00
* @ author WooThemes
2011-08-09 15:16:18 +00:00
* @ category Admin
2011-08-10 17:11:11 +00:00
* @ package WooCommerce
2011-08-09 15:16:18 +00:00
*/
/**
* Attributes admin panel
*
* Shows the created attributes and lets you add new ones .
* The added attributes are stored in the database and can be used for layered navigation .
*/
2011-08-10 17:11:11 +00:00
function woocommerce_attributes () {
2011-08-09 15:16:18 +00:00
2011-09-06 11:11:22 +00:00
global $wpdb , $woocommerce ;
2011-08-09 15:16:18 +00:00
if ( isset ( $_POST [ 'add_new_attribute' ]) && $_POST [ 'add_new_attribute' ]) :
2011-09-21 07:19:29 +00:00
check_admin_referer ( 'woocommerce-add-new_attribute' );
2011-12-07 13:37:52 +00:00
$attribute_name = ( string ) sanitize_title ( $_POST [ 'attribute_name' ]);
2011-08-09 15:16:18 +00:00
$attribute_type = ( string ) $_POST [ 'attribute_type' ];
2011-08-31 12:31:47 +00:00
$attribute_label = ( string ) $_POST [ 'attribute_label' ];
2011-08-09 15:16:18 +00:00
2012-02-05 14:07:34 +00:00
if ( ! $attribute_label ) $attribute_label = ucwords ( $attribute_name );
if ( ! $attribute_name ) $attribute_name = sanitize_title ( $attribute_label );
2011-09-11 13:28:15 +00:00
if ( $attribute_name && strlen ( $attribute_name ) < 30 && $attribute_type && ! taxonomy_exists ( $woocommerce -> attribute_taxonomy_name ( $attribute_name ) )) :
2011-08-09 15:16:18 +00:00
2011-08-31 12:31:47 +00:00
$wpdb -> insert ( $wpdb -> prefix . " woocommerce_attribute_taxonomies " , array ( 'attribute_name' => $attribute_name , 'attribute_label' => $attribute_label , 'attribute_type' => $attribute_type ), array ( '%s' , '%s' ) );
2011-09-16 08:10:12 +00:00
2012-04-16 15:45:39 +00:00
wp_safe_redirect ( get_admin_url () . 'edit.php?post_type=product&page=woocommerce_attributes' );
2011-08-09 15:16:18 +00:00
exit ;
endif ;
elseif ( isset ( $_POST [ 'save_attribute' ]) && $_POST [ 'save_attribute' ] && isset ( $_GET [ 'edit' ])) :
$edit = absint ( $_GET [ 'edit' ]);
2011-09-21 07:19:29 +00:00
check_admin_referer ( 'woocommerce-save-attribute_' . $edit );
2011-08-09 15:16:18 +00:00
if ( $edit > 0 ) :
$attribute_type = $_POST [ 'attribute_type' ];
2011-08-31 12:31:47 +00:00
$attribute_label = ( string ) $_POST [ 'attribute_label' ];
2011-08-09 15:16:18 +00:00
2011-08-31 12:31:47 +00:00
$wpdb -> update ( $wpdb -> prefix . " woocommerce_attribute_taxonomies " , array ( 'attribute_type' => $attribute_type , 'attribute_label' => $attribute_label ), array ( 'attribute_id' => $_GET [ 'edit' ] ), array ( '%s' , '%s' ) );
2011-08-09 15:16:18 +00:00
endif ;
2012-04-16 15:45:39 +00:00
wp_safe_redirect ( get_admin_url () . 'edit.php?post_type=product&page=woocommerce_attributes' );
2011-08-09 15:16:18 +00:00
exit ;
elseif ( isset ( $_GET [ 'delete' ])) :
2011-09-21 07:19:29 +00:00
check_admin_referer ( 'woocommerce-delete-attribute_' . absint ( $_GET [ 'delete' ] ) );
2011-08-09 15:16:18 +00:00
$delete = absint ( $_GET [ 'delete' ]);
if ( $delete > 0 ) :
2011-08-10 17:11:11 +00:00
$att_name = $wpdb -> get_var ( " SELECT attribute_name FROM " . $wpdb -> prefix . " woocommerce_attribute_taxonomies WHERE attribute_id = ' $delete ' " );
2011-08-09 15:16:18 +00:00
2011-08-10 17:11:11 +00:00
if ( $att_name && $wpdb -> query ( " DELETE FROM " . $wpdb -> prefix . " woocommerce_attribute_taxonomies WHERE attribute_id = ' $delete ' " )) :
2011-08-09 15:16:18 +00:00
2011-09-11 13:28:15 +00:00
$taxonomy = $woocommerce -> attribute_taxonomy_name ( $att_name );
2011-08-09 15:16:18 +00:00
if ( taxonomy_exists ( $taxonomy )) :
$terms = get_terms ( $taxonomy , 'orderby=name&hide_empty=0' );
foreach ( $terms as $term ) {
wp_delete_term ( $term -> term_id , $taxonomy );
}
endif ;
2012-04-16 15:45:39 +00:00
wp_safe_redirect ( get_admin_url () . 'edit.php?post_type=product&page=woocommerce_attributes' );
2011-08-09 15:16:18 +00:00
exit ;
endif ;
endif ;
endif ;
if ( isset ( $_GET [ 'edit' ]) && $_GET [ 'edit' ] > 0 ) :
2011-08-10 17:11:11 +00:00
woocommerce_edit_attribute ();
2011-08-09 15:16:18 +00:00
else :
2011-08-10 17:11:11 +00:00
woocommerce_add_attribute ();
2011-08-09 15:16:18 +00:00
endif ;
}
/**
* Edit Attribute admin panel
*
2011-09-11 13:28:15 +00:00
* Shows the interface for changing an attributes type between select and text
2011-08-09 15:16:18 +00:00
*/
2011-08-10 17:11:11 +00:00
function woocommerce_edit_attribute () {
2011-08-09 15:16:18 +00:00
global $wpdb ;
$edit = absint ( $_GET [ 'edit' ]);
2011-08-31 12:31:47 +00:00
$att_type = $wpdb -> get_var ( " SELECT attribute_type FROM " . $wpdb -> prefix . " woocommerce_attribute_taxonomies WHERE attribute_id = ' $edit ' " );
$att_label = $wpdb -> get_var ( " SELECT attribute_label FROM " . $wpdb -> prefix . " woocommerce_attribute_taxonomies WHERE attribute_id = ' $edit ' " );
2011-08-09 15:16:18 +00:00
?>
2011-08-10 17:11:11 +00:00
< div class = " wrap woocommerce " >
< div class = " icon32 icon32-attributes " id = " icon-woocommerce " >< br /></ div >
2012-02-22 09:22:31 +00:00
< h2 >< ? php _e ( 'Edit Attribute' , 'woocommerce' ) ?> </h2>
< form action = " admin.php?page=woocommerce_attributes&edit=<?php echo absint( $edit ); ?> " method = " post " >
< table class = " form-table " >
< tbody >
< tr class = " form-field form-required " >
< th scope = " row " valign = " top " >
< label for = " attribute_label " >< ? php _e ( 'Name' , 'woocommerce' ); ?> </label>
</ th >
< td >
< input name = " attribute_label " id = " attribute_label " type = " text " value = " <?php echo esc_attr( $att_label ); ?> " />
< p class = " description " >< ? php _e ( 'Name for the attribute (shown on the front-end).' , 'woocommerce' ); ?> </p>
</ td >
</ tr >
< tr class = " form-field form-required " >
< th scope = " row " valign = " top " >
< label for = " attribute_type " >< ? php _e ( 'Type' , 'woocommerce' ); ?> </label>
</ th >
< td >
< select name = " attribute_type " id = " attribute_type " >
< option value = " select " < ? php selected ( $att_type , 'select' ); ?> ><?php _e('Select', 'woocommerce') ?></option>
< option value = " text " < ? php selected ( $att_type , 'text' ); ?> ><?php _e('Text', 'woocommerce') ?></option>
</ select >
< p class = " description " >< ? php _e ( 'Determines how you select attributes for products. <strong>Text</strong> allows manual entry via the product page, whereas <strong>select</strong> attribute terms can be defined from this section. If you plan on using an attribute for variations use <strong>select</strong>.' , 'woocommerce' ); ?> </p>
</ td >
</ tr >
</ tbody >
</ table >
< p class = " submit " >< input type = " submit " name = " save_attribute " id = " submit " class = " button-primary " value = " <?php _e('Update', 'woocommerce'); ?> " ></ p >
< ? php wp_nonce_field ( 'woocommerce-save-attribute_' . $edit ); ?>
</ form >
2011-08-09 15:16:18 +00:00
</ div >
< ? php
}
/**
* Add Attribute admin panel
*
* Shows the interface for adding new attributes
*/
2011-08-10 17:11:11 +00:00
function woocommerce_add_attribute () {
2011-09-06 11:11:22 +00:00
global $woocommerce ;
2011-08-09 15:16:18 +00:00
?>
2011-08-10 17:11:11 +00:00
< div class = " wrap woocommerce " >
< div class = " icon32 icon32-attributes " id = " icon-woocommerce " >< br /></ div >
2012-01-05 11:31:22 +00:00
< h2 >< ? php _e ( 'Attributes' , 'woocommerce' ) ?> </h2>
2011-08-09 15:16:18 +00:00
< br class = " clear " />
< div id = " col-container " >
< div id = " col-right " >
< div class = " col-wrap " >
< table class = " widefat fixed " style = " width:100% " >
< thead >
< tr >
2012-01-05 11:31:22 +00:00
< th scope = " col " >< ? php _e ( 'Name' , 'woocommerce' ) ?> </th>
2012-02-21 21:20:33 +00:00
< th scope = " col " >< ? php _e ( 'Slug' , 'woocommerce' ) ?> </th>
2012-01-05 11:31:22 +00:00
< th scope = " col " >< ? php _e ( 'Type' , 'woocommerce' ) ?> </th>
< th scope = " col " colspan = " 2 " >< ? php _e ( 'Terms' , 'woocommerce' ) ?> </th>
2011-08-09 15:16:18 +00:00
</ tr >
</ thead >
< tbody >
< ? php
2011-09-06 11:11:22 +00:00
$attribute_taxonomies = $woocommerce -> get_attribute_taxonomies ();
2011-08-09 15:16:18 +00:00
if ( $attribute_taxonomies ) :
foreach ( $attribute_taxonomies as $tax ) :
?> <tr>
2012-02-21 21:20:33 +00:00
< td >< a href = " edit-tags.php?taxonomy=<?php echo esc_html( $woocommerce->attribute_taxonomy_name ( $tax->attribute_name )); ?>&post_type=product " >< ? php echo esc_html ( $tax -> attribute_label ); ?> </a>
2011-08-09 15:16:18 +00:00
2012-01-05 11:31:22 +00:00
< div class = " row-actions " >< span class = " edit " >< a href = " <?php echo esc_url( add_query_arg('edit', $tax->attribute_id , 'admin.php?page=woocommerce_attributes') ); ?> " >< ? php _e ( 'Edit' , 'woocommerce' ); ?> </a> | </span><span class="delete"><a class="delete" href="<?php echo esc_url( wp_nonce_url( add_query_arg('delete', $tax->attribute_id, 'admin.php?page=woocommerce_attributes'), 'woocommerce-delete-attribute_' . $tax->attribute_id ) ); ?>"><?php _e('Delete', 'woocommerce'); ?></a></span></div>
2011-08-09 15:16:18 +00:00
</ td >
2012-02-21 21:20:33 +00:00
< td >< ? php echo esc_html ( $tax -> attribute_name ); ?> </td>
2011-09-30 18:22:17 +00:00
< td >< ? php echo esc_html ( ucwords ( $tax -> attribute_type ) ); ?> </td>
2011-08-09 15:16:18 +00:00
< td >< ? php
2011-09-11 13:28:15 +00:00
if ( taxonomy_exists ( $woocommerce -> attribute_taxonomy_name ( $tax -> attribute_name ))) :
2011-08-09 15:16:18 +00:00
$terms_array = array ();
2011-09-11 13:28:15 +00:00
$terms = get_terms ( $woocommerce -> attribute_taxonomy_name ( $tax -> attribute_name ), 'orderby=name&hide_empty=0' );
2011-08-09 15:16:18 +00:00
if ( $terms ) :
foreach ( $terms as $term ) :
$terms_array [] = $term -> name ;
endforeach ;
echo implode ( ', ' , $terms_array );
else :
echo '<span class="na">–</span>' ;
endif ;
else :
echo '<span class="na">–</span>' ;
endif ;
?> </td>
2012-01-05 11:31:22 +00:00
< td >< a href = " edit-tags.php?taxonomy=<?php echo esc_html( $woocommerce->attribute_taxonomy_name ( $tax->attribute_name )); ?>&post_type=product " class = " button alignright " >< ? php _e ( 'Configure terms' , 'woocommerce' ); ?> </a></td>
2011-08-09 15:16:18 +00:00
</ tr >< ? php
endforeach ;
else :
2012-01-05 11:31:22 +00:00
?> <tr><td colspan="5"><?php _e('No attributes currently exist.', 'woocommerce') ?></td></tr><?php
2011-08-09 15:16:18 +00:00
endif ;
?>
</ tbody >
</ table >
</ div >
</ div >
< div id = " col-left " >
< div class = " col-wrap " >
< div class = " form-wrap " >
2012-01-05 11:31:22 +00:00
< h3 >< ? php _e ( 'Add New Attribute' , 'woocommerce' ) ?> </h3>
< p >< ? php _e ( 'Attributes let you define extra product data, such as size or colour. You can use these attributes in the shop sidebar using the "layered nav" widgets. Please note: you cannot rename an attribute later on.' , 'woocommerce' ) ?> </p>
2011-09-22 12:41:16 +00:00
< form action = " admin.php?page=woocommerce_attributes " method = " post " >
2011-08-31 12:31:47 +00:00
< div class = " form-field " >
2012-02-21 21:20:33 +00:00
< label for = " attribute_label " >< ? php _e ( 'Name' , 'woocommerce' ); ?> </label>
2011-12-11 15:32:37 +00:00
< input name = " attribute_label " id = " attribute_label " type = " text " value = " " />
2012-01-05 11:31:22 +00:00
< p class = " description " >< ? php _e ( 'Name for the attribute (shown on the front-end).' , 'woocommerce' ); ?> </p>
2011-08-31 12:31:47 +00:00
</ div >
2011-12-11 15:32:37 +00:00
2011-08-31 12:31:47 +00:00
< div class = " form-field " >
2012-02-21 21:20:33 +00:00
< label for = " attribute_name " >< ? php _e ( 'Slug' , 'woocommerce' ); ?> </label>
2011-12-11 15:32:37 +00:00
< input name = " attribute_name " id = " attribute_name " type = " text " value = " " maxlength = " 29 " />
2012-01-05 11:31:22 +00:00
< p class = " description " >< ? php _e ( 'Unique slug/reference for the attribute; must be shorter than 28 characters.' , 'woocommerce' ); ?> </p>
2011-08-09 15:16:18 +00:00
</ div >
2011-12-11 15:32:37 +00:00
2011-08-31 12:31:47 +00:00
< div class = " form-field " >
2012-02-21 21:20:33 +00:00
< label for = " attribute_type " >< ? php _e ( 'Type' , 'woocommerce' ); ?> </label>
2011-08-31 12:31:47 +00:00
< select name = " attribute_type " id = " attribute_type " >
2012-01-05 11:31:22 +00:00
< option value = " select " >< ? php _e ( 'Select' , 'woocommerce' ) ?> </option>
< option value = " text " >< ? php _e ( 'Text' , 'woocommerce' ) ?> </option>
2011-08-31 12:31:47 +00:00
</ select >
2012-01-05 11:31:22 +00:00
< p class = " description " >< ? php _e ( 'Determines how you select attributes for products. <strong>Text</strong> allows manual entry via the product page, whereas <strong>select</strong> attribute terms can be defined from this section. If you plan on using an attribute for variations use <strong>select</strong>.' , 'woocommerce' ); ?> </p>
2011-08-09 15:16:18 +00:00
</ div >
2012-01-05 11:31:22 +00:00
< p class = " submit " >< input type = " submit " name = " add_new_attribute " id = " submit " class = " button " value = " <?php _e('Add Attribute', 'woocommerce'); ?> " ></ p >
2011-09-21 07:19:29 +00:00
< ? php wp_nonce_field ( 'woocommerce-add-new_attribute' ); ?>
2011-08-09 15:16:18 +00:00
</ form >
</ div >
</ div >
</ div >
</ div >
< script type = " text/javascript " >
/* <![CDATA[ */
jQuery ( 'a.delete' ) . click ( function (){
2012-01-05 11:31:22 +00:00
var answer = confirm ( " <?php _e('Are you sure you want to delete this attribute?', 'woocommerce'); ?> " );
2011-08-09 15:16:18 +00:00
if ( answer ) return true ;
return false ;
});
/* ]]> */
</ script >
</ div >
< ? php
}