• Skip to primary navigation
  • Skip to main content
  • Skip to footer
  • Store
  • Support
  • Theme Documentation
  • My Account
  • Cart

9seeds

Building Custom WordPress Solutions | Plugin Development

 
  • Custom Development
  • Themes
  • Plugins
  • About
  • Contact
  • Blog

News

Event Ticketing for WordPress version 2.0

Posted on November 7, 2013

Three years ago, almost to the day, we released the first version of WP Event Ticketing, which is a WordPress plugin that makes it simple to sell event tickets directly from your WordPress website. Because of WP Event Ticketing, people no longer need to use 3rd-party services that charge organizers or attendees $1 a ticket (or more) on top of PayPal processing fees, just to sell tickets. I loved that our plugin would save people money, and give them the power to control their own data.

I can remember with amazing detail how excited (and nervous) I was the day we released the plugin. Since that original launch, the plugin has been downloaded more than 23 thousand times. People have used the plugin to sell hundreds of thousands of event tickets of all shapes and sizes, all without that pesky per-ticket processing fee.

I take great pride in knowing that we’ve saved our users more than a million dollars in fees.

Our plans for the event ticketing plugin have always been big. There are plenty of other ticket plugins out there, but we feel that our long term direction for the plugin is unique. But early last year we realized, in order to reach those goals, the plugin was going to need to be rewritten. I don’t mean a little bit of a rewrite. I’m talking about starting over from a blank slate.

Let the rewrite begin

If you think it’s a lot of work to build a plugin of this size, you should try doing it twice. Oi. We started the process 3 times last year. Maybe more. I’m trying to block out that memory. But finally, in January of this year, Justin, Ben and I locked ourselves in a room and over the course of 3 days wrote the first couple thousand lines of code that would eventually become version 2.0.

Yes, you read that right. We started the rewrite back in January. Here we are, 9 months later, and I would like to introduce you to a brand new plugin…

Event Ticketing for WordPress

There’s that excitement again.

What’s new in version 2

The first thing you might notice is, this is not an upgrade to the previous plugin. This is, in fact, a completely separate plugin. We thought long and hard about this, and in the end we felt that it would be too easy for something to go wrong with a data conversion from the old to the new format. We didn’t want to run the risk of causing any problems for existing users who have events already on sale. We will encourage the users of the old plugin to move to the new version as soon as their current events are completed. Eventually, we will shut down one of the versions.

Next up, custom post types. The original plugin stored all its data in serialized arrays. Which wasn’t really a problem… unless your event had 500 or 1000 attendees. That many attendees could potentially bring your server to a grinding halt. Oops! Well, not anymore. Now everything is stored in custom post types, which is way more efficient and scalable. Not to mention with the new data storage model, it opens us up to some exciting features down the line.

One of the most frequent requests we received was for internationalization. I’m thrilled to say that version 2.0 is completely i18n compatible. We’ve already translated the plugin in to 10 languages. If you would like to get involved and translate it in to another language, please let us know.

Just the beginning

As I said, this release is mainly a rewrite of the previous plugin. So the feature set is largely the same as before. However, the new codebase will make it much easier moving forward to add features.

Download Event Ticketing for WordPress. Then, let us know what you think. We would absolutely appreciate the feedback. Any bugs you find, please report them to support.9seeds.com so we can get them fixed right away. If you’ve got feature requests, we’d like to hear about those too.

Continue Reading

