• 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

Jon Brown

9seeds dual store news

9seeds’ WordPress Theme Store Launched

Posted on October 27, 2017

We are super excited to announce our 9seeds has completed the move of Web Savvy Marketing’s theme store and forums over to 9seeds.com!

Everything theme related from sales to support now occurs over here at our Theme Store. If you are an existing customer of WSM or 9seeds and ant to get to your existing account history it’s here at My Account and the support forums can be directly accessed via this link.

As many of you know immediately after the acquisition was announced Robert and I took over providing support but were doing so on WSM’s forums. We felt that would be the best way to intimately understand the running of the store and support forums. We also started making a plan on how to bring all that was there over to 9seeds.com.

Are two WordPress e-commerce stores better than one?

We considered merging the two stores for a long time. WSM’s WooCommerce installation has a long order and customer history selling Genesis Child Themes for over 5 years. Our site had an equally long order and customer history selling WordPress plugins for over 5 years, however using Easy Digital Downloads with software licensing and subscriptions.

In the end, we determined it was just way to much unnecessary work and far too likely to have bugs and issues that would cause customers grief.  So, we did what we tell our custom development clients all the time, “take it one step at a time.”

WooCommerce or Easy Digital Downloads or Something else?

For now, we have two storefronts on one domain: one for themes and one for plugins. You’ll notice a “Theme Cart” and “Plugin Cart” up in the top menu. That might be a little confusing to some but we suspect it’s extremely unlikely any of you are going to try to buy one of our themes and one of our plugins at the same time, at least in the near term.

A lot of you are probably wondering since we’re now working with both if we really like WooCommerce or Easy Digital Downloads better. The answer is no, we like them both and more. Really. We remember a time when the only e-commerce solution for WordPress was WP e-commerce. In fact, we even built a couple of commercial plugins for WPEC many years ago, one was sold to another maintainer and the other we still actively sell.

In fact, these days there are several great options for e-commerce on WordPress including not just those, but iThemes Exchange and Freemius and a bunch of others.

We may settle on one solution to rule them all at a later date, but for now, we don’t want to give up EDD’s Software Licensing and updates for our plugin sales. Nor do we don’t want to give up WooCommerce’s follow up email system and cart experience.

We will share more on this in the coming months as things evolve, rest assured one of our aims continue to be to make things painless for all our existing and future customers.

A Smooth Transition for Customers

We think we’ve got all the kinks worked out for now. If you notice anything amiss, please let us know and we’ll get it fixed up right away. We want your experience at the 9seeds theme and plugin store to be the best possible.

Of course, I also know many of you want to hear news about new themes and plugins. Those are coming very soon and are in final testing now that the store/forum merge is behind us that the store work is behind us, so stay tuned!

Continue Reading

