Drag and drop categories and taxonomies : woocommerce full admin new release

After a 12 months of silence here comes a new release of my preview version of a special enhanced admin interface for woocommerce. Its main purpose is to provide a better interface for viewing and admistering products, from the point of view an organized shop manager that works intensively with categories

The new version labelled 0.3 adds drag and drop for categories. This feature is for the moment limited to dealing with sub categories, whereas a real drag and drop component should also deal with category order, but for the moment do not expect that much : use this plugin to sort categories and sub categories on big databases where you need to get a clear idea of a hierarchy tree.

The idea for this feature came after I had to deal with a big migration from Magento to Woocommerce, where a lot of categories were imported with their products and I needed to check that everything was OK. having no public theme yet, I needed a more convenient interface for viewing the results of the import.

Link :

Other plugins work with taxonomies :

  • Taxonomy terms order is the most famous of all plugins with more than 20000 downloads . It uses the admin menu style interface for allowing taxonomy order.

Bridging prestashop features to wordpress

Like to have the best of both worlds ? seems prestashop and wordpress can communicate, though coding standards can make the develpment of such an integration difficult, even  for experienced PHP developers :

Using prestashop modules or content for automatic  product display in your wordpres blog

  • The plugin "Prestashop Integration" defines a new wordpress shortcode that will display  prestashop products in a wordpress installation. Pretty straightforward to get running, no big surprise here.

Using Prestashop Authentification Information to get worpdress behave as logged in

  • if you are familiar with Symfony and Composer, you can try this external authentification class : PrestashopBridge. for myself, in spite of expert wordpress knowledge, some knowledge of prestashop and composer tools,  I did not manage to get it working : only for the rough guys !
  • If you want to share users between two installations you have plugins available
    • prestashop-user-compatibility synchronises passwords of prestashop installation to wordpress: but it requires to have synchronized users. This plugin seems to be more like a one time helper for migrating from prestashop to wordpress
    • This is why I build prestawpbestworlds, because I want the best of both worlds : this is a premium plugin for wordpress (cost 99$) :  a one way  real time user and login status synchronizer that will allow currently prestashop customer to user wordpress as connected user, without even having to login again. Login, user creation, logout are all processed via prestashop connection information.

Information management with WORDPRESS / PART II : bulk editing

While comparing wordpress woocommerce with magento, I pointed out the very efficient bulk editing feature for products in magento : it's quite amazing to find out that new versions of wordpress bring features you would not even imagine. Version 2.7 of wordpress, brought to the world in december 2008, brought the famous Batch and inline editing, also known as BULK EDITING. Our main interest of bulk editing in wordpress for information management is the bulk editing of tags and categories. Codex mentions fields that can be bulk edited.

Bulk Edit allows the fields, Author, Comments Allowed, Status, Pings Allowed, and Sticky, to be changed for all the selected Posts

Limitations : wordpress codex highlights the fact that Categories and Tags can be ADDED in bulk to a set of Posts, but it is not possible to CHANGE, or DELETE, a Category, or Tag, for those Posts.

the delete category feature is an important issue, as moving products, posts, or other elements does involve adding categories but obviously you'd need to remove categories from posts : this was the subject of a discussion topic on wordpress forum where some piece of code was posted : read Remove Categories with bulk edit to find this piece of code that could be transformed into a plugin or simply added to your theme.

Woocommerce extra bulk edit

woocommerce plugin is a perfect exemple of the extensibility of the bulk editing feature : price information (% increase or decrease), sale information,status, weight and stock information can be bulk edited. developers will find interesting coding information for adding extra fields to the bulk editing feature in woocommerce codebase.




Other extensions and plugins

for coders

for non coders

Woocommerce BACS GATEWAY : display bank account info on order page

default woocommerce order page suffers on major drawback, it does not display bank account info for customers who have chose to pay via BACS  (Bank Account Clearing System), more commonly known as direct bank/wire transfer. This payment method comes integrated within standard woocommerce plugin (more info). The bank account number can be configured in the payment config area of woocommerce, and it is displayed on the confirmation page. But not on the order page that the customer can view any time after the order. Here is a piece of code that displays specific bank transfer information  at the bottom of  the order display page :



function po201407view_order($order_id)
 echo $order_id;
 $order=new WC_Order( $order_id );
  if ( $order->payment_method !== 'bacs') return;
	//echo $order->payment_method_title;
	$bacs = new WC_Gateway_BACS();
	//print_r( $bacs->account_details);
	  $bacs->thankyou_page( $order_id);


