Changelog

  • The WooCommerce 2.2.4 release is now available via WordPress.org or automatic update in your administration panel. Thanks to all of our contributors who’ve been helping out.

    There were several minor fixes in this release which you can read about inside the changelog. A total of 52 commits made it into this release.

    (As always, the comments on this post are closed because this is not the right platform for support requests.)


  • The WooCommerce 2.2.3 release is now available via WordPress.org or automatic update in your administration panel. Thanks to all of our contributors who’ve been helping out.

    There were several fixes in this release, including a minor security fix for an XSS issue in the reports section. Read more about the fixes in the changelog. A total of 78 commits made it into this release.

    (As always, the comments on this post are closed because this is not the right platform for support requests.)


  • The WooCommerce 2.2.2 release is now available via WordPress.org or automatic update in your administration panel. Thanks to all of our contributors who’ve been helping out.

    There are only three changes in this release which can be found in the changelog. A total of 6 commits made it into this fix release.

    (As always, the comments on this post are closed because this is not the right platform for support requests.)


  • The WooCommerce 2.2.1 release is now available via WordPress.org or automatic update in your administration panel. Thanks to all of our contributors who’ve been helping out.

    There are only three changes in this release which can be found in the changelog. A total of 6 commits made it into this fix release.

    (As always, the comments on this post are closed because this is not the right platform for support requests.)


  • Finally we’re proud to announce WC 2.2 (Prowling Pangolin) is live! 2.2 is our 9th major release and has been in development since 2.1 was released back in February.

    Some Stats on This Release

    To highlight the work that’s gone into 2.2, since 2.1 I would have loved to have shown more stats from Github, but instead saw this:

    This comparison is big! We’re only showing the most recent 250 commits

    I think that pretty much covers how much work has been done, but from the data I was able to scrape there have been:

    • 47 contributors
    • 1670 commits
    • 553229 additions
    • 972950 deletions

    That’s staggering, so huge props to everyone who has contributed via Github, and also not forgetting the translation teams on Transifex!

    Release Highlights for Developers

    Upgrading to 2.2

    Aside from testing before pushing to live (use a staging site) developers should be aware of the upgrade script which runs in 2.2. The script will:

    1. Update some deprecated options such as woocommerce_ship_to_billing.
    2. Convert the old order statuses (taxonomy) to the new ‘post status’ formats.
    3. Update variations to include new stock meta data.
    4. Add new capabilities to admin users for webhooks.

    Users will be prompted to run this in WP admin after upgrading.

    What Comes Next?

    WC 2.3 has already been scoped out and planned to be a UI focussed release. We’re hoping to speed up our release cycles as of 2.3, so keep an eye on Github and feel free to get involved.

    And for everyone attending our first WooCommerce conference, see you in November!


  • WC 2.2 Release Candidate 1 has today been tagged. If all goes well, the final release will be happening wednesday. You can compare the changes since beta 3 here.

    If you have not tested a theme/plugin yet (what have you been doing?) you have ~48 hours to do so if you want to beat the release of the new version.

    You can download the release candidate here: https://github.com/woothemes/woocommerce/archive/v2.2.0-RC1.zip

    If you are testing plugins and they are not showing up, ensure you name the plugin folder ‘woocommerce’ (removing the -2.2.0-RC1) when moving it into your plugins directory.

    Thanks to everyone who has contributed to this release so far!


  • Today we tagged WC 2.2 beta 3 which should be the last beta before release.

    Beta 3 contains mostly bug fixes and an update to the Language Pack Downloader to make it compatible with WP 4.0. You can view a comparison between beta 2 and master here.

    Again, we’re happy to hear your feedback about 2.2 and would appreciate any bug reports going directly to Github.

    Download 2.2 Beta 3

    If you find a bug with the beta, please ensure you prepend the ticket title with [2.2] when submitting the issue to GitHub, or at least mention what version you are using in the ticket description.

    Thanks again.


  • Work continues on 2.2 and we’re getting closer to an end-of-month release. Don’t forget to test your extensions and themes!

    Changes since beta 1

    You can view a comparison between beta 1 and master here, but notable changes include:

    • Prefixed get_order() to make wc_get_order()
    • Prefixed get_product() to match – wc_get_product() (soft deprecated)
    • Added info about the refunder in the backend refund system
    • Fixed stock logic for parents and children variations
    • Added some backwards compatibility for the new shop order statuses to prevent old style get_post queries breaking
    • max amount option for coupons
    • Deprecated Mijireh gateway
    • Added Simplify Commerce gateway
    • Added a 3rd parameter on the process_refund() method for $reason
    • Refund API

    Help translate 2.2

    The latest 2.2 POT files have been pushed to Transifex meaning you can get involved in the translations here: https://www.transifex.com/projects/p/woocommerce/

    Thanks to everyone who submits a translation!

    Download the latest beta

    We’re happy to hear your feedback about 2.2 and would appriciate any bug reports going directly to Github.

    Download 2.2 Beta 1

    If you find a bug with the beta, please ensure you prepend the ticket title with [2.2] when submitting the issue to GitHub, or at least mention what version you are using in the ticket description.

    Thanks again.


  • Orders can have several statuses in WooCommerce; completed, processing, on-hold, pending to name a few.

    In WooCommerce 2.1, statuses were associated with orders via a taxonomy called shop_order_status. The shop_order_status taxonomy is no more in 2.2.

    Instead, 2.2 uses post_status for the order status. In terms of usage, this makes more sense – regular post statuses are of little use for orders (since when did you have a non-published order?). For performance, using post status has several benefits, particulary to queries and reporting which can now contain less table joins.

    How does this affect developers? If you query shop_order posts via a get_posts() function, or DB query, you will need to modify your code to fully support 2.2. Otherwise you’ll either get a notice, or no results.

    If you are calling get_posts() for the shop_order post type

    Here is an example of a 2.1 order query:

    $orders = get_posts( array(
            'post_type'   => 'shop_order',
            'post_status' => 'publish',
            'tax_query'   => array( array(
                    'taxonomy' => 'shop_order_status',
                    'field'           => 'slug',
                    'terms'         => array( 'processing', 'completed' )
            ) )
    ) );

    This query uses shop_order_status which will no longer work in 2.2 without throwing a notice. For 2.2 you’d change this to be:

    $orders = get_posts( array(
            'post_type'   => 'shop_order',
            'post_status' => array( 'wc-processing', 'wc-completed' )
    ) );

    If you wanted to get all orders, of any status, 2.2 has a function wc_get_order_statuses() which returns all registered order statuses:

    $orders = get_posts( array(
            'post_type'   => 'shop_order',
            'post_status' => array_keys( wc_get_order_statuses() )
    ) );

    If you are doing $wpdb queries on shop_order posts

    Like above, you’ll need to change the taxonomy part of your query. Here is an example from 2.1:

    $sales = $wpdb->get_var( "SELECT ID FROM {$wpdb->posts} as posts
                LEFT JOIN {$wpdb->term_relationships} AS rel ON posts.ID=rel.object_ID
                LEFT JOIN {$wpdb->term_taxonomy} AS tax USING( term_taxonomy_id )
                LEFT JOIN {$wpdb->terms} AS term USING( term_id )
                WHERE   posts.post_type     = 'shop_order'
                AND     posts.post_status   = 'publish'
                AND     tax.taxonomy        = 'shop_order_status'
                AND     term.slug           IN ( '" . implode( "','", array( 'completed', 'processing', 'on-hold' ) ) . "' )
            " );

    In 2.2, this becomes:

    $sales = $wpdb->get_var( "SELECT ID FROM {$wpdb->posts} as posts
                WHERE   posts.post_type     = 'shop_order'
                AND     posts.post_status   IN ( '" . implode( "','", array( 'wc-completed', 'wc-processing', 'wc-on-hold' ) ) . "' )
            " );

    Direct queries on the database will need to be updated, or no results will be returned.


  • Payment Gateways in WC 2.2 can be improved with the introduction of two new features; being able to store a transaction ID in a standardised format, and being able to programatically handle refunds.

    Storing transaction IDs

    Storing transaction IDs is useful because these will appear in the order interface:

    2014-08-05 at 16.41

    If your gateway makes use of the $order->payment_complete() method, storing your transaction ID is a simple process. Simply pass the transaction ID to the method:

    $order->payment_complete( $transaction_id );

    WooCommerce will then store the ID as post meta.

    If you need to do this manually for any reason, you can set it directly using add_post_meta:

    add_post_meta( $order->id, '_transaction_id', $transaction_id, true );

    Turning the transaction ID into a link

    You’ll notice in the screenshot above, the transaction ID is a link – in this case linking the the transaction on the PayPal site. If you want to do this for your gateway, in your constructor set a “view_transaction_url” property, e.g:

    $this->view_transaction_url = 'https://www.paypal.com/cgi-bin/webscr?cmd=_view-a-trans&id=%s';

    WooCommerce will substitute the %s for the transaction ID during output.

    Supporting refunds

    To support refunds you need to create a process_refund() method in your gateway class. Without showing the refund code itself (which you’ll be writing) your method should look something like:

    public function process_refund( $order_id, $amount = null ) {
      // Do your refund here. Refund $amount for the order with ID $order_id
      return true;
    }
    

    This method should return a bool (true or false, if the refund was successfull or unsuccessfull) or a WP_Error object if something went wrong.

    As well as created this method, you need to define support for refunds. To do this, set the “supports” property in your constructor, e.g.:

    $this->supports = array(
      'products',
      'refunds'
    );
    

    This will let WooCommerce know that your gateway can handle refunds.