Jon Brown

    More by Jon Brown
    9seeds Improves WordPress as WordCamp Los Angeles Sponsors

    Supporting WordPress Locally as WordCamp Los Angeles Sponsors

    Posted on October 1, 2017

    We love watching the WordPress community grow as well as help facilitate that this year as WordCamp Los Angeles sponsors. Attending the camp this year, we were pleased to see record numbers of attendees in workshops, sessions and conversation. The WordPress community has developed quickly in the last decade. We are grateful to have watched and contributed to that growth.

    Although our donation, as WordCamp Los Angeles Sponsors, builds community in California, it also benefits WordPress users globally. Were you aware that each WordCamp forwards excess, unused sponsorship funds to the next camp? That means that our sponsorship changes lives in Los Angeles and also benefits newer camps, such as WordCamp Ahmedabad in India. How amazing is that?!

    9seeds is dedicated to supporting open source software and are grateful that WordPress makes it easy to do.

    It is gratifying to watch a community grow. Through years of WordPress involvement we’ve witnessed many individuals start new, build knowledge, contribute and emerge as leaders in their local WordCamps. We’ve seen it happen all over the world.

    This happens because WordCamps deliver to the needs of every skill level. This year WordCamp Los Angeles offered two half-day workshops, a pre-camp Beginner Day and an Advanced Development Track. An on-site networking after party concluding the first full day of the camp, which gave attendees a chance to further discuss topics on all levels and connect informally.

    We Enjoy Being WordCamp Los Angeles Sponsors

    2017 provided many opportunities for involvement in the open source community. In June, I personally helped organize WordCamp Orange County. Throughout the year I’ve attended and spoken at many WordCamps, as did many of our 9seeds team members. We actively participate in the communities where we live because we know that our involvement makes a difference.

    We’ve learned from one another and seen how our contributions and the efforts of others have improved WordPress. We value each community member and every experience and hope you do, too.

     

     

     

    Continue Reading

    Jon Brown

      More by Jon Brown

      WordPress Triple Threat: Custom Development, Plugins and now Themes too!

      Posted on June 13, 2017

      Since 9seeds first sprouted, building and selling WordPress products has been part of our DNA. We launched our first plugin in 2009 shortly after forming our company. Since then there have a been many plugins we’ve built for ourselves or clients, sold as products and supported, and we have even sold plugin code bases to other maintainers when we no longer were the best fit for them.

      Over the years, however, most of our time has been spent building custom WordPress sites for clients. Principally building bespoke themes (design) as well as custom functionality (plugins). We’ve helped hundreds of clients take an idea they had for a site that did something unique and turn it into a living, breathing website customized to just their needs.

      We’ve learned a lot about what works, what doesn’t, and how to avoid what might not be a problem today or tomorrow, but might show up as a problem next year and the year after. We still actively work for an maintain many of the sites we built in the first year. Granted, most of those folks have opted for full rebuilds since then.

      One thing we’ve never done in all our years is to sell WordPress themes as a product, until now.

      Building WordPress Products on the Side

      As much as we’ve wanted to pursue building and selling WordPress themes, the immediacy of building custom websites for clients tended to take precedence over the long game of building and selling products.

      Speaking of long games, 9seeds’ 8th anniversary is right around the corner. That may not sound like a long time but it’s a lot longer than most agencies focused on WordPress have been in business.

      Since the beginning, the majority of sites we’ve built from scratch have been built on the Genesis Framework from StudioPress. That is not to say we’re exclusively a Genesis shop. We havee built sites on everything from Thesis to Headway, to Underscores, to Roots, to just rolling our own themes. We’ve always approached site development by choosing the foundation that is best for each individual client, but most of the time that is Genesis.

      We’ve also built sites a huge range of sites from classic WordPress blogs to high traffic publishing sites like The Good Men Project. We’ve built membership sites like LendingMemo and 40DayJoyChallenge. We’ve built e-commerce sites like PowerPhone and Cardsmiths Breaks. We’ve even built private intranets and a bunch of sites we’re not allowed to talk about ;).

      While a healthy portion of our clients opt to have custom themes designed from scratch, a good portion are also well served by leveraging existing commercially available themes. When clients do thier own them shopping we always guide them to one of two places – StudioPress’ own theme store or Web Savvy Marketing’s theme store.

      The reason is simply that we’ve never had a problem taking themes from those two sources and using them out of the box, or heavily customizing them to suit. We have never had a problem with either which is more than I can say for the majority of themes we see from other marketplaces.

      A match made in WordPress Heaven

      While I’ve know Rebecca Gill from Web Savvy Marketing professionally and by her stellar reputation for many years. I didn’t get to know her well personally though until just the last year. We’d certainly cross paths WordCamps and across the interwebs but she tended to frequent the east coast camps while I frequented the west coast camps.

      Internally 9seeds had often talked about building and selling themes on the Genesis framework specifically and about a year ago I sought Rebecca’s sage counsel on whether she thought 9seeds pursuing building Genesis themes was still a worthwhile business venture. WordPress is a fairly unique business culture filled with an atmosphere of friendly competition where asking a question like “What do you think of me going into the Genesis child theme business head to head with you?” just isn’t as bizarre as it might be in other contexts. Regardless, when I asked her this questions it had never occurred to me she’d even have considered letting go of the amazing theme store she’d built up over all these years.

      It took a bit more time of getting to know each other personally before I came to hold the same feelings that others had shared about her. I felt deeply that this was a person I not only wanted to be friends with but wanted to be in business with.

      It became apparent to both of us that this was a perfect fit.

      9seeds would take over the store starting with support and new theme development that had slowed to a trickle. Rebecca would counsel me on getting our SEO and marketing skills up to the level excellence she’s achieved with WSM.

      It’s a win for 9seeds by giving us a springboard into a market we’ve long had our eye on accompanied by the best trail guide in the business showing us the path.

      It’s a win for WSM by freeing Rebecca and her team up to align with where her focus now is on larger custom site builds and SEO consulting.

      Exciting Times Ahead

      For me personally, this is my most exciting business step forward yet. We already have a theme in development that will be releasing once the store merge is complete.

      We’re still working out the technical and design details of moving the support forums and theme store over from the WSM domain to 9seeds without interruptions or downtime. That’s a pretty daunting task given how long both stores have been around and that one is built on WooCommerce while the other is on Easy Digital downloads.

      I know all of WSM’s loyal fans are going to be thrilled with what we’ve got in store. You can guess with 9seeds’ strong background in web publishing, memberships sites and more a bit what we have planned for the next year, but we’d love to hear from you all what you’d like to see in the comments.

      Continue Reading

      Jon Brown

        More by Jon Brown

        How to change WordPress permalink structure on WP Engine

        Posted on December 20, 2016

        One of the most user friendly and powerful SEO features of WordPress has always been it’s pretty permalinks feature. Many content management systems (CMS) still to this day have urls that look like http://domain.com/something_incomprehensible/123123c1. Ugly!

        WordPress has supported pretty permalinks (human readable and ending a url with a slug resembling the post name) since version 1.0. There was one catch to those however. You needed to include a date in the format before the post slug (that’s /%year%/%monthnum%/%postname%/ for those familiar with WPs permalink formats). This resulted in URLs like this post’s URL: https://9seeds.com/2016/12/19/change-permalink-structure-wp-engine. Pretty!

        That format has always still been better for SEO than what other CMSs do with crazy random numbers that mean nothing to human or search crawlers. It’d be a little better without the dates in the way however. You could use just the post slug (that’s just /%postname%/ ) on small brochure websites with just a few dozen pages, but on sites with large numbers of posts things would slow down without dates to break things up.

        As of WordPress 3.3 there is no longer any performance hit to using just /%postname%/.  So your URLs can just look like this:  https://9seeds.com/change-permalink-structure-wp-engine/.  Prettier!

        But there’s still a catch. You can’t just go into the WordPress Permalinks settings page and change formats or incoming links to your site using the old format may 404 🙁

        There’s long been a fix for this and our friend Yoast even built a tool to make generating the needed .htaccess rule here since no one likes writing regex or coming up with htaccess rules.  That’s all well and good if you’re on a simple Apache server and want to edit an .htaccess file, but what if you’re on WP Engine? WP Engine uses a higher performance setup with an Nginx proxy in front of Apache. That means you can put those redirect rules into Nginx and they’ll be even quicker than having put them in .htaccess!  Only you can’t directly modify your nginx.conf files on WP Engine, instead WP Engine gives you a super easy to user redirect tab in their panel.

         

        Here’s how you change your permalink structure and setup the needed redirect on WP Engine.

        Step 1:

        Go to Yoast’s handy tool here and generate the needed rewrite rule. It’ll look something like this:

        RedirectMatch 301 ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(?!page/)(.+)$ https://your-domain.com/$4

        If you’re not on WP Engine you can drop that into your .htaccess file before the WordPress section. In fact it’ll work on WP Engine, just it’s better to use the panel than to modify that file directly via FTP.

        Step 2:

        1. Go to the WP Engine Dashboard and click Redirects rules in the left sidebar

        2. Click the Redirect Rules button at the top right

        3. Set a memorable name for the Redirect.

        4. Take the orange section above, the scary looking Regular Expression that Yoast generated for you (mine is for year/month/date, your maybe be shorter if your existing permalink structure is shorter), paste that into “Source*” from the ^ to the $.

        5. Take the blue section above, the less scary url looking Regular Expression from the http to the $4 (my existing permalink has three date modifiers, hence it keeps the 4th chunk, your’s may be different if you’re using a shorter permalink structure).

        6. Click the Save button

        Step 3:

        1. Go to your WordPress dashboard and click on Permalinks under Settings in the left sidebar

        2. Change your permalink setting to %postname%

        3. Click the Save Changes button

        Step 4:

        Test!

         

        Success? Awesome let us know in the comments below!

        Continue Reading

        Jon Brown

          More by Jon Brown
          WordPress Performance

          WordPress Post Editor Performance

          Posted on August 17, 2016

          WordPress Performance sometimes seems like an endless quest, but there are sometimes little things that come along and yield great rewards.

          Front end and back end WordPress Performance auditing and optimizing is a topic I’ve been meaning to write more depth about since speaking on the topic at a few WordPress meetups, but I wanted to quickly share a performance tip on something I came across today while preparing a bug report for Yoast’s WordPress SEO plugin.

          Spotting Performance Issues in WordPress

          One of the ways we spot performance issues is to run Query Monitor on most of the sites we work on. Query Monitor is a great tool for a quick view into what’s going on on the backend on every page view and I’ll go into more in a future post.

          TL:DR; Skip to #3 at the end.

          I am no Chris Lema, which is a abstract way of saying, “I personally don’t spend much time in WordPress post editor”. However, today I was in there investigating a little visual glitch with the WordPress SEO snippet preview metabox when I also noticed that the post editor was loading very slowly. Thanks to Query Monitor I could instantly see the cause was a slow MySQL Query and it was coming from a function called meta_form().

          Now, this was on a client’s site with over 100,000 posts and with a site that size performance issues show up rather quickly. This however, does affects smaller sites as well though not to the extent it does large publisher websites like this one. Also just to be clear it is really impacted by the number of rows in the postmeta table, not the number of posts directly, but I figured saying 100,000 post made more sense that 1.8 million rows. On the big site like this one though it was causing a 15 second query. While loading the post editor is infrequent, even on a site like this one with over 100 authors, that 15s is taking up a valuable MySQL thread and certainly frustrating authors.

          On my much smaller personal blog it was still delaying page load several seconds and here on 9seeds.com (two sites with no where near as big of a database as our typical client’s site) it was causing a 7s slowdown on the post editor loading.

          WordPress Performance
          Slow meta_form() database query

          Geeky WordPress Developer Details of the slowdown

          WordPress runs a function called meta_form() which displays the custom fields meta box. It runs a somewhat intensive query on the wp_postmeta to generate that box (a box most people don’t even need anymore, but that’s a whole separate issue).

          That query looks like this:

          SELECT DISTINCT meta_key
          FROM wp_postmeta 
          WHERE meta_key NOT BETWEEN '_'
          AND '_z'  HAVING meta_key
          NOT LIKE '\\_%' 
          ORDER BY meta_key 
          LIMIT 30
          

          That’s actually the improved version of the query! When these changes were made to improve the query back in WordPress version 4.3 it seems that only half the needed changes to the database were made for existing sites. The table index was updated to 191 characters, but the field itself was not updated. That mismatch makes that query super slow on large wp_postmeta tables.

          There is a new bug report for this performance issue already. While it seems like a trivial thing to fix any time WordPress core needs to modify the existing database on millions of WordPress it’s a pretty big deal and can take a while to get incorporated.

          The good news is there are a couple fixes you can implement yourself.

          1. (not recommended) My first fix was to truncate the meta_key column to 191 characters with:

          I shouldn’t need to say this but backup your database and test this in a safe local or staging environment before doing this on your live database! Database updates are dangerous things without an “undo” button so be extra careful. If you don’t even know how/where to run this code you probably shouldn’t be doing this sort of thing. Keep reading
          ALTER TABLE wp_postmeta MODIFY meta_key varchar(191);
          

          That worked, but it’s a bit dangerous since you could have a very long meta_key and it could get truncated, so don’t do that, there are better ways.

          2. (recommended) Much easier, in WordPress 4.4 there was a new filter introduced that short-circuits that query ‘postmeta_form_keys‘ which you can provide a pre-defined array of keys to if you need.

          add_filter('postmeta_form_keys', array('my_key1, my_key2');
          

          3. (most recommended) Just ditch loading the ancient custom fields box entirely with:

          /**
           * Remove Ancient Custom Fields metabox from post editor
           * because it uses a very slow query meta_key sort query 
           * so on sites with large postmeta tables it is super slow
           * and is rarely useful anymore on any site
           */ 
          function s9_remove_post_custom_fields_metabox() {
               foreach ( get_post_types( '', 'names' ) as $post_type ) {
                   remove_meta_box( 'postcustom' , $post_type , 'normal' );    
               } 
          } 
          add_action( 'admin_menu' , 's9_remove_post_custom_fields_metabox' ); 
          

          Added to your theme or a core functionality plugin.

          Please do let me know if this helps you in the comments, and stay tuned for a deeper dive into WP site performance auditing and fixes.

          Continue Reading

          Jon Brown

            More by Jon Brown
            • Prev
            • Page 1
            • Page 2
            • Page 3
            • Page 4
            • Page 5
            • 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