{"id":149,"date":"2014-09-10T14:08:38","date_gmt":"2014-09-10T14:08:38","guid":{"rendered":"http:\/\/www.ahosting.net\/blog\/?p=149"},"modified":"2025-10-20T10:31:36","modified_gmt":"2025-10-20T10:31:36","slug":"five-best-practices-for-concrete5-development","status":"publish","type":"post","link":"https:\/\/www.ahosting.net\/blog\/five-best-practices-for-concrete5-development\/","title":{"rendered":"Five Best Practices For Concrete5 Development"},"content":{"rendered":"<p>Concrete5 differs from many other content management systems on the web in that it <a href=\"http:\/\/www.concrete5.org\/documentation\/introduction\/template-and-theme-engine\">lacks both a template engine and a theme compiler<\/a>. Instead, all the core components of a site\u2019s layouts are handled behind the scenes &#8211; meaning designers have an unprecedented degree of freedom when it comes to customizing how their site looks. As an added bonus, it also makes Concrete5 a fairly simple platform to learn from a development perspective &#8211; meaning a fledgling developer can get to work creating their own theme that much faster.<!--more--><\/p>\n<p>Now, just because Concrete5 theme development is a little simpler, doesn\u2019t mean it\u2019s going to be a cakewalk. There are still certain details you\u2019ll need to understand &#8211; and certain procedures you\u2019ll need to follow &#8211; in order to find success. Keep these best practices in mind, and you\u2019ll be designing like a pro in no time at all.<\/p>\n<h1>Make Sure Your Template Has The Necessary Elements<\/h1>\n<p>Unless you plan to code your entire theme yourself from start to finish, it\u2019s generally easier to start things off with a template. There are <a href=\"http:\/\/opensourcetemplates.org\/\">plenty of free templates<\/a><a href=\"http:\/\/www.oswd.org\/\">available all over the web<\/a>, so it shouldn\u2019t be too difficult to find one that you like. Just keep in mind that, in order for it to work with Concrete5, <a href=\"http:\/\/www.concrete5.org\/documentation\/how-tos\/designers\/making-a-theme-from-start-to-finish\/\">it needs the following features<\/a>(this is true even if you\u2019re creating your own template):<\/p>\n<ul>\n<li>Flexibility &#8211; the template needs to be able to work with Concrete5\u2019s blocks (see below).<\/li>\n<li>An unordered list for the navigation menu, with images rather than plain text.<\/li>\n<li>The css file that\u2019s included with the template must be named \u201cmain.css.\u201d You can do this yourself.<\/li>\n<li>A \u201cdefault.php\u201d page type &#8211; most free themes will have a file named \u201cindex.html\u201d which you\u2019ll need to rename.\u201d<\/li>\n<li>A \u201cview.php\u201d page type.<\/li>\n<\/ul>\n<h1>Know Your Blocks<\/h1>\n<p>As you likely know, Concrete5\u2019s smallest piece of content &#8211; and the unit by which virtually the entire system is arranged &#8211; is called a <a href=\"http:\/\/www.concrete5.org\/documentation\/introduction\/block-architecture\">Block<\/a>. This can be just about anything &#8211; plain text, an image, a video, an audio file; a Block is whatever content you want to create. When designing a theme, there are a few details to keep in mind regarding Blocks:<\/p>\n<ul>\n<li>There are a number of Core Blocks in Concrete5 &#8211; but if none of those blocks suit your needs, you shouldn\u2019t be afraid to customize them &#8211; or even <a href=\"http:\/\/www.concrete5.org\/documentation\/developers\/blocks\/understanding-and-building-blocks-in-concrete5\/\">create your own<\/a>.<\/li>\n<li>One of the first things you should probably do is create a custom template for your Blocks, to allow for easier customization.<\/li>\n<li>You can limit the number of blocks a certain area will accept in order to prevent certain areas of your page from being overloaded with content.<\/li>\n<li>If you hard-code a Block into a theme, then it won\u2019t be editable &#8211; so only do this sparingly (for example, if you\u2019re selling your theme and want to include some sort of watermark on it). For static elements, it\u2019s usually better to use Global Blocks.<\/li>\n<li>Of all your Blocks, Page List is your best friend. Familiarize yourself with it.<\/li>\n<\/ul>\n<h1>Set Up A Development Environment For Testing<\/h1>\n<p>Once you\u2019ve figured out what template you\u2019re going to use, your next step will be to set up a development environment on your computer. You\u2019ll be using this for both construction and testing of your theme &#8211; I\u2019d advise against testing it on a live website. Concrete5\u2019s documentation section has <a href=\"http:\/\/www.concrete5.org\/documentation\/how-tos\/designers\/making-a-theme-from-start-to-finish\/\">a few awesome recommendations<\/a> as to what development platform you should use. While you\u2019re at it, you should also follow their recommendation and install firebug.<\/p>\n<h1>Use And Reuse &#8211; And Keep It Simple<\/h1>\n<p>One thing virtually every veteran developer will tell you is that whenever you\u2019re looking to implement functionality that exists outside of the basics, you shouldn\u2019t immediately default to coding it yourself. Particularly if you\u2019re incorporating HTML into your theme, you\u2019re going to want to do a bit of research and see if someone\u2019s already created a module, addon, or code that does what you want to do. I\u2019m not saying you should never code something yourself &#8211; only that you shouldn\u2019t do more work than you absolutely need to.<\/p>\n<h1>Stay Away From jquery<\/h1>\n<p>One fairly common mistake a lot of novices make is to include jquery in their theme. Since Concrete5 already includes the jquery and jquery ui libraries, importing them through your theme will break the editor. It can also make a page completely unreadable &#8211; requiring you to go into the database to repair it. So, basically&#8230;don\u2019t use jquery when you\u2019re designing your theme. You have been warned.<br \/>\nThis is by no means a comprehensive list &#8211; as such, we\u2019ll likely be revisiting this topic at a later date. For now, however, this should be enough to get you started. Happy coding, and we\u2019ll be sure to keep an eye out for your theme on the Marketplace!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Concrete5 differs from many other content management systems on the web in that it lacks both a template engine and a theme compiler. Instead, all the core components of a site\u2019s layouts are handled behind the scenes &#8211; meaning designers have an unprecedented degree of freedom when it comes to customizing how their site looks. [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":150,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[24],"tags":[],"class_list":["post-149","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-concrete5"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.9 - aioseo.com -->\n\t<meta name=\"description\" content=\"Developing a theme for Concrete5 can be immensely rewarding, but unless you follow the best practices outlined here, you\u2019re in for a rough time.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Matt Chrust\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.ahosting.net\/blog\/five-best-practices-for-concrete5-development\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.9\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"AHosting Blog Home | AHosting Blog\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Five Best Practices For Concrete5 Development | AHosting Blog Home\" \/>\n\t\t<meta property=\"og:description\" content=\"Developing a theme for Concrete5 can be immensely rewarding, but unless you follow the best practices outlined here, you\u2019re in for a rough time.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.ahosting.net\/blog\/five-best-practices-for-concrete5-development\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2014\/09\/concrete5-best-practices.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2014\/09\/concrete5-best-practices.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"640\" \/>\n\t\t<meta property=\"og:image:height\" content=\"427\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2014-09-10T14:08:38+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2025-10-20T10:31:36+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Five Best Practices For Concrete5 Development | AHosting Blog Home\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Developing a theme for Concrete5 can be immensely rewarding, but unless you follow the best practices outlined here, you\u2019re in for a rough time.\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2014\/09\/concrete5-best-practices.jpg\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/five-best-practices-for-concrete5-development\\\/#article\",\"name\":\"Five Best Practices For Concrete5 Development | AHosting Blog Home\",\"headline\":\"Five Best Practices For Concrete5 Development\",\"author\":{\"@type\":\"Person\",\"name\":\"Matt Chrust\",\"url\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/author\\\/matt-chrust\\\/\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/wp-content\\\/uploads\\\/2014\\\/09\\\/concrete5-best-practices.jpg\",\"width\":640,\"height\":427,\"caption\":\"Concrete5 Best Practices\"},\"datePublished\":\"2014-09-10T14:08:38+00:00\",\"dateModified\":\"2025-10-20T10:31:36+00:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/five-best-practices-for-concrete5-development\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/five-best-practices-for-concrete5-development\\\/#webpage\"},\"articleSection\":\"Concrete5\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/five-best-practices-for-concrete5-development\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.ahosting.net\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/category\\\/concrete5\\\/#listItem\",\"name\":\"Concrete5\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/category\\\/concrete5\\\/#listItem\",\"position\":2,\"name\":\"Concrete5\",\"item\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/category\\\/concrete5\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/five-best-practices-for-concrete5-development\\\/#listItem\",\"name\":\"Five Best Practices For Concrete5 Development\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/five-best-practices-for-concrete5-development\\\/#listItem\",\"position\":3,\"name\":\"Five Best Practices For Concrete5 Development\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/category\\\/concrete5\\\/#listItem\",\"name\":\"Concrete5\"},\"item\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/five-best-practices-for-concrete5-development\\\/\"}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/#organization\",\"name\":\"AHosting\",\"description\":\"AHosting Blog\",\"url\":\"https:\\\/\\\/www.ahosting.net\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.ahosting.net\\\/assets\\\/img\\\/ahosting-logo.svg\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/five-best-practices-for-concrete5-development\\\/#organizationLogo\"},\"image\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/five-best-practices-for-concrete5-development\\\/#organizationLogo\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/author\\\/matt-chrust\\\/#author\",\"url\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/author\\\/matt-chrust\\\/\",\"name\":\"Matt Chrust\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/five-best-practices-for-concrete5-development\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/795895edac1c44589f6c7f5e6bb79df405fbbaac15817bdd387ec57da61731ec?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Matt Chrust\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/five-best-practices-for-concrete5-development\\\/#webpage\",\"url\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/five-best-practices-for-concrete5-development\\\/\",\"name\":\"Five Best Practices For Concrete5 Development | AHosting Blog Home\",\"description\":\"Developing a theme for Concrete5 can be immensely rewarding, but unless you follow the best practices outlined here, you\\u2019re in for a rough time.\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/five-best-practices-for-concrete5-development\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/author\\\/matt-chrust\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/author\\\/matt-chrust\\\/#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/wp-content\\\/uploads\\\/2014\\\/09\\\/concrete5-best-practices.jpg\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/five-best-practices-for-concrete5-development\\\/#mainImage\",\"width\":640,\"height\":427,\"caption\":\"Concrete5 Best Practices\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/five-best-practices-for-concrete5-development\\\/#mainImage\"},\"datePublished\":\"2014-09-10T14:08:38+00:00\",\"dateModified\":\"2025-10-20T10:31:36+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/#website\",\"url\":\"https:\\\/\\\/www.ahosting.net\\\/\",\"name\":\"AHosting\",\"description\":\"AHosting Blog\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Five Best Practices For Concrete5 Development | AHosting Blog Home","description":"Developing a theme for Concrete5 can be immensely rewarding, but unless you follow the best practices outlined here, you\u2019re in for a rough time.","canonical_url":"https:\/\/www.ahosting.net\/blog\/five-best-practices-for-concrete5-development\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.ahosting.net\/blog\/five-best-practices-for-concrete5-development\/#article","name":"Five Best Practices For Concrete5 Development | AHosting Blog Home","headline":"Five Best Practices For Concrete5 Development","author":{"@type":"Person","name":"Matt Chrust","url":"https:\/\/www.ahosting.net\/blog\/author\/matt-chrust\/"},"publisher":{"@id":"https:\/\/www.ahosting.net\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2014\/09\/concrete5-best-practices.jpg","width":640,"height":427,"caption":"Concrete5 Best Practices"},"datePublished":"2014-09-10T14:08:38+00:00","dateModified":"2025-10-20T10:31:36+00:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/www.ahosting.net\/blog\/five-best-practices-for-concrete5-development\/#webpage"},"isPartOf":{"@id":"https:\/\/www.ahosting.net\/blog\/five-best-practices-for-concrete5-development\/#webpage"},"articleSection":"Concrete5"},{"@type":"BreadcrumbList","@id":"https:\/\/www.ahosting.net\/blog\/five-best-practices-for-concrete5-development\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.ahosting.net\/blog#listItem","position":1,"name":"Home","item":"https:\/\/www.ahosting.net\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/www.ahosting.net\/blog\/category\/concrete5\/#listItem","name":"Concrete5"}},{"@type":"ListItem","@id":"https:\/\/www.ahosting.net\/blog\/category\/concrete5\/#listItem","position":2,"name":"Concrete5","item":"https:\/\/www.ahosting.net\/blog\/category\/concrete5\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.ahosting.net\/blog\/five-best-practices-for-concrete5-development\/#listItem","name":"Five Best Practices For Concrete5 Development"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.ahosting.net\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.ahosting.net\/blog\/five-best-practices-for-concrete5-development\/#listItem","position":3,"name":"Five Best Practices For Concrete5 Development","previousItem":{"@type":"ListItem","@id":"https:\/\/www.ahosting.net\/blog\/category\/concrete5\/#listItem","name":"Concrete5"},"item":"https:\/\/www.ahosting.net\/blog\/five-best-practices-for-concrete5-development\/"}]},{"@type":"Organization","@id":"https:\/\/www.ahosting.net\/#organization","name":"AHosting","description":"AHosting Blog","url":"https:\/\/www.ahosting.net\/","logo":{"@type":"ImageObject","url":"https:\/\/www.ahosting.net\/assets\/img\/ahosting-logo.svg","@id":"https:\/\/www.ahosting.net\/blog\/five-best-practices-for-concrete5-development\/#organizationLogo"},"image":{"@id":"https:\/\/www.ahosting.net\/blog\/five-best-practices-for-concrete5-development\/#organizationLogo"}},{"@type":"Person","@id":"https:\/\/www.ahosting.net\/blog\/author\/matt-chrust\/#author","url":"https:\/\/www.ahosting.net\/blog\/author\/matt-chrust\/","name":"Matt Chrust","image":{"@type":"ImageObject","@id":"https:\/\/www.ahosting.net\/blog\/five-best-practices-for-concrete5-development\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/795895edac1c44589f6c7f5e6bb79df405fbbaac15817bdd387ec57da61731ec?s=96&d=mm&r=g","width":96,"height":96,"caption":"Matt Chrust"}},{"@type":"WebPage","@id":"https:\/\/www.ahosting.net\/blog\/five-best-practices-for-concrete5-development\/#webpage","url":"https:\/\/www.ahosting.net\/blog\/five-best-practices-for-concrete5-development\/","name":"Five Best Practices For Concrete5 Development | AHosting Blog Home","description":"Developing a theme for Concrete5 can be immensely rewarding, but unless you follow the best practices outlined here, you\u2019re in for a rough time.","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.ahosting.net\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.ahosting.net\/blog\/five-best-practices-for-concrete5-development\/#breadcrumblist"},"author":{"@id":"https:\/\/www.ahosting.net\/blog\/author\/matt-chrust\/#author"},"creator":{"@id":"https:\/\/www.ahosting.net\/blog\/author\/matt-chrust\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2014\/09\/concrete5-best-practices.jpg","@id":"https:\/\/www.ahosting.net\/blog\/five-best-practices-for-concrete5-development\/#mainImage","width":640,"height":427,"caption":"Concrete5 Best Practices"},"primaryImageOfPage":{"@id":"https:\/\/www.ahosting.net\/blog\/five-best-practices-for-concrete5-development\/#mainImage"},"datePublished":"2014-09-10T14:08:38+00:00","dateModified":"2025-10-20T10:31:36+00:00"},{"@type":"WebSite","@id":"https:\/\/www.ahosting.net\/#website","url":"https:\/\/www.ahosting.net\/","name":"AHosting","description":"AHosting Blog","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.ahosting.net\/#organization"}}]},"og:locale":"en_US","og:site_name":"AHosting Blog Home | AHosting Blog","og:type":"article","og:title":"Five Best Practices For Concrete5 Development | AHosting Blog Home","og:description":"Developing a theme for Concrete5 can be immensely rewarding, but unless you follow the best practices outlined here, you\u2019re in for a rough time.","og:url":"https:\/\/www.ahosting.net\/blog\/five-best-practices-for-concrete5-development\/","og:image":"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2014\/09\/concrete5-best-practices.jpg","og:image:secure_url":"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2014\/09\/concrete5-best-practices.jpg","og:image:width":640,"og:image:height":427,"article:published_time":"2014-09-10T14:08:38+00:00","article:modified_time":"2025-10-20T10:31:36+00:00","twitter:card":"summary_large_image","twitter:title":"Five Best Practices For Concrete5 Development | AHosting Blog Home","twitter:description":"Developing a theme for Concrete5 can be immensely rewarding, but unless you follow the best practices outlined here, you\u2019re in for a rough time.","twitter:image":"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2014\/09\/concrete5-best-practices.jpg"},"aioseo_meta_data":{"post_id":"149","title":"Five Best Practices For Concrete5 Development | #site_title","description":"Developing a theme for Concrete5 can be immensely rewarding, but unless you follow the best practices outlined here, you\u2019re in for a rough time.","keywords":null,"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":{"faqs":[],"keyPoints":[],"titles":[],"descriptions":[],"socialPosts":{"email":[],"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"created":"2024-01-08 10:37:55","updated":"2026-03-25 11:06:01","seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.ahosting.net\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.ahosting.net\/blog\/category\/concrete5\/\" title=\"Concrete5\">Concrete5<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tFive Best Practices For Concrete5 Development\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.ahosting.net\/blog"},{"label":"Concrete5","link":"https:\/\/www.ahosting.net\/blog\/category\/concrete5\/"},{"label":"Five Best Practices For Concrete5 Development","link":"https:\/\/www.ahosting.net\/blog\/five-best-practices-for-concrete5-development\/"}],"_links":{"self":[{"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/posts\/149","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/comments?post=149"}],"version-history":[{"count":2,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/posts\/149\/revisions"}],"predecessor-version":[{"id":284,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/posts\/149\/revisions\/284"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/media\/150"}],"wp:attachment":[{"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/media?parent=149"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/categories?post=149"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/tags?post=149"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}