Magento and WordPress integration : custom connection solution

Wordpress has various mega menu possibilities that we integrated in magento

WordPress has various mega menu possibilities that we integrated in magento

Lately we were comparing   ecommerce solutions that we have experienced in various projects : Magento for big and expensive projects versus woocommerce for smaller projects that are bound to expand. A big advantage of wordpress is that it integrates powerful content management and powerful ecommerce solutions within the same platform. And in some cases, Magento solution for e-commerce integrated with wordpress for content management can be the very good solution that takes the best of both worlds.

Today we review solutions that allow reciprocal integration of data between wordpress and Magento.

Basic wordpress content into magento

installing magento extensions require some expertise but is worth the time spent. Integrating wordpress posts into magento pages is easy with the  Magento WordPress Integration extension that fits worpdress post list and content within magento templates.


Global WordPress Magento integration : custom solutions

  • First, you must consider installation on the same server, sharing stylesheets and body elements to have consistency across the whole site : before choosing magento template and wordpress theme, bear in mind that stylesheets and javascript from both themes will be shared.
  • Next step consists of taking wordpress theme elements and sending them to a cache folder for integration in to Magento. We propose to integrate following wordpress elements in Magento
    • Main wordpress menu integration into Magento
    • Widgets elements (footer, sidebar)
    • latest articles

woocommerce order product list

The latest version of woocommerce adds a feature to the order list  :  the Purchased column describes items purchased for that order : the number of items is displayed and a click on the line displays all order products.Interesting behaviour when there are many products per order : if you have one or two product per average order, it might be better to display everything in the column, to get a whole view of various recent orders , like a sales report:

woocommerce-order-sales-reportthe code is very simple, use the manage_shop_order_posts_custom_column action to add some text to the purchased column :


