This was not as easy as I initially thought.
This will show show every attribute…. apparently by default WC hides any attribute that doesn’t have any terms. They’re already in the code, just with a display:none;
.
function wpa_120062_scripts(){ ?>
<script type="text/javascript">
jQuery(document).ready(function($) {
$('.woocommerce_attributes > div').removeClass('closed').show();
$('#woocommerce_attributes a.expand_all').click();
});
</script>
<?php
}
add_action('admin_print_footer_scripts', 'wpa_120062_scripts');
Depending on whether you plan to click all the “Visible on the product page” checkboxes, you can add some data to the attributes for a particular post when it is created. Per some other WPA questions, I’ve hooked into transition_post_status
. The “auto-draft” status, supposedly only fires on first creation… from there it either goes to “draft” or any of the other post statuses.
function wpa_120062_new_product($new_status, $old_status, $post){
if ( $new_status == "auto-draft" && isset( $post->post_type ) && $post->post_type == 'product' ){
// do stuff here
$defaults = array ( 'pa_color' => array (
'name' => 'pa_color',
'value' => '',
'position' => 1,
'is_visible' => 1,
'is_variation' => 1,
'is_taxonomy' => 1,
),
'pa_capacity' => array (
'name' => 'pa_capacity',
'value' => '',
'position' => 2,
'is_visible' => 1,
'is_variation' => 1,
'is_taxonomy' => 1,
)
);
update_post_meta( $post->ID , '_product_attributes', $defaults );
}
}
add_action('transition_post_status', 'wpa_120062_new_product', 10, 3);
pa_capacity
and pa_color
are just some sample attributes that I already had installed.
PS- I would suggest updating wpa_120062_scripts
to only display on product edit screens, but I’m a little fried after that.
EDIT
We can use the woocommerce function wc_get_attribute_taxonomies()
to dynamically get all the attributes and loop through them:
function wpa_120062_new_product($new_status, $old_status, $post){
if ( $new_status == "auto-draft" && isset( $post->post_type ) && $post->post_type == 'product' ){
if( function_exists( 'wc_get_attribute_taxonomies' ) && ( $attribute_taxonomies = wc_get_attribute_taxonomies() ) ) {
$defaults = array();
foreach ( $attribute_taxonomies as $tax ) {
$name = wc_attribute_taxonomy_name( $tax->attribute_name );
// do stuff here
$defaults[ $name ] = array (
'name' => $name,
'value' => '',
'position' => 1,
'is_visible' => 1,
'is_variation' => 1,
'is_taxonomy' => 1,
);
update_post_meta( $post->ID , '_product_attributes', $defaults );
}
}
}
}
add_action('transition_post_status', 'wpa_120062_new_product', 10, 3);
PS- I think the defaults are going to be a little different in WC2.1. This isn’t quite working the same for me any longer with my bleeding edge git versions.