How to Build a Single Page Portfolio Theme – Part 2 – About Us Section

Posted on 25th August, 2014 65 Comments

For the about us section, we’re going to create a custom_post_type with custom meta boxes to create the various section required for a about us section. The custom meta boxes we’re adding will contain Name, Description, Skills, Email & a Phone number.

Custom Post Type

Open your functions.php and go to line 80. Under the add_theme_support(“post_thumbnails”); add a new thumbnail size a 200px by 200px square image.

add_image_size( 'about-us-thumbnail', 200, 200, true );

Now lets register out custom post type. At the bottom of our functions.php add this code.

 // Register Custom Post Type
function about_us_post_type() {

	$labels = array(
		'name'                => 'About Us',
		'singular_name'       => 'About Us',
		'menu_name'           => 'About Us',
		'parent_item_colon'   => 'Parent Item:',
		'all_items'           => 'All Staff',
		'view_item'           => 'View Item',
		'add_new_item'        => 'Add New Member',
		'add_new'             => 'Add New',
		'edit_item'           => 'Edit Item',
		'update_item'         => 'Update Item',
		'search_items'        => 'Search Item',
		'not_found'           => 'Not found',
		'not_found_in_trash'  => 'Not found in Trash',
	$args = array(
		'label'               => 'about-us',
		'description'         => 'Where you tell people about yourself',
		'labels'              => $labels,
		'supports'            => array( 'thumbnail' ),
		'hierarchical'        => false,
		'public'              => true,
		'show_ui'             => true,
		'show_in_menu'        => true,
		'show_in_nav_menus'   => true,
		'show_in_admin_bar'   => true,
		'menu_position'       => 5,
		'menu_icon'           => ' ',
		'can_export'          => true,
		'has_archive'         => false,
		'exclude_from_search' => true,
		'publicly_queryable'  => true,
		'capability_type'     => 'page',
	register_post_type( 'about-us', $args );

// Hook into the 'init' action
add_action( 'init', 'about_us_post_type', 0 );

Custom Meta Boxes

If you want to get some in depth knowledge about custom meta boxes then I could recommend this article on the Great article here on creating custom_meta type boxes

Then to keep things clean we’ll need to create a new directory in out theme for our custom meta boxes.

Then in this new about-us folder we’ll add 3 new files;

  1. about-us/about-us.css
  2. about-us/about-us.php
  3. about-us/about-us-meta.php


give our metaboxes some style to make’em look nice. You’ll notice at the top, I’ve imported an icon from dashicons, this is for the new menu item we’re adding “About Us”.


/* Also add an icon to our menu. Using WP built in icon font */
#adminmenu .menu-icon-about-us div.wp-menu-image:before {
			content: "\f307";
.wptricks_meta_control .description {
	display: none;

.wptricks_meta_control label {
	display: block;
	font-weight: bold;
	margin: 6px;
	margin-bottom: 0;
	margin-top: 12px;

.wptricks_meta_control label span {
	display: inline;
	font-weight: normal;

.wptricks_meta_control span {
	color: #999;
	display: block;

.wptricks_meta_control hr {
	margin: 20px 0;	

.wptricks_meta_control textarea,
.wptricks_meta_control input[type='text'] {
	margin-bottom: 3px;
	width: 99%;

.wptricks_meta_control h4 {
	color: #999;
	font-size: 1em;
	margin: 15px 6px;
	text-transform: uppercase;


This creates the section that we’ll see when we add a new “about us” item. You could modify this to include twitter, skype, facebook… anything you’d like or think will be relevant to your needs. Again I am using icons provided by which are the default icon fonts used by WordPress.

<div class="wptricks_meta_control">
	<label><div class="dashicons dashicons-groups"></div> Name</label>

		<input type="text" name="_wptricks_about_meta[name]" value="<?php if(!empty($aboutmeta['name'])) echo $aboutmeta['name']; ?>"/>
		<span>Enter your first and last name.</span>

	<label><div class="dashicons dashicons-testimonial"></div> Describe Yourself<span>(optional)</span></label>

		<textarea name="_wptricks_about_meta[description]" rows="3"><?php if(!empty($aboutmeta['description'])) echo $aboutmeta['description']; ?></textarea>
		<span>Enter in a short description about yourself.</span>

	<label><div class="dashicons dashicons-welcome-learn-more"></div> Skills</label>
		<input type="text" name="_wptricks_about_meta[skills]" value="<?php if(!empty($aboutmeta['skills'])) echo $aboutmeta['skills']; ?>"/>
		<span>Enter in your skills above, seperate them how you like (ex. "| / - ,"). </span>
	<label><div class="dashicons dashicons-email-alt"></div> Email</label>

		<input type="text" name="_wptricks_about_meta[email]" value="<?php if(!empty($aboutmeta['email'])) echo $aboutmeta['email']; ?>"/>
		<span>Enter your email addresss.</span>
	<label><div class="dashicons dashicons-smartphone"></div> Phone</label>

		<input type="text" name="_wptricks_about_meta[phone]" value="<?php if(!empty($aboutmeta['phone'])) echo $aboutmeta['phone']; ?>"/>
		<span>Enter your phone number.</span>


We can now open up WordPress and take a look at our hard work, you will see “About Us” added below our “Posts” label. Click on “Add New” and take a look at our new custom post type.

Edit Item ‹ WPtricks Testing — WordPress

Finally for the about-us/ folder lets add another file.


The function of the meta-boxes.php is to save our metadata to the database so we can use it later in our theme.




function wptricks_about_meta_init()

	wp_enqueue_style('wptricks_about_meta_css', WPTRICKS_STARTER_PATH . '/about-us/about-us.css');

	foreach (array('about-us') as $type) 
		add_meta_box('wptricks_about_meta', '<div class="dashicons dashicons-id"></div> Enter Your Details', 'wptricks_about_meta_setup', $type, 'normal', 'high');

function wptricks_about_meta_setup()
	global $post;
	$aboutmeta = get_post_meta($post->ID,'_wptricks_about_meta',TRUE);
	include(WPTRICKS_STARTER_THEME . '/about-us/about-us.php');
	echo '<input type="hidden" name="wptricks_about_meta_noncename" value="' . wp_create_nonce(__FILE__) . '" />';

function wptricks_about_meta_save($post_id) 
	if (!wp_verify_nonce($_POST['wptricks_about_meta_noncename'],__FILE__)) return $post_id;
	if ($_POST['post_type'] == 'page') 
		if (!current_user_can('edit_page', $post_id)) return $post_id;
	} else {
		if (!current_user_can('edit_post', $post_id)) return $post_id;

	$current_data = get_post_meta($post_id, '_wptricks_about_meta', TRUE);	
	$new_data = $_POST['_wptricks_about_meta'];

	if ($current_data) 
		if (is_null($new_data)) delete_post_meta($post_id,'_wptricks_about_meta');
		else update_post_meta($post_id,'_wptricks_about_meta',$new_data);
	elseif (!is_null($new_data))

	return $post_id;

function wptricks_meta_clean(&$arr)
	if (is_array($arr))
		foreach ($arr as $i => $v)
			if (is_array($arr[$i])) 

				if (!count($arr[$i])) 
			} else {
				if (trim($arr[$i]) == '') 

		if (!count($arr)) 
			$arr = NULL;



Open your home-page-template.php add this below the strapline.


<section class="about-us">
			<div class="wrapper">
            	<h2>About Us</h2>
			<div class="wrapper">
	 			<ul class="clearfix">
	// select our about-us post types
	$wptricckspost = array( 'post_type' => 'about-us', );
	// Create the new loop
	$loop = new WP_Query( $wptricckspost );
	<?php // Make sure we're on the correct post type
		 while ( $loop->have_posts() ) : $loop->the_post();?>
				<li class="about-me">
                    <article id="post-<?php the_ID(); ?>">
                            <?php // Output the featured image
                                 the_post_thumbnail('about-us-thumbnail'); ?>
                            <?php // Check we have the content 
                                $my_about_meta = get_post_meta($post->ID,'_wptricks_about_meta',TRUE); ?>
                            <h3><?php // Output the users name, description, skills, phone number and contact email address  
                                     echo $my_about_meta['name']; ?></h3>
                            <p><?php echo $my_about_meta['description']; ?></p>
                            <p><?php echo $my_about_meta['skills']; ?></p>
                              <i class="fa  fa-envelope"></i> <a href="mailto:<?php echo $my_about_meta['email']; ?>"><?php echo $my_about_meta['email']; ?></a>
                            <i class="fa  fa-phone"></i>  <a href="tel:<?php /* Remove everything except the numbers */ echo preg_replace('/[^0-9]/','', $my_about_meta['phone']) ?>"><?php /* Replace spaces with hyphens */ echo str_replace(' ','-', $my_about_meta['phone']) ?></a>
				<?php endwhile; ?>
				<?php wp_reset_query(); ?>
			</div><!-- /.wrapper -->
		</section> <!-- /.about-us -->




finally for our about section we can add some styles to the themes style.css. Basically what I want to do is change the width of the about us boxes with some clever CSS, this’ll check for the amount of li’s in view and adjust the widths accordingly.

/* About Section
-------------------------------------------------- */
[class*=icon] {text-decoration: none;}
.about-me article > * {
	padding: 12px 18px;
#about-us img {
	border-radius: 50%;
	overflow: hidden;	
	padding: 3px;
	border: solid #444 3px;
	display: inline-block;
	background: #f1f1f1;
	line-height: 0;
.about-me {
	text-align: center;
.about-me section,
.about-me footer {
	background: #eee;
.about-me > article {
    border: 1px solid #ccc;
	border-bottom: 6px solid #444;

#about-us ul {
	padding: 0;
/* one item */
#about-us li:first-child:nth-last-child(1) {
	width: 100%;

/* two items */
#about-us li:first-child:nth-last-child(2),
#about-us li:first-child:nth-last-child(2) ~ li {
	width: 50%;
	padding: 0 3.7%;

/* three items */
#about-us li:first-child:nth-last-child(3),
#about-us li:first-child:nth-last-child(3) ~ li {
	width: 33.3%;
	padding: 0 2.7%;

/* four items */
#about-us li:first-child:nth-last-child(4),
#about-us li:first-child:nth-last-child(4) ~ li,
/* Every item after the fourth will also use this width */
#about-us li:nth-last-child(n+5) {
	width: 25%;
	padding: 0 1.7%;

Portfolio Grid Section

Go there now… Click Here


To preserve code added to a comment you can wrap your code in short tags
by using [square brackets]:

  1. PHP use - [php] <?php code here ?> [/php]
  2. CSS use - [css] #code-here {} [/css]
  3. HTML use - [html] <div> code here </div> [/html]
  4. JS use - [js] $(".codeHere") [/js]


25th, Oct, 20

After and in array from acute ingestions online version. [url=]buying tadalafil in mexico[/url] opinionated (which is a remittent of a twopenny distributed mesas)

Elisabeth Pope

14th, Dec, 20


Domain Notice Expiry ON: Dec 13, 2020

We have not gotten a settlement from you.
We have actually attempted to contact you yet were not able to contact you.

Go To:

For details as well as to process a discretionary payment for your domain website services.


07th, Jan, 21

Taxi moto line
128 Rue la Boétie
75008 Paris
+33 6 51 612 712  

Taxi moto paris

Fantastic beat ! I wish to apprentice whilst you amend your web site, how can i subscribe
for a blog website? The account aided me a appropriate
deal. I had been a little bit familiar of this your broadcast offered vibrant transparent concept

zortilo nrel

15th, Jan, 21

hey there and thank you on your information – I have certainly picked up anything new from right here. I did on the other hand experience a few technical points the usage of this website, since I experienced to reload the website many times prior to I could get it to load properly. I had been pondering in case your web hosting is OK? Not that I am complaining, but slow loading cases occasions will sometimes impact your placement in google and could harm your high quality rating if ads and ***********|advertising|advertising|advertising and *********** with Adwords. Well I’m including this RSS to my e-mail and could look out for much more of your respective exciting content. Make sure you update this once more very soon..


14th, Feb, 21

find a doctor wichita ks – tadalafil Iaafi67
side effects of cialis on men
ablation prostate et viagra: [url=]viagra for sale[/url]

zortilo nrel

18th, Feb, 21

I’ve been absent for some time, but now I remember why I used to love this blog. Thanks, I’ll try and check back more often. How frequently you update your web site?

Billie Froggatt

22nd, Feb, 21


Domain Notice Expiry ON: Feb 21, 2021

We have not received a settlement from you.
We’ve tried to call you yet were not able to contact you.

Go To:

For details as well as to post a discretionary settlement for your domain website services.

22nd, Feb, 21

Hi there Dear, are you genuinely visiting this site daily,
if so after that you will without doubt get nice know-how.

best CBD gummies

22nd, Feb, 21

Undeniably believe that which you stated. Your favorite reason appeared to be on the net the easiest thing to be
aware of. I say to you, I definitely get irked while people think about worries that they just don’t know about.

You managed to hit the nail upon the top and defined out the
whole thing without having side effect , people could take
a signal. Will probably be back to get more.

hydroxychloroquine patient assistance

25th, Feb, 21

What i don’t understood is in fact how you are no longer actually a lot more smartly-appreciated than you might be right now.

You’re very intelligent. You already know therefore considerably with
regards to this subject, made me individually consider it from numerous various angles.
Its like women and men don’t seem to be fascinated until it is something to accomplish with Woman gaga!

Your own stuffs nice. Always care for it up!

dapoxetine super active plus

07th, Mar, 21

I just like the helpful info you supply in your articles.
I’ll bookmark your weblog and check once more here frequently.
I am rather certain I’ll be told plenty of new stuff proper here!
Good luck for the next!

aurogra health benefits

07th, Mar, 21

Whats up very nice site!! Guy .. Excellent .. Wonderful ..
I will bookmark your site and take the feeds additionally?

I’m glad to seek out a lot of helpful information here in the publish, we want
develop extra strategies on this regard, thanks
for sharing. . . . . .

Leave a Comment

To preserve code added to a comment you can wrap your code in short tags
by using [square brackets]:

  1. PHP use - [php] <?php code here ?> [/php]
  2. CSS use - [css] #code-here {} [/css]
  3. HTML use - [html] <div> code here </div> [/html]
  4. JS use - [js] $(".codeHere") [/js]