woocommerce/admin/woocommerce-admin-init.php

738 lines
27 KiB
PHP
Raw Normal View History

2011-12-12 16:34:56 +00:00
<?php
/**
* WooCommerce Admin
2012-08-01 12:43:46 +00:00
*
2011-12-12 16:34:56 +00:00
* Main admin file which loads all settings panels and sets up admin menus.
*
* @author WooThemes
* @category Admin
2012-08-14 12:21:34 +00:00
* @package WooCommerce/Admin
* @version 1.6.4
2011-12-12 16:34:56 +00:00
*/
2012-08-15 18:15:06 +00:00
/**
* Functions for the product post type
*/
2012-08-14 12:21:34 +00:00
include_once( 'post-types/product.php' );
2012-08-15 18:15:06 +00:00
/**
* Functions for the shop_coupon post type
*/
2012-08-14 12:21:34 +00:00
include_once( 'post-types/shop_coupon.php' );
2012-08-15 18:15:06 +00:00
/**
* Functions for the shop_order post type
*/
2012-08-14 12:21:34 +00:00
include_once( 'post-types/shop_order.php' );
2012-08-15 18:15:06 +00:00
/**
* Hooks in admin
*/
2012-08-14 12:21:34 +00:00
include_once( 'woocommerce-admin-hooks.php' );
2012-08-15 18:15:06 +00:00
/**
* Functions in admin
*/
2012-08-14 12:21:34 +00:00
include_once( 'woocommerce-admin-functions.php' );
2012-08-15 18:15:06 +00:00
/**
* Functions for handling taxonomies
*/
2012-08-14 12:21:34 +00:00
include_once( 'woocommerce-admin-taxonomies.php' );
2011-12-12 16:34:56 +00:00
/**
2012-08-14 12:21:34 +00:00
* Setup the Admin menu in WordPress
2012-08-01 12:43:46 +00:00
*
2012-08-14 12:21:34 +00:00
* @access public
* @return void
2011-12-12 16:34:56 +00:00
*/
function woocommerce_admin_menu() {
global $menu, $woocommerce;
2012-08-01 12:43:46 +00:00
if ( current_user_can( 'manage_woocommerce' ) )
$menu[] = array( '', 'read', 'separator-woocommerce', '', 'wp-menu-separator woocommerce' );
2012-08-01 12:43:46 +00:00
2012-06-06 17:39:14 +00:00
$main_page = add_menu_page(__('WooCommerce', 'woocommerce'), __('WooCommerce', 'woocommerce'), 'manage_woocommerce', 'woocommerce' , 'woocommerce_settings_page', null, '55.5' );
2012-08-01 12:43:46 +00:00
2012-01-18 11:53:34 +00:00
$reports_page = add_submenu_page('woocommerce', __('Reports', 'woocommerce'), __('Reports', 'woocommerce') , 'view_woocommerce_reports', 'woocommerce_reports', 'woocommerce_reports_page');
2012-08-01 12:43:46 +00:00
2012-09-20 15:35:15 +00:00
add_submenu_page('edit.php?post_type=product', __('Attributes', 'woocommerce'), __('Attributes', 'woocommerce'), 'manage_product_terms', 'woocommerce_attributes', 'woocommerce_attributes_page');
2012-08-01 12:43:46 +00:00
add_action('load-' . $main_page, 'woocommerce_admin_help_tab');
add_action('load-' . $reports_page, 'woocommerce_admin_help_tab');
2012-08-01 12:43:46 +00:00
2012-08-22 18:22:22 +00:00
$print_css_on = apply_filters( 'woocommerce_screen_ids', array( 'toplevel_page_woocommerce', 'woocommerce_page_woocommerce_settings', 'woocommerce_page_woocommerce_reports', 'woocommerce_page_woocommerce_status', 'product_page_woocommerce_attributes', 'edit-tags.php', 'edit.php', 'index.php', 'post-new.php', 'post.php' ) );
2012-08-01 12:43:46 +00:00
foreach ( $print_css_on as $page )
add_action( 'admin_print_styles-'. $page, 'woocommerce_admin_css' );
}
2012-08-14 12:21:34 +00:00
add_action('admin_menu', 'woocommerce_admin_menu', 9);
/**
* Setup the Admin menu in WordPress - later priority so they appear last
*
* @access public
* @return void
*/
2012-05-21 08:25:34 +00:00
function woocommerce_admin_menu_after() {
2012-07-29 10:21:17 +00:00
add_submenu_page( 'woocommerce', __('WooCommerce Settings', 'woocommerce'), __('Settings', 'woocommerce') , 'manage_woocommerce', 'woocommerce_settings', 'woocommerce_settings_page');
add_submenu_page( 'woocommerce', __('WooCommerce Status', 'woocommerce'), __('System Status', 'woocommerce') , 'manage_woocommerce', 'woocommerce_status', 'woocommerce_status_page');
2012-05-21 08:25:34 +00:00
}
2012-08-14 12:21:34 +00:00
add_action('admin_menu', 'woocommerce_admin_menu_after', 50);
/**
* Highlights the correct top level admin menu item for post type add screens.
2012-08-14 12:21:34 +00:00
*
* @access public
* @return void
*/
function woocommerce_admin_menu_highlight() {
2012-07-23 12:56:05 +00:00
global $menu, $submenu, $parent_file, $submenu_file, $self, $post_type, $taxonomy;
$to_highlight_types = array( 'shop_order', 'shop_coupon' );
if ( isset( $post_type ) ) {
if ( in_array( $post_type, $to_highlight_types ) ) {
$submenu_file = 'edit.php?post_type=' . $post_type;
$parent_file = 'woocommerce';
}
if ( 'product' == $post_type ) {
$screen = get_current_screen();
if ( $screen->base == 'edit-tags' && 'pa_' == substr( $taxonomy, 0, 3 ) ) {
$submenu_file = 'woocommerce_attributes';
$parent_file = 'edit.php?post_type=' . $post_type;
}
}
}
2012-08-01 12:43:46 +00:00
2012-10-01 10:43:52 +00:00
if ( isset( $submenu['woocommerce'] ) && isset( $submenu['woocommerce'][2] ) ) {
2012-07-31 14:04:05 +00:00
$submenu['woocommerce'][0] = $submenu['woocommerce'][2];
unset( $submenu['woocommerce'][2] );
}
2012-08-01 12:43:46 +00:00
2012-07-23 12:56:05 +00:00
// Sort out Orders menu when on the top level
2012-10-01 10:43:52 +00:00
if ( ! current_user_can( 'manage_woocommerce' ) ) {
2012-07-23 12:56:05 +00:00
foreach ( $menu as $key => $menu_item ) {
if ( strpos( $menu_item[0], _x('Orders', 'Admin menu name', 'woocommerce') ) === 0 ) {
2012-08-01 12:43:46 +00:00
2012-07-23 12:56:05 +00:00
$menu_name = _x('Orders', 'Admin menu name', 'woocommerce');
$menu_name_count = '';
if ( $order_count = woocommerce_processing_order_count() ) {
$menu_name_count = " <span class='awaiting-mod update-plugins count-$order_count'><span class='processing-count'>" . number_format_i18n( $order_count ) . "</span></span>" ;
}
2012-08-01 12:43:46 +00:00
2012-07-23 12:56:05 +00:00
$menu[$key][0] = $menu_name . $menu_name_count;
$submenu['edit.php?post_type=shop_order'][5][0] = $menu_name;
break;
}
}
}
}
2012-08-14 12:21:34 +00:00
add_action( 'admin_head', 'woocommerce_admin_menu_highlight' );
2012-02-15 17:31:44 +00:00
/**
2012-08-14 12:21:34 +00:00
* Show notices in admin.
*
* @access public
* @return void
2012-02-15 17:31:44 +00:00
*/
2012-02-15 23:45:55 +00:00
function woocommerce_admin_install_notice() {
2012-02-15 17:31:44 +00:00
?>
<div id="message" class="updated woocommerce-message wc-connect">
<div class="squeezer">
2012-02-21 20:49:58 +00:00
<h4><?php _e( '<strong>Welcome to WooCommerce</strong> &#8211; You\'re almost ready to start selling :)', 'woocommerce' ); ?></h4>
2012-07-29 10:21:17 +00:00
<p class="submit"><a href="<?php echo add_query_arg('install_woocommerce_pages', 'true', admin_url('admin.php?page=woocommerce_settings')); ?>" class="button-primary"><?php _e( 'Install WooCommerce Pages', 'woocommerce' ); ?></a> <a class="skip button-primary" href="<?php echo add_query_arg('skip_install_woocommerce_pages', 'true', admin_url('admin.php?page=woocommerce_settings')); ?>"><?php _e('Skip setup', 'woocommerce'); ?></a></p>
2012-02-15 17:31:44 +00:00
</div>
</div>
<?php
}
2012-02-17 12:49:32 +00:00
function woocommerce_admin_installed_notice() {
?>
<div id="message" class="updated woocommerce-message wc-connect">
<div class="squeezer">
2012-02-21 20:49:58 +00:00
<h4><?php _e( '<strong>WooCommerce has been installed</strong> &#8211; You\'re ready to start selling :)', 'woocommerce' ); ?></h4>
2012-08-01 12:43:46 +00:00
2012-07-29 10:21:17 +00:00
<p class="submit"><a href="<?php echo admin_url('admin.php?page=woocommerce_settings'); ?>" class="button-primary"><?php _e( 'Settings', 'woocommerce' ); ?></a> <a class="docs button-primary" href="http://www.woothemes.com/woocommerce-docs/"><?php _e('Documentation', 'woocommerce'); ?></a></p>
2012-08-01 12:43:46 +00:00
2012-02-17 12:49:32 +00:00
<p><a href="https://twitter.com/share" class="twitter-share-button" data-url="http://www.woothemes.com/woocommerce/" data-text="A open-source (free) #ecommerce plugin for #WordPress that helps you sell anything. Beautifully." data-via="WooThemes" data-size="large" data-hashtags="WooCommerce">Tweet</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script></p>
</div>
</div>
<?php
2012-08-01 12:43:46 +00:00
2012-02-17 12:49:32 +00:00
// Set installed option
update_option('woocommerce_installed', 0);
}
2012-02-15 17:31:44 +00:00
function woocommerce_admin_notices_styles() {
2012-08-01 12:43:46 +00:00
// Installed notices
2012-02-15 23:45:55 +00:00
if ( get_option('woocommerce_installed')==1 ) {
2012-08-01 12:43:46 +00:00
2012-03-01 00:02:17 +00:00
wp_enqueue_style( 'woocommerce-activation', plugins_url( '/assets/css/activation.css', dirname( __FILE__ ) ) );
2012-08-01 12:43:46 +00:00
2012-02-15 23:45:55 +00:00
if (get_option('skip_install_woocommerce_pages')!=1 && woocommerce_get_page_id('shop')<1 && !isset($_GET['install_woocommerce_pages']) && !isset($_GET['skip_install_woocommerce_pages'])) {
add_action( 'admin_notices', 'woocommerce_admin_install_notice' );
2012-02-17 12:49:32 +00:00
} elseif ( !isset($_GET['page']) || $_GET['page']!='woocommerce' ) {
add_action( 'admin_notices', 'woocommerce_admin_installed_notice' );
2012-02-15 23:45:55 +00:00
}
2012-08-01 12:43:46 +00:00
}
}
2012-08-14 12:21:34 +00:00
add_action( 'admin_print_styles', 'woocommerce_admin_notices_styles' );
2011-12-12 16:34:56 +00:00
/**
2012-08-14 12:21:34 +00:00
* Include some admin files conditonally.
*
* @access public
* @return void
2011-12-12 16:34:56 +00:00
*/
function woocommerce_admin_init() {
2012-02-20 14:29:51 +00:00
global $pagenow, $typenow;
2012-08-01 12:43:46 +00:00
2012-01-12 00:54:45 +00:00
ob_start();
2012-08-01 12:43:46 +00:00
2012-08-14 12:21:34 +00:00
if ( $typenow=='post' && isset( $_GET['post'] ) && ! empty( $_GET['post'] ) ) {
2012-02-20 14:29:51 +00:00
$typenow = $post->post_type;
2012-08-14 12:21:34 +00:00
} elseif ( empty( $typenow ) && ! empty( $_GET['post'] ) ) {
$post = get_post( $_GET['post'] );
2012-02-20 14:29:51 +00:00
$typenow = $post->post_type;
2012-08-14 12:21:34 +00:00
}
2011-12-12 16:34:56 +00:00
2012-08-14 12:21:34 +00:00
if ( $pagenow == 'index.php' ) {
2012-08-01 12:43:46 +00:00
2011-12-12 16:34:56 +00:00
include_once( 'woocommerce-admin-dashboard.php' );
2012-08-01 12:43:46 +00:00
2012-08-14 12:21:34 +00:00
} elseif ( $pagenow == 'admin.php' && isset( $_GET['import'] ) ) {
2012-08-01 12:43:46 +00:00
2011-12-12 16:34:56 +00:00
include_once( 'woocommerce-admin-import.php' );
2012-08-01 12:43:46 +00:00
2012-08-14 12:21:34 +00:00
} elseif ( $pagenow == 'post-new.php' || $pagenow == 'post.php' || $pagenow == 'edit.php' ) {
2012-08-01 12:43:46 +00:00
include_once( 'post-types/writepanels/writepanels-init.php' );
2012-08-14 12:21:34 +00:00
if ( in_array( $typenow, array( 'product', 'shop_coupon', 'shop_order' ) ) )
add_action('admin_print_styles', 'woocommerce_admin_help_tab');
2012-08-01 12:43:46 +00:00
2012-08-14 12:21:34 +00:00
} elseif ( $pagenow == 'users.php' || $pagenow == 'user-edit.php' || $pagenow == 'profile.php' ) {
2012-08-01 12:43:46 +00:00
2011-12-21 23:44:08 +00:00
include_once( 'woocommerce-admin-users.php' );
2012-08-01 12:43:46 +00:00
2012-02-20 14:29:51 +00:00
}
2012-09-10 11:26:26 +00:00
// Register importers
if ( defined( 'WP_LOAD_IMPORTERS' ) ) {
include_once( 'importers/importers-init.php' );
}
2011-12-12 16:34:56 +00:00
}
2012-08-14 12:21:34 +00:00
add_action('admin_init', 'woocommerce_admin_init');
2012-01-30 19:24:52 +00:00
2011-12-12 16:34:56 +00:00
/**
2012-08-14 12:21:34 +00:00
* Include and display the settings page.
*
* @access public
* @return void
2011-12-12 16:34:56 +00:00
*/
function woocommerce_settings_page() {
include_once( 'woocommerce-admin-settings.php' );
woocommerce_settings();
}
2012-08-14 12:21:34 +00:00
/**
* Include and display the reports page.
*
* @access public
* @return void
*/
2011-12-12 16:34:56 +00:00
function woocommerce_reports_page() {
include_once( 'woocommerce-admin-reports.php' );
woocommerce_reports();
}
2012-08-14 12:21:34 +00:00
/**
* Include and display the attibutes page.
*
* @access public
* @return void
*/
2011-12-12 16:34:56 +00:00
function woocommerce_attributes_page() {
include_once( 'woocommerce-admin-attributes.php' );
woocommerce_attributes();
}
2012-08-14 12:21:34 +00:00
/**
* Include and display the status page.
*
* @access public
* @return void
*/
2012-05-21 08:25:34 +00:00
function woocommerce_status_page() {
include_once( 'woocommerce-admin-status.php' );
woocommerce_status();
}
2011-12-12 16:34:56 +00:00
2012-08-14 12:21:34 +00:00
2011-12-12 16:34:56 +00:00
/**
2012-08-14 12:21:34 +00:00
* On activation, include the installer and run it.
*
* @access public
* @return void
2011-12-12 16:34:56 +00:00
*/
function activate_woocommerce() {
include_once( 'woocommerce-admin-install.php' );
update_option( 'skip_install_woocommerce_pages', 0 );
2012-02-15 17:31:44 +00:00
update_option( 'woocommerce_installed', 1 );
2011-12-12 16:34:56 +00:00
do_install_woocommerce();
}
2012-08-14 12:21:34 +00:00
/**
* Include the installer and run it.
*
* @access public
* @return void
*/
2011-12-12 16:34:56 +00:00
function install_woocommerce() {
include_once( 'woocommerce-admin-install.php' );
do_install_woocommerce();
}
2012-01-18 11:53:34 +00:00
/**
2012-08-14 12:21:34 +00:00
* Include and add help tabs to WordPress admin.
*
* @access public
* @return void
2012-01-18 11:53:34 +00:00
*/
function woocommerce_admin_help_tab() {
include_once( 'woocommerce-admin-content.php' );
woocommerce_admin_help_tab_content();
}
2012-08-01 12:43:46 +00:00
2012-08-14 12:21:34 +00:00
2011-12-12 16:34:56 +00:00
/**
2012-08-14 12:21:34 +00:00
* Include admin scripts and styles.
*
* @access public
* @return void
2011-12-12 16:34:56 +00:00
*/
function woocommerce_admin_scripts() {
global $woocommerce, $pagenow, $post, $wp_query;
2012-08-01 12:43:46 +00:00
2011-12-12 16:34:56 +00:00
$suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min';
2012-08-01 12:43:46 +00:00
2011-12-12 16:34:56 +00:00
// Register scripts
wp_register_script( 'woocommerce_admin', $woocommerce->plugin_url() . '/assets/js/admin/woocommerce_admin'.$suffix.'.js', array('jquery', 'jquery-ui-widget', 'jquery-ui-core'), $woocommerce->version );
wp_register_script( 'jquery-ui-datepicker', $woocommerce->plugin_url() . '/assets/js/admin/ui-datepicker.js', array('jquery','jquery-ui-core'), $woocommerce->version );
wp_register_script( 'woocommerce_writepanel', $woocommerce->plugin_url() . '/assets/js/admin/write-panels'.$suffix.'.js', array('jquery', 'jquery-ui-datepicker'), $woocommerce->version );
wp_register_script( 'ajax-chosen', $woocommerce->plugin_url() . '/assets/js/chosen/ajax-chosen.jquery'.$suffix.'.js', array('jquery', 'chosen'), $woocommerce->version );
wp_register_script( 'chosen', $woocommerce->plugin_url() . '/assets/js/chosen/chosen.jquery'.$suffix.'.js', array('jquery'), $woocommerce->version );
2012-08-01 12:43:46 +00:00
2011-12-12 16:34:56 +00:00
// Get admin screen id
$screen = get_current_screen();
// WooCommerce admin pages
2012-08-22 18:22:22 +00:00
if (in_array( $screen->id, apply_filters( 'woocommerce_screen_ids', array( 'toplevel_page_woocommerce', 'woocommerce_page_woocommerce_settings', 'woocommerce_page_woocommerce_reports', 'edit-shop_order', 'edit-shop_coupon', 'shop_coupon', 'shop_order', 'edit-product', 'product' ) ) ) ) :
2012-08-01 12:43:46 +00:00
2011-12-12 16:34:56 +00:00
wp_enqueue_script( 'woocommerce_admin' );
wp_enqueue_script('farbtastic');
wp_enqueue_script( 'ajax-chosen' );
2011-12-18 13:41:42 +00:00
wp_enqueue_script( 'chosen' );
2012-03-26 17:30:00 +00:00
wp_enqueue_script( 'jquery-ui-sortable' );
2011-12-12 16:34:56 +00:00
endif;
2012-08-01 12:43:46 +00:00
2011-12-12 16:34:56 +00:00
// Edit product category pages
if (in_array( $screen->id, array('edit-product_cat') )) :
2012-08-01 12:43:46 +00:00
2011-12-12 16:34:56 +00:00
wp_enqueue_script( 'media-upload' );
wp_enqueue_script( 'thickbox' );
2012-08-01 12:43:46 +00:00
2011-12-12 16:34:56 +00:00
endif;
// Product/Coupon/Orders
if (in_array( $screen->id, array( 'shop_coupon', 'shop_order', 'product' ))) :
2012-08-01 12:43:46 +00:00
2011-12-12 16:34:56 +00:00
wp_enqueue_script( 'woocommerce_writepanel' );
wp_enqueue_script( 'jquery-ui-datepicker' );
wp_enqueue_script( 'media-upload' );
wp_enqueue_script( 'thickbox' );
wp_enqueue_script( 'ajax-chosen' );
2011-12-18 13:41:42 +00:00
wp_enqueue_script( 'chosen' );
wp_enqueue_script( 'plupload-all' );
2012-08-01 12:43:46 +00:00
$woocommerce_witepanel_params = array(
'remove_item_notice' => __("Remove this item? If you have previously reduced this item's stock, or this order was submitted by a customer, will need to manually restore the item's stock.", 'woocommerce'),
'remove_attribute' => __('Remove this attribute?', 'woocommerce'),
2012-02-13 19:21:52 +00:00
'name_label' => __('Name', 'woocommerce'),
'remove_label' => __('Remove', 'woocommerce'),
'click_to_toggle' => __('Click to toggle', 'woocommerce'),
'values_label' => __('Value(s)', 'woocommerce'),
'text_attribute_tip' => __('Enter some text, or some attributes by pipe (|) separating values.', 'woocommerce'),
'visible_label' => __('Visible on the product page', 'woocommerce'),
'used_for_variations_label' => __('Used for variations', 'woocommerce'),
'new_attribute_prompt' => __('Enter a name for the new attribute term:', 'woocommerce'),
2012-01-22 02:37:11 +00:00
'calc_totals' => __("Calculate totals based on order items, discount amount, and shipping? Note, you will need to (optionally) calculate tax rows and cart discounts manually.", 'woocommerce'),
'calc_line_taxes' => __("Calculate line taxes? This will calculate taxes based on the customers country. If no billing/shipping is set it will use the store base country.", 'woocommerce'),
2012-01-05 11:31:22 +00:00
'copy_billing' => __("Copy billing information to shipping information? This will remove any currently entered shipping information.", 'woocommerce'),
'load_billing' => __("Load the customer's billing information? This will remove any currently entered billing information.", 'woocommerce'),
'load_shipping' => __("Load the customer's shipping information? This will remove any currently entered shipping information.", 'woocommerce'),
2012-07-22 12:50:45 +00:00
'featured_label' => __('Featured', 'woocommerce'),
'tax_or_vat' => $woocommerce->countries->tax_or_vat(),
2011-12-12 16:34:56 +00:00
'prices_include_tax' => get_option('woocommerce_prices_include_tax'),
'round_at_subtotal' => get_option( 'woocommerce_tax_round_at_subtotal' ),
2012-01-05 11:31:22 +00:00
'meta_name' => __('Meta Name', 'woocommerce'),
'meta_value' => __('Meta Value', 'woocommerce'),
'no_customer_selected' => __('No customer selected', 'woocommerce'),
'tax_label' => __('Tax Label:', 'woocommerce'),
'compound_label' => __('Compound:', 'woocommerce'),
'cart_tax_label' => __('Cart Tax:', 'woocommerce'),
'shipping_tax_label' => __('Shipping Tax:', 'woocommerce'),
2011-12-12 16:34:56 +00:00
'plugin_url' => $woocommerce->plugin_url(),
'ajax_url' => admin_url('admin-ajax.php'),
'add_order_item_nonce' => wp_create_nonce("add-order-item"),
'add_attribute_nonce' => wp_create_nonce("add-attribute"),
2012-01-13 21:25:39 +00:00
'calc_totals_nonce' => wp_create_nonce("calc-totals"),
2011-12-12 16:34:56 +00:00
'get_customer_details_nonce' => wp_create_nonce("get-customer-details"),
2012-07-31 17:26:25 +00:00
'search_products_nonce' => wp_create_nonce("search-products"),
2011-12-12 16:34:56 +00:00
'calendar_image' => $woocommerce->plugin_url().'/assets/images/calendar.png',
2012-09-20 13:43:52 +00:00
'post_id' => $post->ID,
'currency_format_num_decimals' => (int) get_option( 'woocommerce_price_num_decimals' ),
'currency_format_symbol' => get_woocommerce_currency_symbol(),
'currency_format_decimal_sep' => stripslashes( get_option( 'woocommerce_price_decimal_sep' ) ),
'currency_format_thousand_sep' => stripslashes( get_option( 'woocommerce_price_thousand_sep' ) ),
'currency_format' => str_replace( array( '%1$s', '%2$s' ), array( '%s', '%v' ), get_woocommerce_price_format() ) // For accounting JS
2011-12-12 16:34:56 +00:00
);
2012-08-01 12:43:46 +00:00
2011-12-12 16:34:56 +00:00
wp_localize_script( 'woocommerce_writepanel', 'woocommerce_writepanel_params', $woocommerce_witepanel_params );
2012-08-01 12:43:46 +00:00
2011-12-12 16:34:56 +00:00
endif;
2012-08-01 12:43:46 +00:00
// Term ordering - only when sorting by term_order
2012-07-16 19:21:44 +00:00
if ( ( strstr( $screen->id, 'edit-pa_' ) || ( ! empty( $_GET['taxonomy'] ) && in_array( $_GET['taxonomy'], apply_filters( 'woocommerce_sortable_taxonomies', array( 'product_cat' ) ) ) ) ) && ! isset( $_GET['orderby'] ) ) :
2011-12-12 16:34:56 +00:00
wp_register_script( 'woocommerce_term_ordering', $woocommerce->plugin_url() . '/assets/js/admin/term-ordering.js', array('jquery-ui-sortable'), $woocommerce->version );
2011-12-12 16:34:56 +00:00
wp_enqueue_script( 'woocommerce_term_ordering' );
2012-08-01 12:43:46 +00:00
$taxonomy = isset( $_GET['taxonomy'] ) ? $_GET['taxonomy'] : '';
2012-08-01 12:43:46 +00:00
$woocommerce_term_order_params = array(
2011-12-12 16:34:56 +00:00
'taxonomy' => $taxonomy
);
2012-08-01 12:43:46 +00:00
2011-12-12 16:34:56 +00:00
wp_localize_script( 'woocommerce_term_ordering', 'woocommerce_term_ordering_params', $woocommerce_term_order_params );
2012-08-01 12:43:46 +00:00
2011-12-12 16:34:56 +00:00
endif;
2012-08-01 12:43:46 +00:00
// Product sorting - only when sorting by menu order on the products page
if ( current_user_can('edit_others_pages') && $screen->id == 'edit-product' && isset( $wp_query->query['orderby'] ) && $wp_query->query['orderby'] == 'menu_order title' ) {
2012-08-01 12:43:46 +00:00
wp_enqueue_script( 'woocommerce_product_ordering', $woocommerce->plugin_url() . '/assets/js/admin/product-ordering.js', array('jquery-ui-sortable'), '1.0', true );
2012-08-01 12:43:46 +00:00
}
2011-12-12 16:34:56 +00:00
// Reports pages
2012-08-22 18:22:22 +00:00
if ( $screen->id == apply_filters( 'woocommerce_reports_screen_id', 'woocommerce_page_woocommerce_reports' ) ) {
2011-12-12 16:34:56 +00:00
wp_enqueue_script( 'jquery-ui-datepicker' );
wp_enqueue_script( 'flot', $woocommerce->plugin_url() . '/assets/js/admin/jquery.flot'.$suffix.'.js', 'jquery', '1.0' );
wp_enqueue_script( 'flot-resize', $woocommerce->plugin_url() . '/assets/js/admin/jquery.flot.resize'.$suffix.'.js', array('jquery', 'flot'), '1.0' );
2012-08-01 12:43:46 +00:00
2012-08-14 12:21:34 +00:00
}
2011-12-12 16:34:56 +00:00
}
2012-08-14 12:21:34 +00:00
add_action( 'admin_enqueue_scripts', 'woocommerce_admin_scripts' );
2011-12-12 16:34:56 +00:00
/**
2012-08-14 12:21:34 +00:00
* Queue WooCommerce CSS.
*
* @access public
* @return void
2011-12-12 16:34:56 +00:00
*/
function woocommerce_admin_css() {
global $woocommerce, $typenow, $post;
if ($typenow=='post' && isset($_GET['post']) && !empty($_GET['post'])) :
$typenow = $post->post_type;
elseif (empty($typenow) && !empty($_GET['post'])) :
$post = get_post($_GET['post']);
$typenow = $post->post_type;
endif;
2012-08-01 12:43:46 +00:00
2011-12-12 16:34:56 +00:00
if ( $typenow == '' || $typenow=="product" || $typenow=="shop_order" || $typenow=="shop_coupon" ) :
wp_enqueue_style( 'thickbox' );
wp_enqueue_style( 'woocommerce_admin_styles', $woocommerce->plugin_url() . '/assets/css/admin.css' );
wp_enqueue_style( 'jquery-ui-style', (is_ssl()) ? 'https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/smoothness/jquery-ui.css' : 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/smoothness/jquery-ui.css' );
2011-12-12 16:34:56 +00:00
endif;
2012-08-01 12:43:46 +00:00
2011-12-12 16:34:56 +00:00
wp_enqueue_style('farbtastic');
2012-08-01 12:43:46 +00:00
2011-12-12 16:34:56 +00:00
do_action('woocommerce_admin_css');
}
2012-08-14 12:21:34 +00:00
/**
2012-08-14 12:21:34 +00:00
* Queue admin menu icons CSS.
2012-08-01 12:43:46 +00:00
*
2012-08-14 12:21:34 +00:00
* @access public
* @return void
*/
function woocommerce_admin_menu_styles() {
global $woocommerce;
wp_enqueue_style( 'woocommerce_admin_menu_styles', $woocommerce->plugin_url() . '/assets/css/menu.css' );
}
2012-08-14 12:21:34 +00:00
add_action( 'admin_print_styles', 'woocommerce_admin_menu_styles' );
2011-12-12 16:34:56 +00:00
/**
2012-08-14 12:21:34 +00:00
* Reorder the WC menu items in admin.
*
* @access public
* @param mixed $menu_order
* @return void
2011-12-12 16:34:56 +00:00
*/
function woocommerce_admin_menu_order( $menu_order ) {
2012-08-01 12:43:46 +00:00
2011-12-12 16:34:56 +00:00
// Initialize our custom order array
$woocommerce_menu_order = array();
// Get the index of our custom separator
$woocommerce_separator = array_search( 'separator-woocommerce', $menu_order );
2012-08-01 12:43:46 +00:00
2011-12-12 16:34:56 +00:00
// Get index of product menu
$woocommerce_product = array_search( 'edit.php?post_type=product', $menu_order );
// Loop through menu order and do some rearranging
foreach ( $menu_order as $index => $item ) :
if ( ( ( 'woocommerce' ) == $item ) ) :
$woocommerce_menu_order[] = 'separator-woocommerce';
$woocommerce_menu_order[] = $item;
$woocommerce_menu_order[] = 'edit.php?post_type=product';
unset( $menu_order[$woocommerce_separator] );
unset( $menu_order[$woocommerce_product] );
elseif ( !in_array( $item, array( 'separator-woocommerce' ) ) ) :
$woocommerce_menu_order[] = $item;
endif;
endforeach;
2012-08-01 12:43:46 +00:00
2011-12-12 16:34:56 +00:00
// Return order
return $woocommerce_menu_order;
}
2012-08-14 12:21:34 +00:00
2011-12-12 16:34:56 +00:00
add_action('menu_order', 'woocommerce_admin_menu_order');
2012-08-14 12:21:34 +00:00
/**
* woocommerce_admin_custom_menu_order function.
*
* @access public
* @return void
*/
2011-12-12 16:34:56 +00:00
function woocommerce_admin_custom_menu_order() {
2012-08-14 12:21:34 +00:00
if ( ! current_user_can( 'manage_woocommerce' ) )
return false;
2011-12-12 16:34:56 +00:00
return true;
}
2012-08-14 12:21:34 +00:00
add_action( 'custom_menu_order', 'woocommerce_admin_custom_menu_order' );
2011-12-12 16:34:56 +00:00
/**
* Admin Head
2012-08-01 12:43:46 +00:00
*
2011-12-12 16:34:56 +00:00
* Outputs some styles in the admin <head> to show icons on the woocommerce admin pages
2012-08-14 12:21:34 +00:00
*
* @access public
* @return void
2011-12-12 16:34:56 +00:00
*/
function woocommerce_admin_head() {
global $woocommerce;
2012-08-01 12:43:46 +00:00
2012-08-14 12:21:34 +00:00
if ( ! current_user_can( 'manage_woocommerce' ) ) return false;
2011-12-12 16:34:56 +00:00
?>
<style type="text/css">
<?php if ( isset($_GET['taxonomy']) && $_GET['taxonomy']=='product_cat' ) : ?>
.icon32-posts-product { background-position: -243px -5px !important; }
<?php elseif ( isset($_GET['taxonomy']) && $_GET['taxonomy']=='product_tag' ) : ?>
.icon32-posts-product { background-position: -301px -5px !important; }
<?php endif; ?>
</style>
<?php
}
2012-08-14 12:21:34 +00:00
2012-01-06 16:10:12 +00:00
add_action('admin_head', 'woocommerce_admin_head');
2012-08-14 12:21:34 +00:00
2012-01-06 16:10:12 +00:00
/**
* Add functionality to the image uploader on product pages to exclude an image
2012-08-14 12:21:34 +00:00
*
* @access public
* @param mixed $fields
* @param mixed $object
* @return void
*/
2012-01-06 16:10:12 +00:00
function woocommerce_exclude_image_from_product_page_field( $fields, $object ) {
2012-08-01 12:43:46 +00:00
2012-01-06 16:10:12 +00:00
if (!$object->post_parent) return $fields;
2012-08-01 12:43:46 +00:00
2012-01-06 16:10:12 +00:00
$parent = get_post( $object->post_parent );
2012-08-01 12:43:46 +00:00
2012-01-06 16:10:12 +00:00
if ($parent->post_type!=='product') return $fields;
2012-08-01 12:43:46 +00:00
2012-01-06 16:10:12 +00:00
$exclude_image = (int) get_post_meta($object->ID, '_woocommerce_exclude_image', true);
2012-08-01 12:43:46 +00:00
2012-01-06 16:10:12 +00:00
$label = __('Exclude image', 'woocommerce');
2012-08-01 12:43:46 +00:00
2012-01-06 16:10:12 +00:00
$html = '<input type="checkbox" '.checked($exclude_image, 1, false).' name="attachments['.$object->ID.'][woocommerce_exclude_image]" id="attachments['.$object->ID.'][woocommerce_exclude_image" />';
2012-08-01 12:43:46 +00:00
2012-01-06 16:10:12 +00:00
$fields['woocommerce_exclude_image'] = array(
'label' => $label,
'input' => 'html',
'html' => $html,
'value' => '',
'helps' => __('Enabling this option will hide it from the product page image gallery.', 'woocommerce')
);
2012-08-01 12:43:46 +00:00
2012-01-06 16:10:12 +00:00
return $fields;
}
2012-08-14 12:21:34 +00:00
add_filter('attachment_fields_to_edit', 'woocommerce_exclude_image_from_product_page_field', 1, 2);
add_filter('attachment_fields_to_save', 'woocommerce_exclude_image_from_product_page_field_save', 1, 2);
add_action('add_attachment', 'woocommerce_exclude_image_from_product_page_field_add');
/**
* Save the meta for exlcuding images from galleries.
*
* @access public
* @param mixed $post
* @param mixed $attachment
* @return void
*/
2012-01-06 16:10:12 +00:00
function woocommerce_exclude_image_from_product_page_field_save( $post, $attachment ) {
if (isset($_REQUEST['attachments'][$post['ID']]['woocommerce_exclude_image'])) :
delete_post_meta( (int) $post['ID'], '_woocommerce_exclude_image' );
update_post_meta( (int) $post['ID'], '_woocommerce_exclude_image', 1);
else :
delete_post_meta( (int) $post['ID'], '_woocommerce_exclude_image' );
update_post_meta( (int) $post['ID'], '_woocommerce_exclude_image', 0);
endif;
2012-08-01 12:43:46 +00:00
2012-01-06 16:10:12 +00:00
return $post;
2012-08-01 12:43:46 +00:00
2012-01-06 16:10:12 +00:00
}
2012-08-14 12:21:34 +00:00
/**
* Add the meta for exlcuding images from galleries.
*
* @access public
* @param mixed $post_id
* @return void
*/
2012-01-06 16:10:12 +00:00
function woocommerce_exclude_image_from_product_page_field_add( $post_id ) {
2012-03-29 09:31:04 +00:00
add_post_meta( $post_id, '_woocommerce_exclude_image', 0, true );
2012-01-11 19:37:33 +00:00
}
2012-08-14 12:21:34 +00:00
2012-01-11 19:37:33 +00:00
/**
* Duplicate a product action
2012-08-14 12:21:34 +00:00
*
* @access public
* @return void
2012-01-11 19:37:33 +00:00
*/
function woocommerce_duplicate_product_action() {
include_once('includes/duplicate_product.php');
woocommerce_duplicate_product();
}
2012-08-14 12:21:34 +00:00
add_action('admin_action_duplicate_product', 'woocommerce_duplicate_product_action');
/**
* Post updated messages
2012-08-14 12:21:34 +00:00
*
* @access public
* @param mixed $messages
* @return void
*/
function woocommerce_product_updated_messages( $messages ) {
global $post, $post_ID;
2012-08-01 12:43:46 +00:00
$messages['product'] = array(
0 => '', // Unused. Messages start at index 1.
1 => sprintf( __('Product updated. <a href="%s">View Product</a>', 'woocommerce'), esc_url( get_permalink($post_ID) ) ),
2 => __('Custom field updated.', 'woocommerce'),
3 => __('Custom field deleted.', 'woocommerce'),
4 => __('Product updated.', 'woocommerce'),
5 => isset($_GET['revision']) ? sprintf( __('Product restored to revision from %s', 'woocommerce'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
2012-03-16 15:15:27 +00:00
6 => sprintf( __('Product published. <a href="%s">View Product</a>', 'woocommerce'), esc_url( get_permalink($post_ID) ) ),
2012-03-05 10:04:23 +00:00
7 => __('Product saved.', 'woocommerce'),
8 => sprintf( __('Product submitted. <a target="_blank" href="%s">Preview Product</a>', 'woocommerce'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
9 => sprintf( __('Product scheduled for: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview Product</a>', 'woocommerce'),
2012-03-05 10:04:23 +00:00
date_i18n( __( 'M j, Y @ G:i', 'woocommerce' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ),
10 => sprintf( __('Product draft updated. <a target="_blank" href="%s">Preview Product</a>', 'woocommerce'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
);
2012-08-01 12:43:46 +00:00
$messages['shop_order'] = array(
0 => '', // Unused. Messages start at index 1.
1 => __('Order updated.', 'woocommerce'),
2 => __('Custom field updated.', 'woocommerce'),
3 => __('Custom field deleted.', 'woocommerce'),
4 => __('Order updated.', 'woocommerce'),
5 => isset($_GET['revision']) ? sprintf( __('Order restored to revision from %s', 'woocommerce'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
6 => __('Order updated.', 'woocommerce'),
2012-03-05 10:04:23 +00:00
7 => __('Order saved.', 'woocommerce'),
8 => __('Order submitted.', 'woocommerce'),
9 => sprintf( __('Order scheduled for: <strong>%1$s</strong>.', 'woocommerce'),
2012-03-05 10:04:23 +00:00
date_i18n( __( 'M j, Y @ G:i', 'woocommerce' ), strtotime( $post->post_date ) ) ),
10 => __('Order draft updated.', 'woocommerce')
);
$messages['shop_coupon'] = array(
0 => '', // Unused. Messages start at index 1.
1 => __('Coupon updated.', 'woocommerce'),
2 => __('Custom field updated.', 'woocommerce'),
3 => __('Custom field deleted.', 'woocommerce'),
4 => __('Coupon updated.', 'woocommerce'),
5 => isset($_GET['revision']) ? sprintf( __('Coupon restored to revision from %s', 'woocommerce'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
6 => __('Coupon updated.', 'woocommerce'),
2012-03-05 10:04:23 +00:00
7 => __('Coupon saved.', 'woocommerce'),
8 => __('Coupon submitted.', 'woocommerce'),
9 => sprintf( __('Coupon scheduled for: <strong>%1$s</strong>.', 'woocommerce'),
2012-03-05 10:04:23 +00:00
date_i18n( __( 'M j, Y @ G:i', 'woocommerce' ), strtotime( $post->post_date ) ) ),
10 => __('Coupon draft updated.', 'woocommerce')
);
2012-08-01 12:43:46 +00:00
return $messages;
}
2012-08-14 12:21:34 +00:00
add_filter('post_updated_messages', 'woocommerce_product_updated_messages');
/**
* Post updated messages
2012-08-14 12:21:34 +00:00
*
* @access public
* @param mixed $types
* @return void
*/
function woocommerce_admin_comment_types_dropdown( $types ) {
$types['order_note'] = __( 'Order notes', 'woocommerce' );
return $types;
2012-08-14 12:21:34 +00:00
}
add_filter( 'admin_comment_types_dropdown', 'woocommerce_admin_comment_types_dropdown' );