john

    More by john

    Plugin update, WP Time Tracker 1.2

    Posted on October 21, 2013

    This summer we released version 1.0 of the WP Time Tracker plugin. We know it was the minimum viable product, but wanted to get it out the door so we could start to get some feedback. Since that release we’ve been fielding some requests for additional functionality in the plugin. We’re happy to announce the release of WP Time Tracker version 1.2.

    The Highlights

    • Clients are now stored as a custom post type allowing you to store contact information for each client.
    • Hours are now tracked against projects which are assigned to clients. This opens up the plugin to additional breakdown reports which will be coming soon.
    • New, quicker data entry form for adding hours.
    • The ‘My Hours’ page shows each staff member all the hours they’ve previously entered.
    • Staff members can use the in-line editor on the ‘My Hours’ page to update any record that hasn’t already been marked as invoiced.
    • Staff members no longer need to be authors/editors on the site. Instead, you can mark any user on the site as an active contractor via the user edit screen.

    We’ve already been using the new version for a few weeks, and I have to tell you, I absolutely love how much quicker it is to enter hours each day.

    Screenshots

    What’s On Tap?

    We’re just getting started with Time Tracker. We’ve got a number of additional features that we’ll be adding in the coming weeks and months, including new set of reports.

    Don’t Wait, Buy Now!

    Buy the plugin today and you’ll receive a full year of automatic updates and support!
    [purchase_link id=”1290″ text=”Purchase” style=”button” color=”blue”]

    Upgrading from version 1.0

    This upgrade is pretty sizable and changes how some features work. For example, your staff members no longer need access to the WordPress dashboard. Instead, you will create two pages that can be accessed on the front end, but are only viewable to logged in users.

    Here’s how the upgrade process will work:

    • After you upgrade, the plugin will convert your existing clients to custom post type entries
    • Next, it will create a default project for each client
    • All existing hours entries will be associated to the proper client’s default project
    • Edit each of your staff’s user profiles and mark them as “active contractors” by checking the box at the bottom of the profile
    • Create two pages; Hours and My Hours
      • Hours is where your staff will enter their hours
      • My Hours is where your staff can view and edit existing hours entries
    • Edit each of your projects and select which of your staff members has access. Note, admin level users have access to all projects.

    Give your staff the direct links to both pages and you’re all set!

    Continue Reading

    john

      More by john

      New plugin, WP Time Tracker

      Posted on July 1, 2013

      As our team began to grow, tracking billable time became more and more important. I like the work we do, but I’m not a big fan of doing it for free. Shocker, right? We tried several online services for time tracking, but none were a great fit. We didn’t want to pay a monthly fee for a service that didn’t meet our needs. So that’s when we did what we normally do, we built a solution in WordPress.

      Last year we built the first version of Time Tracker as a theme for WordPress. It served our purpose really well and also let us store all the data locally which would make it really easy to add additional functionality over time if needed it. We had a couple people who wanted to try using it, but we found that handing it off wasn’t as easy as it should have been. It required a few add-on plugins and needed a couple bits of customization under the hood. If we were going to make this available to the public, something needed to be done. So we kept the pieces we liked, rewrote the pieces we didn’t and a short time later, we had a plugin that was was better than the original solution.

      Introducing WP Time Tracker

      Simple. Our goal here is to keep things simple. WP Time Tracker is designed to let you easily track time for you, your staff and your contractors without being overly complicated. If you’re familiar with the WordPress admin panel (and I’ll bet you are), you’re going to find working with Time Tracker very familiar.

      Taxonomy of Clients
      Adding clients is simple and works the same as adding categories to a post. Making it easy to access a list of all work done for a selected client.

      Add Hours
      The form for adding hours is uncluttered and gets right to the point. Select the date you did the work using a pop-up date picker, select the client, add a description and the amount of time spent and you’re done. Simple.

      Unbilled hours report
      The plugin currently offers up two reports. The unbilled hours report seen here shows a list of all clients with hours waiting to be invoiced. There’s also a client history report that lists all clients and the total hours tracked for the life of the client.

      Create an Invoice
      When it’s time to bill a client, the create invoice page will let you see a list of all work performed for a selected client within a selected date range. (as a side note, and just to clear up any possible confusion, the ‘create invoice’ page does not generate or send an invoice to the client. It simply allows you to mark the items as invoiced. This may change in a future release.)

      Add your staff or contractors as users on your site, and they’ll be able to add hours without having access to your reports.

      Boom. Simple.

      Purchase your copy of WP Time Tracker today!
      [purchase_link id=”1290″ text=”Purchase” style=”button” color=”blue”]

      Continue Reading

      john

        More by john

        WP Affiliate Manager version 1.5

        Posted on January 7, 2013

        We’re glad to announce the release of WP Affiliate Manager version 1.5.0.  This version initially centered around a bugfix having to do with a namespace conflict in the latest (3.8.9.x) versions of WP e-Commerce.  However in the process, we were able to add several minor enhancements that will enhance WP Affiliate Manager for the future.

        gettext translation wrappers

        While not all screens have had the gettext translation wrappers applied (notably the settings and paypal pages in wp-admin), everything else has been added.  Expect a 1.5.x release early in 2013 that will be fully translatable.

        As such, we’re putting out a call for translators.  We are willing to offer free one-year licenses (with support & upgrades) for WP Affiliate Manager to anyone who contributes a full translation in their own language. We have a couple of people already talking to us about certain languages, so if you’re interested, please fill out the form on our translation page and let us know what language you’d like to help us add to WP Affiliate Manager!

        money_format() for Windows

        money_format() is a native PHP function, but it does not exist on Windows platforms.  We added a simple one for those hosting in Windows environments which should get the job done.

        PayPal enhancements

        First, the sandbox PayPal URL has been fixed.  This is mostly used for development/testing purposes, but none-the-less is important.

        Also, we removed the requirement for needing the PHP cURL module requirement.  Instead, WP Affiliate Manager uses WordPress’ native HTTP request methods.

        jQuery UI Tabs + cookies + mod_security bugfix

        An interesting sidenote… we discovered a bug where if you went to the 2nd tab on WP Affiliate Manager’s “My Affiliates” screen on our test server, your next navigation point in WordPress would either result in a 404 error, or an endless loop of 302 redirects.

        Turns out the bug was caused by a perfect storm of Apache’s mod_security (which is enabled on our test server) and the use of jQuery UI Tabs with a cookie save option.  What was occurring was the cookie name was being saved as “ui-tabs-1” and if your last visited tab was the 2nd tab (index 1) the cookie was saved as “ui-tabs-1=1”.  This would be passed with each HTTP request as a cookie header.  Since mod_security doesn’t like anything where “1=1”, it was changing the request, causing WordPress to become all sorts of confused.  You can see a bug report about it here: http://bugs.jqueryui.com/ticket/8027

        The solution was to name the cookie, so the automatically generated name wasn’t used:

        jQuery("#tabs").tabs({
            cookie: {
                name: 'wpam_detail_tab'
            }
        });

        Enjoy all of the fixes!

        Continue Reading

        justin

          More by justin

          New plugin: Authorize.net SIM Gateway for WP e-Commerce

          Posted on December 10, 2012

          A while back we released the WP Affiliate Manager plugin which integrates directly in to the WP e-Commerce plugin to allow you to easily track and pay affiliates for driving traffic to your site. We have since been keeping an eye on the WP e-Commerce community and when we saw the opportunity to help with another plugin, we jumped at the chance.

          Today we released a new payment gateway for WP e-Commerce: Authorize.net Server Integration Method, or SIM for short. From the Authorize.net website:

          SIM provides a customizable, secure hosted payment form to make integration easy for Web merchants that do not have an SSL certificate.

          WP e-Commerce has a wide range of payment gateway options available, and we’re happy to help expand their reach by giving users one more option to choose from.

          If you are interested in reading more about how Authorize.net’s SIM works, you can check out the developer center at Authorize.net.

          The plugin is available now and is compatible with the new 3.8.9.x software.

          Continue Reading

          john

            More by john
            • Prev
            • Page 1
            • Interim pages omitted …
            • Page 4
            • Page 5
            • Page 6
            • Page 7
            • Page 8
            • Interim pages omitted …
            • Page 13
            • Next

            Footer

            Get in Touch

            • New Project Inquiry
            • Product Support and General Inquiry
            • Store Purchase Terms and Conditions
            • Store FAQ
            • Cookie Policy
            • Privacy Policy

            Our Services

            • Custom WP Development
            • Theme Store
            • Plugin Store

            WordPress Plugins for Sale

            • Time Tracker
            • Authorize.net SIM Gateway

            WordPress Plugins for Free

            • Simple Calendar
            • WP Chargify
            • Facebook
            • Twitter
            • LinkedIn
            • WordPress
            • GitHub

            Copyright 2025 | 9seeds, LLC

            Like nearly all websites this one uses cookies too. Like most users we think consent banners like these are a dumb solution, but it's what we've got until new laws are passed. We use cookies on our website for remembering your preferences, for example if you're logged in or what is in your cart. We also use 3rd party cookies for analytics so we know what pages on the site are most popular. By clicking “Accept”, you consent to the use of ALL the cookies.
            Do not sell my personal information.
            Cookie SettingsAccept
            Manage consent

            Privacy Overview

            This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience and may even preclude you being able to login to the website.
            Necessary
            Always Enabled
            Necessary cookies are absolutely essential for the website to function properly. These cookies ensure basic functionalities and security features of the website, anonymously.
            CookieDurationDescription
            __stripe_mid1 yearThis cookie is set by Stripe payment gateway. This cookie is used to enable payment on the website without storing any patment information on a server.
            __stripe_sid30 minutesThis cookie is set by Stripe payment gateway. This cookie is used to enable payment on the website without storing any patment information on a server.
            cookielawinfo-checkbox-advertisement1 yearSet by the GDPR Cookie Consent plugin, this cookie is used to record the user consent for the cookies in the "Advertisement" category .
            cookielawinfo-checkbox-analytics1 yearSet by the GDPR Cookie Consent plugin, this cookie is used to record the user consent for the cookies in the "Analytics" category .
            cookielawinfo-checkbox-necessary1 yearSet by the GDPR Cookie Consent plugin, this cookie is used to record the user consent for the cookies in the "Necessary" category .
            cookielawinfo-checkbox-others1 yearSet by the GDPR Cookie Consent plugin, this cookie is used to store the user consent for cookies in the category "Others".
            cookielawinfo-checkbox-performance1 yearSet by the GDPR Cookie Consent plugin, this cookie is used to store the user consent for cookies in the category "Performance".
            Functional
            Functional cookies help to perform certain functionalities like sharing the content of the website on social media platforms, collect feedbacks, and other third-party features.
            Performance
            Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.
            Analytics
            Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics the number of visitors, bounce rate, traffic source, etc.
            CookieDurationDescription
            _ga2 yearsThe _ga cookie, installed by Google Analytics, calculates visitor, session and campaign data and also keeps track of site usage for the site's analytics report. The cookie stores information anonymously and assigns a randomly generated number to recognize unique visitors.
            _gid1 dayInstalled by Google Analytics, _gid cookie stores information on how visitors use a website, while also creating an analytics report of the website's performance. Some of the data that are collected include the number of visitors, their source, and the pages they visit anonymously.
            CONSENT2 yearsYouTube sets this cookie via embedded youtube-videos and registers anonymous statistical data.
            Advertisement
            Advertisement cookies are used to provide visitors with relevant ads and marketing campaigns. These cookies track visitors across websites and collect information to provide customized ads.
            CookieDurationDescription
            VISITOR_INFO1_LIVE5 months 27 daysA cookie set by YouTube to measure bandwidth that determines whether the user gets the new or old player interface.
            YSCsessionYSC cookie is set by Youtube and is used to track the views of embedded videos on Youtube pages.
            yt-remote-connected-devicesneverYouTube sets this cookie to store the video preferences of the user using embedded YouTube video.
            yt-remote-device-idneverYouTube sets this cookie to store the video preferences of the user using embedded YouTube video.
            Others
            Other uncategorized cookies are those that are being analyzed and have not been classified into a category as yet.
            CookieDurationDescription
            cookielawinfo-checkbox-functional1 yearThe cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional".
            SAVE & ACCEPT
            Powered by CookieYes Logo