add_action( 'manage_shop_order_posts_custom_column' , 'po20140324_addColumns_column', 10, 2 );
function po20140324_addColumns_column( $column ) {
 global $post, $woocommerce, $the_order;

    switch ( $column ) {

        case 'order_items' :
            $terms = $the_order->get_items();

	      if ( is_array( $terms ) ) {
             	foreach($terms as $term)
		echo '<br />' . $term['item_meta']['_qty'][0] .' x ' . $term['name'] .'';
              } else {
              	_e( 'No product to display ? ', 'woocommerce' );



Woocommerce : how to choose your theme

There are thousand of free and premium themes available for woo commerce. Before choosing one, make sure you have checked a few important things

  • most professional wordpress / woocommerce themes are responsive : they can display your website in mobile phones. But you do need to check the websites on all formats including IPADS, Iphones, and Android. Prepare a list of all resolutions devices can have, including windows powered phones that can turn out very tricky if someone uses internet explorer (see below)
  • after you have checked the theme on various sizes, check it on various browsers : a wordpress theme that works on Internet explorer 8 is the sign of very good HTML standard compliance, so you need to be able to check on various versions of Internet Explorer, which means many computers available !
  • Have a look at the stylesheet : it should be not too big and include not too many extra useless formatting.  But a good woo commerce theme comes with its own woo commerce stylesheet, and removes the original woo commerce style sheet

woocommerce restrict content based on product purchase


  • Sell virtual content  : video access, online course, elearning
  • Create content with wordpress : use custom type content for elearning
  • Create chapters : sell multiple pages / content within on product
  • Easy interface
  • Protect access : only purchasers of content can view
  • Fully integrated within woocommerce


There are many ways to restrict content for customers who have purchased specific products. We have tried virtuoso plugin from Code Canyon without enthusiasm because it bypasses one essential native feature of woo commerce  : downloadable products. Using woo commerce with downloadable products can give your customers access based on what product they have purchased.

We will build our premium content commerce with a specific custom post type that we call "Premium Content". This article describes how to make the content accessible only to customers who have purchased associated products.

it is necessary, if you are selling wordpress content (sell  self hosted videos with woo commerce for example), to block unauthorized access.

  • First step is to configure woo commerce to use redirections for virtual downloadable products : in woo commerce settings page, check

    Downloadable Products / File download method : redirect only

  • Second step is to configure a specific custom post type for restricted content : use the post type url in the product file download section to give access to customers.
  • Third step is to protect the custom post type entries from unauthorized access via some templating code. You have some info on this video, we will be releasing the full code and procedure soon. http://www.youtube.com/watch?v=Ury5dF3mJ9U
  • functions we are developing :
    • woocommerce_customer_can_download_or_view : checks if current page is one of customer's orders products file path(s), using get_downloadable_file_urls
    • woocommerce_get_products_allow_download  : list products that can allow viewing or downloading of this url
    • Widget  that displays all customers downloads


other useful information and tips


other subject

customer submitted product selling http://docs.wedevs.com/woocommerce-downloadable-product/

Woocommerce product admin category persistence

Can be a long task to edit products within woocommerce.

the code below can be integrated in a plugin or within your theme : it will store the last selected product  category filter in the product admin and restore it at next display of product page

add_filter( 'init', 'wpse34956_persistent_posts_list_mode' ,1);
function wpse34956_persistent_posts_list_mode() {

// take into account post types that support excerpts
$post_type = isset( $_GET['post_type'] ) ? $_GET['post_type'] : '';

if (is_admin() && $post_type=="product")
if ( isset( $_GET['product_cat'] ) ) {
// save the list mode
update_user_meta( get_current_user_id(), 'product_cat' . $post_type, $_GET['product_cat'] );

// retrieve the list mode
if ( $product_cat = get_user_meta( get_current_user_id(), 'product_cat' . $post_type, true ) )
{ $_GET['product_cat'] = $product_cat;}


Magento vs woocommerce vs prestashop comparison

There was a time when I was working on multiple solutions, thinking positively that a lot of time spent on each of them would give me a great insight of  all possibilities that a mix of solutions could offer. And year after year, solutions evolve and some get better and easier to maintain and develop, and some not. I have been using prestashop, magento and wordpress / woocommerce for years and here is a quick review of all these solutions, from the point of view of the developer but also of the website owner, and of course of the end user. Curiously you will find that all these point of view lead to the same conclusion : wordpress woocommerce for all !

Magento / WOOcommerce / Prestashop comparison

The developer point of view

Prestashop is very simple to setup and offers a very quick configuration process, especially when you are working in France, because it is a french product. I quickly found out that developing themes, extensions and modules for prestashop is a bit strange and dodgy, and forces you to learn and maintain some strange knowledge of an extra language from the old twentieth century : smarty templating language. Just as if learning CSS, HTML, Javascript, PHP and Mysql was not enough. In my opinion, the simple fact that prestashop is using smarty shows that its developers have forgotten the original purpose of PHP. And to finish on prestashop, I have a few very good shops running on it for years, without any problem and doing good sales, but I have one problem :  I am too afraid to perform a software upgrade. don't ask me why but that's a looser solution for me.

Magento is incredibly smart. When I mean smart I mean you'll need a few months before you can even understand how to access data from the database. you need serious ZEND specific OOP knowledge and a lot of time and expertise to code Magento. And that's expensive. Yes a developer with magento expertise can earn a lot, but who pays. check that below in the website owner section.

in comparison with the truck and the pickup above,  Wordpress at first glance looks like a horse carriage. In its default distribution package, wordpress is just a blogging platform. Well that's what is was a few years ago when I started using it just for blogging. And I was developing my own e commerce package and trying various CMS platforms like Modx or silverstripe. And suddenly  Wordpress evolved to a full featured CMS platform that I integrated with MAgento and prestashop websites for serious content management those two cannot afford. And suddenly e commerce plugins came to the market. I've tried a few and my preferred is woocommerce. As a developper I just love using the same platform for content management, shopping cart, order management, online payment. And I've never felt limited by the almost perfect customisation development that wordpress integrates : themes and plugins   just illustrate the perfect division of tasks for a web site developer. If you want to do OOP like Magento, you can. But you don't have too. If you want to use Smarty like prestashop you can, but there's really no point. And if you want to develop once and reuse code in various website projects, well you can mix all aspects of a website with wordpress. That's just magic I think, at the cost of a rigourous selection of plugins that will take you more than an hour to select and install.

The shop owner point of view

It all depends which kind of shop owner you are. If you can afford one or two full time senior developers, then Magento is all right for you. If not, you will find that unless you have a good friend developer,  magento is expensive. Too expensive for my customers. But Yes it comes with a lot of features, but not more than prestashop and woocommerce. At some early stage, Magento was a leader in bulk product editing, very useful when playing with categories and products. But it's now 4 years that WordPress does that job quite well (see our article on information management with wordpress)

Prestashop is not expensive : in fact it runs very well on shared hosting. It also comes all featured, and is much easier to configure and setup than magento, but it has less customisation, especially graphic, possibilities.

WordPress is in my opinion the best compromise between cost, usability and security. as a website owner, you will, just like your developer, love the unique administration platform with drag and drop image uploading, drag and drop content management (via plugins), easy maintenance and upgrades meaning reduced administration costs. Of course this comes at a price : default worpdress installation is not e commerce ready, you need a good professional partner to set you up. After this initial step is done (finding the right web site expert), you have the guarantee of a stable platform for all your web development need : content management , advertising, product management, customer management, newsletter, etc...

The end user point of view

Yes you are building e commerce presence : the end user is the first and last contributor to your project, because it brings the finance that will ensure durability of your online project. Well I might repeat myself now but after a few years of ecommerce development I always felt very frustrated but the lack of Content Management offered by native ecommerce platforms like magento and prestashop. Now that wordpress has its own ecommerce capabilities, it is a very sensible choice to move all your ecommerce data to a single platform. And as a e commerce buyer, I like a website with a lot of information not only on products but also on the company that distributes them. WordPress offers so many layout capabilities that your online customer with feel in good company before he goes to purchase your   product.

Conclusion : woocommerce only ?

did I miss something ? are there really some unique features on magento and prestashop that woocommerce cannot perform ?


How to recreate woocommerce pages

When you activate woocommerce plugin, a message box pops up at the top of the wordpress dashboard, inviting you to let the plugin automatically create specific woocommerce pages : shopping cart, order page, user page, etc... You can also remove the notice if you want to create the pages yourself. But if you change your mind and would like woocommerce to create the pages there is a tip that is documented on a stackoverflow conversation, it's very simple :

What ended up working for me was adding "&install_woocommerce_pages=true" to the Settings page URL.


woocommerce hack : free shipping incentive sales

When configuring woocommerce for wordpress shopping rates, you can opt for a combination of flat rate and free shipping with  minimum amount. by default woocommerce shopping cart will not behave perfectly. First hack will let the shopping cart shipping method selection update automatically when minimum order for free shipping is reached. Second hack will display an incentive message wehn minimum amount for free shipping is not reached. Everything is coded via filters and actions, and will work with woocommerce 2.0 and above

first hack : update shipping display choice when free shipping  minimum amount is reached

/**   from  https://github.com/woothemes/woocommerce/issues/1499
 *  Hide Standard Shipping option when free shipping is available
add_filter( 'woocommerce_available_shipping_methods', 'hide_standard_shipping_when_free_is_available' , 10, 1 );
function hide_standard_shipping_when_free_is_available( $available_methods ) {

    if( isset( $available_methods['free_shipping'] ) AND isset( $available_methods['flat_rate'] ) ) {

        // remove standard shipping option
        unset( $available_methods['flat_rate'] );

    return $available_methods;

second hack : display incentive message when minimum amount is not reached, including display of minimum amount and remaining amount to add to shopping cart. Very efficient ! 

 add_action( 'woocommerce_cart_totals_after_shipping', 'webmasterbulletin_sales_incentive'  );
       function  webmasterbulletin_sales_incentive()
            global $woocommerce;
            $all_methods = $woocommerce->shipping->load_shipping_methods();
          $available_methods = $woocommerce->shipping->get_available_shipping_methods(); 
           if (isset( $all_methods['free_shipping'] )) 
           if (isset( $available_methods['flat_rate'] ))
              echo "<tr><td colspan='2'><div class='sales_incentive'><b> 
              buy more products  :</b><br>
               only " .  woocommerce_price($all_methods['free_shipping']->settings['min_amount']-  $woocommerce->cart->cart_contents_total   ) . "  more and get <br>
              <b>free shipping starting at  
              " .    woocommerce_price($all_methods['free_shipping']->settings['min_amount']   )    . " </b>


Magento deposit extension

Just a quick review of the MAGENTO Deposit extension, that I just purchased on the indiesweb company website. this extension is useful if you want your customers to pay deposit, percentage of the final product price for example, to make a reservation on a non  available product in our case.

Apart from the fact that the extension is very easy to install, does the job perfectly, I must mention that the team behind it are very efficient and dedicated Magento Expert who WILL without a doubt help you getting it online if some issues arise with compatibility with other modules on your install   : big congratulations to INDIESWEB for looking after their customers even in complicated scenarios, like the one I have, where INDIESWEB had to reproduce my MAGENTO install on their own local servers to identify the extension conflict that was blocking the correct display of the deposist on some invoices within the magento admin and customer account display on the front end. 


woocommerce : non available zero products

The woommerce defaut behaviour for products where price is not set is to disable the add to cart button  : my customer wanted this behaviour for product that have zero mentionned. Default woocommerce makes zeo product free!, but we decided to disable shopping cart for those too. very simple thanks to filters and template system:


  • in your functions .php , add
     add_filter("woocommerce_free_price_html", "po_free");
     function po_free($price)
        return '' ;


  • then create in your theme te following files 
    • /woocommerce/single-product/add-to-cart/simple.php
    • /woocommerce/loop/add-to-cart.php
    • and modify the first conditionnal test to make woocommerce display "not available" if price is zero : 
      if(( $product->get_price() === ''   || $product->get_price()==0 )&& $product->product_type != 'external' ) {echo "<b>NON DISPONIBLE</b>" ;return;}


Ecommerce with wordpress, a gold rush

Our first wordpress ecommerce plugin comparison, a while ago, is getting outdated quickly as new solutions come to the market. It is now obvious that professionnal wordpress ecommerce is possible, with functions that come near to magento or prestashop, first one being costly and sercond one being not so customizable.  Well wordpress solutions are now mature and I would suggest to investigate those who rely on custom post type, as this guarantees long term compatibility with wordpress evolution and plugins.

Enter wp shopified ( http://www.wp-shopified.com/)

wp shopified costs less than 50$ and for that price you get a codebase that is tighlty integrated into core features of wordpress : 

  • products are wordpress custom post types
  • wordpress user base
  • menu is generated with worpdress menu system
  • thumbnails are generated with worpdress core functions 

Magento : set list sort order for categories and search

Big online shops have a lot of users, and as such they can afford to try features that most novice users won't even understand : that is the case for the sort order for lists, that in Magento displays name, price and relevance. It is very nice to have that feature but in my customer's case the default list was ordered by "best choice", which doesn't mean a lot to users. Of course, the magento configuration allows to set the list default order, but that only works for categories, not for search. And that is a big problem because search results should be ordered by relevance : that is the principle of the search.

I decided to work on search and installed the better store search plugin, which after a few hours of hard work on my magento install gave me full satisfaction. But to my surprise, it is not the plugin itself which gave me hard work, but magento 's undocumented feature of list sorting. Here is what I did to get my search results ordered by relevance descending always 


  • Magento configuration : I display onlists
  • view/lists.phtml  . removed the toolbar display
  • extension  : wrote my own Mage_Catalog_Product_List extension that overrides the session / default valur for the sort order :
     class Webmsterbulletin_Catalog_Block_Product_List   extends Mage_Catalog_Block_Product_List 
    function  _getProductCollection() {
         if (strstr($_SERVER["REQUEST_URI"], "catalogsearch")) 
         {$orderField="relevance";$orderOrder="desc";} else {$orderField="name";$orderOrder="asc";}
         Mage::log($_SERVER["REQUEST_URI"] . $orderField,null,'layout.log');
           return  parent::_getProductCollection()
           ->setOrder($orderField, $orderOrder);
           //->addAttributeToSort('relevance', 'desc');
           // return  parent::_getProductCollection()->setOrder('name', 'ASC');

    What's happening here ? as you can see I rely (very bad practise) on the good old php_self  variable to detect if we are in the processs of returning search results. If so, then we set the order to relevance desc, otherwise we go name ascending, you could go price ascending too if you wanted !!

  • Oh, last but not least, the config.xml  that overrides  Mage_Catalog_Product_List :
    <?xml version="1.0"?>  

Magento : how to learn from free templates

The power of Magento is great but it requires long days of learning and suffering to get through relative simple features, such as the now common front page slide banner. I had a quick look at magento free templates on google and was conquered by Magento 's classic theme, the kind of  stuff that's really given free of charge when I would have paid for it. It actually comes with an interesting development of Magento's block systems, and demonstrates how to add a custom block between navigation and content : the prototype glider that scrolls images is defined a cms static block, which is then called in the home page CMS  custom xml definition, with a reference to the slider block that's positionned in phtml files and declared in the xml layouts as a core/text_list type . Impressive stuff : that's pure  magento design and illustrates how versatile the system is.

Links : 25 free templates for Magento

Magento log cleaner

Magento, in earlier versions, does not seem to handle log cleaning very well. A lot of configuration options are vailable under the configuration  / Advanced / System menu, that seem to have an impact on the cron.php process. But trying to remove logs this way is a complicated task that involves full log counting (select count on mage_log_visitor) and the result is not always there, don't know why. A full truncate on log tables seems more appropriate, as described on the knowledge base, to use with caution obviously : Magento Maintenance Script was posted a few days ago but I tried it and it's pretty efficient. Let us know how it performed on your install, on mine it works well. Go ahead after you've performed the appropriate backups !