\n"; $rule .= "RewriteEngine On\n"; $rule .= "RewriteCond %{QUERY_STRING} file=woocommerce_uploads/ [NC]\n"; $rule .= "RewriteRule /ms-files.php$ - [F]\n"; $rule .= "\n\n"; return $rule . $rewrite; } /** * Deleting posts * * Removes variations etc belonging to a deleted post, and clears transients */ function woocommerce_delete_post( $id ) { if ( ! current_user_can( 'delete_posts' ) ) return; if ( $id > 0 ) : if ( $children_products =& get_children( 'post_parent='.$id.'&post_type=product_variation' ) ) : if ($children_products) : foreach ($children_products as $child) : wp_delete_post( $child->ID, true ); endforeach; endif; endif; endif; delete_transient( 'woocommerce_processing_order_count' ); } /** * Preview Emails **/ function woocommerce_preview_emails() { if (isset($_GET['preview_woocommerce_mail'])) : $nonce = $_REQUEST['_wpnonce']; if (!wp_verify_nonce($nonce, 'preview-mail') ) die('Security check'); global $woocommerce, $email_heading; $mailer = $woocommerce->mailer(); $email_heading = __('Email preview', 'woocommerce'); $message = '

WooCommerce sit amet

'; $message.= wpautop('Ut ut est qui euismod parum. Dolor veniam tation nihil assum mazim. Possim fiant habent decima et claritatem. Erat me usus gothica laoreet consequat. Clari facer litterarum aliquam insitam dolor. Gothica minim lectores demonstraverunt ut soluta. Sequitur quam exerci veniam aliquip litterarum. Lius videntur nisl facilisis claritatem nunc. Praesent in iusto me tincidunt iusto. Dolore lectores sed putamus exerci est. '); echo $mailer->wrap_message( $email_heading, $message ); exit; endif; } /** * Prevent non-admin access to backend */ function woocommerce_prevent_admin_access() { if ( get_option('woocommerce_lock_down_admin')=='yes' && !is_ajax() && !current_user_can('edit_posts') ) { wp_safe_redirect(get_permalink(woocommerce_get_page_id('myaccount'))); exit; } } /** * Fix 'insert into post' buttons for images **/ function woocommerce_allow_img_insertion($vars) { $vars['send'] = true; // 'send' as in "Send to Editor" return($vars); } /** * Directory for uploads */ function woocommerce_downloads_upload_dir( $pathdata ) { if (isset($_POST['type']) && $_POST['type'] == 'downloadable_product') : // Uploading a downloadable file $subdir = '/woocommerce_uploads'.$pathdata['subdir']; $pathdata['path'] = str_replace($pathdata['subdir'], $subdir, $pathdata['path']); $pathdata['url'] = str_replace($pathdata['subdir'], $subdir, $pathdata['url']); $pathdata['subdir'] = str_replace($pathdata['subdir'], $subdir, $pathdata['subdir']); return $pathdata; endif; return $pathdata; } function woocommerce_media_upload_downloadable_product() { do_action('media_upload_file'); } /** * Shortcode button in post editor **/ function woocommerce_add_shortcode_button() { if ( ! current_user_can('edit_posts') && ! current_user_can('edit_pages') ) return; if ( get_user_option('rich_editing') == 'true') : add_filter('mce_external_plugins', 'woocommerce_add_shortcode_tinymce_plugin'); add_filter('mce_buttons', 'woocommerce_register_shortcode_button'); endif; } function woocommerce_register_shortcode_button($buttons) { array_push($buttons, "|", "woocommerce_shortcodes_button"); return $buttons; } function woocommerce_add_shortcode_tinymce_plugin($plugin_array) { global $woocommerce; $plugin_array['WooCommerceShortcodes'] = $woocommerce->plugin_url() . '/assets/js/admin/editor_plugin.js'; return $plugin_array; } function woocommerce_refresh_mce($ver) { $ver += 3; return $ver; } /** * Reorder categories on term insertion */ function woocommerce_create_term( $term_id, $tt_id, $taxonomy ) { if (!$taxonomy=='product_cat' && !strstr($taxonomy, 'pa_')) return; $next_id = null; $term = get_term($term_id, $taxonomy); // gets the sibling terms $siblings = get_terms($taxonomy, "parent={$term->parent}&menu_order=ASC&hide_empty=0"); foreach ($siblings as $sibling) { if( $sibling->term_id == $term_id ) continue; $next_id = $sibling->term_id; // first sibling term of the hierarchy level break; } // reorder woocommerce_order_terms( $term, $next_id, $taxonomy ); } /** * Delete terms metas on deletion */ function woocommerce_delete_term( $term_id, $tt_id, $taxonomy ) { $term_id = (int) $term_id; if(!$term_id) return; global $wpdb; $wpdb->query("DELETE FROM {$wpdb->woocommerce_termmeta} WHERE `woocommerce_term_id` = " . $term_id); } /** * Compile styles */ function woocommerce_compile_less_styles() { global $woocommerce; $colors = get_option( 'woocommerce_frontend_css_colors' ); $base_file = $woocommerce->plugin_path() . '/assets/css/woocommerce-base.less'; $less_file = $woocommerce->plugin_path() . '/assets/css/woocommerce.less'; $css_file = $woocommerce->plugin_path() . '/assets/css/woocommerce.css'; // Write less file if ( is_writable( $base_file ) && is_writable( $css_file ) ) { // Colours changed - recompile less if ( ! class_exists( 'lessc' ) ) include_once('includes/lessc.inc.php'); if ( ! class_exists( 'cssmin' ) ) include_once('includes/cssmin.inc.php'); try { // Set default if colours not set if ( ! $colors['primary'] ) $colors['primary'] = '#ad74a2'; if ( ! $colors['secondary'] ) $colors['secondary'] = '#f7f6f7'; if ( ! $colors['highlight'] ) $colors['highlight'] = '#85ad74'; if ( ! $colors['content_bg'] ) $colors['content_bg'] = '#ffffff'; if ( ! $colors['subtext'] ) $colors['subtext'] = '#777777'; // Write new color to base file $color_rules = " @primary: " . $colors['primary'] . "; @primarytext: " . woocommerce_light_or_dark( $colors['primary'], 'desaturate(darken(@primary,50%),18%)', 'desaturate(lighten(@primary,50%),18%)' ) . "; @secondary: " . $colors['secondary'] . "; @secondarytext: " . woocommerce_light_or_dark( $colors['secondary'], 'desaturate(darken(@secondary,60%),18%)', 'desaturate(lighten(@secondary,60%),18%)' ) . "; @highlight: " . $colors['highlight'] . "; @highlightext: " . woocommerce_light_or_dark( $colors['highlight'], 'desaturate(darken(@highlight,60%),18%)', 'desaturate(lighten(@highlight,60%),18%)' ) . "; @contentbg: " . $colors['content_bg'] . "; @subtext: " . $colors['subtext'] . "; "; file_put_contents( $base_file, $color_rules ); $less = new lessc( $less_file ); $compiled_css = $less->parse(); $compiled_css = CssMin::minify( $compiled_css ); if ( $compiled_css ) file_put_contents( $css_file, $compiled_css ); } catch ( exception $ex ) { wp_die( __('Could not compile woocommerce.less:', 'woocommerce') . ' ' . $ex->getMessage() ); } } } /** * Add extra bulk action options to mark orders as complete or processing * Using Javascript until WordPress core fixes: http://core.trac.wordpress.org/ticket/16031 **/ function woocommerce_bulk_admin_footer() { global $post_type; if ( 'shop_order' == $post_type ) { ?> current_action(); switch ( $action ) { case 'mark_completed': $new_status = 'completed'; $report_action = 'marked_completed'; break; case 'mark_processing': $new_status = 'processing'; $report_action = 'marked_processing'; break; default: return; } $changed = 0; foreach( $_REQUEST['post'] as $post_id ) { $order = new WC_Order( $post_id ); $order->update_status( $new_status, __( 'Order status changed by bulk edit:', 'woocommerce' ) ); $changed++; } $sendback = add_query_arg( array( 'post_type' => 'shop_order', $report_action => $changed, 'ids' => join( ',', $post_ids ) ), '' ); wp_redirect( $sendback ); exit(); } /** * Show confirmation message that order status changed for number of orders **/ function woocommerce_order_bulk_admin_notices() { global $post_type, $pagenow; if ( isset( $_REQUEST['marked_completed'] ) || isset( $_REQUEST['marked_processing'] ) ) { $number = isset( $_REQUEST['marked_processing'] ) ? $_REQUEST['marked_processing'] : $_REQUEST['marked_completed']; if ( 'edit.php' == $pagenow && 'shop_order' == $post_type ) { $message = sprintf( _n( 'Order status changed.', '%s order statuses changed.', $number ), number_format_i18n( $number ) ); echo '

' . $message . '

'; } } }