I have worked with GPD Construction for many years now – they were one of my first copywriting clients, as well as the guinea pigs for my earliest forays into web design. One of the most amazing things about such a long partnership with a company has been the opportunity to watch them grow.
When I began, GPD was a small commercial construction and concrete company in Canyon, Texas, tackling jobs across the Panhandle. Today, GPD is solely a commercial construction company with offices in Canyon and Fort Worth, Texas, and projects across the state.
This growth has resulted in rapidly changing needs for client-facing media, from their brochure (which I recently overhauled) to their website. The increased size and value of their jobs, as well as their specialization in a variety of industries meant that they needed a website to reflect their growth and keep pace with their new level of competitors.
Marketing in the commercial construction industry is an interesting challenge. Unlike so many other industries, where clients are already shopping for providers, large-scale commercial construction functions largely through requests for proposals (RFPs). Sometimes those RFPs are open to the public and sometimes they’re invitation only. For invitation-only bidding situations, the invitation likely comes through networking with other professionals in the industry or because of a company’s reputation. Either way, the RFP begins the most critical part of the marketing process, which is made more complex by the crucial balance between costs and quality that impact the bid (and which company wins it).

After evaluating this unique situation, it became clear that many visitors to the company’s website were already either considering GPD for an RFP or had received a proposal from the company. The product — the desired building project — has already sold itself. Thus, much of the fluff of websites intended to draw clients to a product became less important. Rather, the website needed to sell the company even more than the product. What would it be like to work with this company? Do they understand what it is like to build for my industry? The list of concerns goes on.
=====
I transitioned GPD to WordPress a couple of years ago, and created a child theme at that time for some small customizations. With those steps completed, part one of this website overhaul was customizing their WordPress site so that their portfolio could be categorized by a custom “industry” taxonomy.
function gpd_add_categories_portfolio() {
$labels = array(
'name' => _x( 'Industries', 'taxonomy general name', 'textdomain' ),
'singular_name' => _x( 'Industry', 'taxonomy singular name', 'textdomain' ),
'search_items' => __( 'Search Industries', 'textdomain' ),
'all_items' => __( 'All Industries', 'textdomain' ),
'parent_item' => __( 'Parent Industry', 'textdomain' ),
'parent_item_colon' => __( 'Parent Industry:', 'textdomain' ),
'edit_item' => __( 'Edit Industry', 'textdomain' ),
'update_item' => __( 'Update Industry', 'textdomain' ),
'add_new_item' => __( 'Add New Industry', 'textdomain' ),
'new_item_name' => __( 'New Industry Name', 'textdomain' ),
'menu_name' => __( 'Industry', 'textdomain' ),
);
$args = array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'industry' ),
);
register_taxonomy( 'industry', 'portfolio', $args );
}
add_action( 'init', 'gpd_add_categories_portfolio', 9999 );
From there, I created a custom taxonomy archive template so that each industry could be easily highlighted. I knew I wanted each industry to have a featured, header image at the top, a specialized tagline, and a formatted description. In order to achieve all of this, I followed this tutorial for adding custom metadata to a custom taxonomy.
// GPD - adds the form field to add an image address to the industry taxonomy
add_action( 'industry_add_form_fields', 'add_featured_image_field', 10, 2 );
function add_featured_image_field($taxonomy) {
?><div class="form-field">
<label for="industry_image_address"><?php _e('Featured Image Address (Exact URL)', 'industry'); ?></label>
<input type='text' name="industry_image_address" required>
</div><?php
}
// GPD - Save the new metadata field
add_action( 'created_industry', 'save_image_address_meta', 10, 2 );
function save_image_address_meta( $term_id, $tt_id ){
if( isset( $_POST['industry_image_address'] ) && ’ !== $_POST['industry_image_address'] ){
$group = $_POST['industry_image_address'] ;
add_term_meta( $term_id, 'industry_image_address', $group, true );
}
}
// GPD - Edit an industry with the new image metadata
add_action( 'industry_edit_form_fields', 'edit_image_address_field', 10, 2 );
function edit_image_address_field( $term, $taxonomy ){
// get current group
$current_image = get_term_meta( $term->term_id, 'industry_image_address', true );
?><tr class="form-field term-group-wrap">
<th scope="row"><label for="industry_image_address"><?php _e('Featured Image Address (Exact URL)', 'industry'); ?></label></th>
<td><input type='text' name='industry_image_address' value='<?php echo strval($current_image); ?>' required></td>
</tr> <?php
}
//GPD - Save any edits to the meta field
add_action( 'edited_industry', 'update_image_address_meta', 10, 2 );
function update_image_address_meta( $term_id, $tt_id ){
if( isset( $_POST['industry_image_address'] ) && ’ !== $_POST['industry_image_address'] ){
$group = $_POST['industry_image_address'];
update_term_meta( $term_id, 'industry_image_address', $group );
}
}
I chose to add a form field for the exact featured image url, rather than using a plugin to create a featured image for each category because the plugin seemed too bulky and unnecessary for my purposes (based on my knowledge of how often this task would occur and how it would happen).
I repeated the same steps for the other custom metadata types I needed to add. I am hoping to refactor to prevent some of what seems like very repetitive code from tapping into the WP hooks, but, at the moment, I am still learning about both WordPress and PHP. Once I understand more, I plan to revisit this issue.
WordPress wasn’t something I was very familiar with (as a developer) before this project, because I work heavily with Node and React, but I enjoyed learning about the template hierarchy, as well as all of the tags and hooks that make WordPress so easy to work with. The different framework took some “getting used to,” but with an understanding of the hierarchy and hooks, I found WordPress to be like working with any new programming language, meaning it is largely an exercise in navigating documentation and StackOverflow. I also hope to further my understanding of best WordPress practices—especially in light of all that I have been learning through my computer science course with edX.
Having worked with WordPress as a CMS for years during my writing and editing career, I plan to continue to cultivate my customization skills for my own WordPress site, as well as any other projects that come along. Although blogging applications using React are certainly possible (I built a simple one as an exercise for my coding boot camp), the rich open source community surrounding WordPress tells me that it is here to stay. With that in mind, rather than grimacing at any poor practices that open source inevitably allows contributors to employ, I am of the mind that by participating in the community, we as developers have the opportunity to raise the bar on quality.