Generally, if the feature alters the design or layout then it should be added to the theme; while if it’s adding functionality it should be made into a plugin, which is pretty straight forward. While writing your own themes and plugins removes the dependency on third party developers for updates, it puts the responsibility on you to maintain them and ensure compatibility with the latest iteration of WordPress.
Is WordPress the right CMS for you?
When starting any new project, lots of consideration goes into the build process and what tools can facilitate that process. One of the first decisions to make is what CMS, if any, to use and the answer inevitably is to use the best tool for the job. WordPress is a monolithic CMS that covers everything from front-end templating, routing, taxonomy, administrator dashboard, and database architecture to subtler things like cron job management. This is a great advantage when starting a project from scratch or rapidly prototyping an idea where you want to get into the customization right way without being bogged down with setting up your own CRUD interfaces, publishing workflow, templating system, etc. The dashboard lends itself to a typical content creation workflow with different roles for writing, editing, and approving content. The drawbacks of this reveal themselves when you try to change features that are integrated into the core of the CMS. Many times the only option is to hide something with CSS or to use JavaScript to override something in the DOM, and this tends to feel like more of a hack than a customization. As you try to push the boundaries beyond the original design, you will find yourself spending more time working around those limitations than implementing features. In this case WordPress wouldn’t be the best option.
Where is WordPress headed?
Many developers are adopting a relatively new trend of separating the front-end from the back-end known as decoupling. Decoupled WordPress essentially leaves the back-end and dashboard intact while ditching the standard front-end structures in favor of RESTful APIs that grant the option to use a different front-end framework such as Angular or ReactJS. This can be used to push the same data to several consumers at once such as native apps and multiple websites simultaneous, and it also lends more flexibility to the front-end design. While developers at WordPress seem to remain focused on the blogging and publishing aspects of the CMS, the community has been pushing more in the direction of a web framework, which has tangentially been touched on throughout this article.
Is WordPress a framework already?
Some would say yes while others claim it’s not quite there yet. Either way, the future for WordPress is bright and it will be exciting to see what direction it takes.