MyPage is a personalized page based on your interests.The page is customized to help you to find content that matters you the most.


I'm not curious

Create a Custom Archive Page Programmatically

Published on 22 May 15
0
3
Create a Custom Archive Page Programmatically - Image 1

If you go through the list of default page types in Wordpress, you will realize that you hardly use the archive page. It is not popular as it does not offer user friendliness. Did you know you could customize the archive page programmatically? Let's see how it's done. But, before getting started with the customization, let's try and understand the archive page.

The Default Archive Page
Here is a directory of all the default pages that come with your Wordpress theme

  • 404 error page
  • Archive page
  • Image attachment page
  • Index page
  • Default page template
  • Search result page
  • Single post and attachment page


All the pages that have been listed as part of this default directory have the same ensemble structure that offers no creativity to the users. Header at the top can be attributed as the only difference between the index and archive page. The archive page offers a classic archive of all the posts, but is just an extension of the index page as far as intuitiveness and structure is concerned. As of now, the only way to introduce archives to your website is by including the widgets. This simply means eating up into the space of your website. If you want to avoid that, you can add the archive page using code.


Creating the Archive Page: Getting Started
The custom archive page that you will be creating here will include a custom welcome message. It will also include a configurable list of the posts (15 being the default number) along with author and monthly archives. The whole page will be responsive and will change itself to match the theme being used. The whole custom archive page will base itself on the custom page template. So, let's begin!


You can start creating the custom archive page using the page.php file in your theme folder. This file is optimized in order to display custom content, and it has a simple yet intuitive structure.

You will need to call the tmpl_archives.php to get started with programmatically creating the archive page.

Now, replace


<?php get_template_part( 'content', 'page' ); ?>
With
<?php get_template_part( 'content', 'tmpl_archives' ); ?>
With this, the content file that needs to be archived will be fetched

You will need to keep the HTML contents that are responsible for the archive in the file.

You have a default custom template declaration comment. Replace it with


<?php
/* Template Name: Archive Page Custom */
?>

This is the file structure that you get at the end of all the replacements

<?php
/* Template Name: Archive Page Custom */
get_header(); ?>
<div class="clear"></div>
</header> <!-- / END HOME SECTION -->
<div id="content" class="site-content">
<div class="container">
<div class="content-left-wrap col-md-9">
<div id="primary" class="content-area">
<main id="main" class="site-main" role="main">
<?php while ( have_posts() ) : the_post(); // standard WordPress loop. ?>
<?php get_template_part( 'content', 'tmpl_archives' ); // loading our custom file. ?>
<?php endwhile; // end of the loop. ?>
</main><!-- #main -->
</div><!-- #primary -->
</div>
<div class="sidebar-wrap col-md-3 content-left-wrap">
<?php get_sidebar(); ?>
</div>
</div><!-- .container -->
<?php get_footer();

You will now need to create the custom content file. Use the content-page.php, make a copy and rename it to content-tmpl_archives.php. Now, keep only the elements that are required to form the structure.

<?php
/**
* The template used to display archive content
*/
?>
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<header class="entry-header">
<h1 class="entry-title"><?php the_title(); ?></h1>
</header><!-- .entry-header -->
<div class="entry-content">
<?php the_content(); ?>
<!-- THIS IS WHERE THE FUN PART GOES -->
</div><!-- .entry-content -->
</article><!-- #post-## -->

The Custom Welcome Message
It's time to add the custom welcome message to your archive's page

<?php the_content(); ?>

With this single line code, your job's done!

Adding Widget Areas
You can create a new widget area using the standard process. Create a new file archives-page-functions.php, and place it within the theme's main directory. You can register the new widget areas here.

if(!function_exists('archives_page_widgets_init')) :
function archives_page_widgets_init() {
/* First archive page widget, displayed to the LEFT. */
register_sidebar(array(
'name' => __('Archives page widget LEFT', 'zerif-lite'),
'description' => __('This widget will be shown on the left side of your archive page.', 'zerif-lite'),
'id' => 'archives-left',
'before_widget' => '<div class="archives-widget-left">',
'after_widget' => '</div>',
'before_title' => '<h1 class="widget-title">',
'after_title' => '</h1>',
));

/* Second archive page widget, displayed to the RIGHT. */
register_sidebar(array(
'name' => __('Archives page widget RIGHT', 'zerif-lite'),
'description' => __('This widget will be shown on the right side of your archive page.', 'zerif-lite'),
'id' => 'archives-right',
'before_widget' => '<div class="archives-widget-right">',
'after_widget' => '</div>',
'before_title' => '<h1 class="widget-title">',
'after_title' => '</h1>',
));
}
endif;
add_action('widgets_init', 'archives_page_widgets_init');

You will need to style the CSS page. Here is a stylesheet that you can incorporate into the theme folder

if(!function_exists('archives_page_styles')) :
function archives_page_styles() {
if(is_page_template('tmpl_archives.php')) {
wp_enqueue_style('archives-page-style', get_template_directory_uri() . '/archives-page-style.css'); // standard way of adding style sheets in WP.
}
}
endif;
add_action('wp_enqueue_scripts', 'archives_page_styles');

You will need to activate the archives-page-functions.php file. Add the following code at the end of functions.php file

require get_template_directory() . '/archives-page-functions.php';

To call the content, you will need to place the following content in the content-tmpl_archives.php file

<?php /* Enabling the widget areas for the archive page. */ ?>
<?php if(is_active_sidebar('archives-left')) dynamic_sidebar('archives-left'); ?>
<?php if(is_active_sidebar('archives-right')) dynamic_sidebar('archives-right'); ?>
<div style="clear: both; margin-bottom: 30px;"></div><!-- clears the floating -->

Listing the Posts
You will need to list the 15 posts. You can easily achieve this by using the necessary widgets, but let's try and perform some coding to achieve this. Using the archived-posts-no custom field, you can set the number of posts. Always keep the default number at 15

Add the below code to content-tmpl_archives.php file

<?php
$how_many_last_posts = intval(get_post_meta($post->ID, 'archived-posts-no', true));

/* Here, we're making sure that the number fetched is reasonable. In case it's higher than 200 or lower than 2, we're just resetting it to the default value of 15. */
if($how_many_last_posts > 200 || $how_many_last_posts < 2) $how_many_last_posts = 15;

$my_query = new WP_Query('post_type=post&nopaging=1');
if($my_query->have_posts()) {
echo '<h1 class="widget-title">Last '.$how_many_last_posts.' Posts <i class="fa fa-bullhorn" style="vertical-align: baseline;"></i></h1>&nbsp;';
echo '<div class="archives-latest-section"><ol>';
$counter = 1;
while($my_query->have_posts() && $counter <= $how_many_last_posts) {
$my_query->the_post();
?>
<li><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
<?php
$counter++;
}
echo '</ol></div>';
wp_reset_postdata();
}
?>

Linking to Author Archives and Monthly Archives

Following code will help achieve link to author archives

<h1 class="widget-title">Our Authors <i class="fa fa-user" style="vertical-align: baseline;"></i></h1>&nbsp;
<div class="archives-authors-section">
<ul>
<?php wp_list_authors('exclude_admin=0&optioncount=1'); ?>
</ul>
</div>

Following code will help achieve link to monthly archives

<h1 class="widget-title">By Month <i class="fa fa-calendar" style="vertical-align: baseline;"></i></h1>&nbsp;
<div class="archives-by-month-section">
<p><?php wp_get_archives('type=monthly&format=custom&after= |'); ?></p>
</div>

Archive Page Template
The custom archive will be displayed using the archive page template. Here's how the structure of that template looks

<?php
/**
* The template used to display archive content
*/
?>
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<header class="entry-header">
<h1 class="entry-title"><?php the_title(); ?></h1>
</header><!-- .entry-header -->

<div class="entry-content">
<?php the_content(); ?>
<?php if(is_active_sidebar('archives-left')) dynamic_sidebar('archives-left'); ?>
<?php if(is_active_sidebar('archives-right')) dynamic_sidebar('archives-right'); ?>
<div style="clear: both; margin-bottom: 30px;"></div><!-- clears the floating -->
<?php
$how_many_last_posts = intval(get_post_meta($post->ID, 'archived-posts-no', true));
if($how_many_last_posts > 200 || $how_many_last_posts < 2) $how_many_last_posts = 15;
$my_query = new WP_Query('post_type=post&nopaging=1');
if($my_query->have_posts()) {
echo '<h1 class="widget-title">Last '.$how_many_last_posts.' Posts <i class="fa fa-bullhorn" style="vertical-align: baseline;"></i></h1>&nbsp;';
echo '<div class="archives-latest-section"><ol>';
$counter = 1;
while($my_query->have_posts() && $counter <= $how_many_last_posts) {
$my_query->the_post();
?>
<li><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
<?php
$counter++;
}
echo '</ol></div>';
wp_reset_postdata();
}
?>

<h1 class="widget-title">Our Authors <i class="fa fa-user" style="vertical-align: baseline;"></i></h1>&nbsp;
<div class="archives-authors-section">
<ul>
<?php wp_list_authors('exclude_admin=0&optioncount=1'); ?>
</ul>
</div>
<h1 class="widget-title">By Month <i class="fa fa-calendar" style="vertical-align: baseline;"></i></h1>&nbsp;
<div class="archives-by-month-section">
<p><?php wp_get_archives('type=monthly&format=custom&after= |'); ?></p>
</div>
</div><!-- .entry-content -->
</article><!-- #post-## -->

Coding the Style Sheet
The style sheet is an important part of your custom archive page design. Here's how the stylesheet would appear

.archives-widget-left {
float: left;
width: 50%;
}
.archives-widget-right {
float: left;
padding-left: 4%;
width: 46%;
}

.archives-latest-section { }
.archives-latest-section ol {
font-style: italic;
font-size: 20px;
padding: 10px 0;
}
.archives-latest-section ol li {
padding-left: 8px;
}
.archives-authors-section { }
.archives-authors-section ul {
list-style: none;
text-align: center;
border-top: 1px dotted #888;
border-bottom: 1px dotted #888;
padding: 10px 0;
font-size: 20px;
margin: 0 0 20px 0;
}
.archives-authors-section ul li {
display: inline;
padding: 0 10px;
}
.archives-authors-section ul li a {
text-decoration:none;
}
.archives-by-month-section {
ext-align: center;
word-spacing: 5px;
}
.archives-by-month-section p {
border-top: 1px dotted #888;
border-bottom: 1px dotted #888;
padding: 15px 0;
}
.archives-by-month-section p a {
text-decoration:none;
}

@media only screen and (max-width: 600px) {
.archives-widget-left {
width: 100%;
}

.archives-widget-right {
width: 100%;
}
}

The code mostly involves all typography related elements, maintaining distance from the structural elements.

Integrating into a Theme
Let's say you decide to change the theme for your Wordpress website. In that case, you will need to integrate the custom archive page also. Here's how you can achieve this task.

You will need to copy the archives-page-style.css and archives-page-functions.php files that you created and paste it to the theme's main directory. Add the line require get_template_directory() . '/archives-page-functions.php'; at the end of the functions.php file in your theme folder

Now, you will need to copy page.php, rename it, modify the get_template_part() function call by replacing it with get_template_part( 'content', 'tmpl_archives' ); Finally, add the main declaration comment at the beginning /* Template Name: Archive Page Custom */. Finally, you will need to use the content-page.php file within the theme, create a copy, rename the copy to content-tmpl_archives.php and paste the custom blocks you have just created below the_content(); function.

Once you have performed all these tasks, you are ready to get started with the custom archive page on a new theme. You can always integrate your custom archive page to the new themes.
This blog is listed under Open Source and Development & Implementations Community

Related Posts:

WordPress

 

WordPress Themes

 
Post a Comment

Please notify me the replies via email.

Important:
  • We hope the conversations that take place on MyTechLogy.com will be constructive and thought-provoking.
  • To ensure the quality of the discussion, our moderators may review/edit the comments for clarity and relevance.
  • Comments that are promotional, mean-spirited, or off-topic may be deleted per the moderators' judgment.
You may also be interested in
 
Awards & Accolades for MyTechLogy
Winner of
REDHERRING
Top 100 Asia
Finalist at SiTF Awards 2014 under the category Best Social & Community Product
Finalist at HR Vendor of the Year 2015 Awards under the category Best Learning Management System
Finalist at HR Vendor of the Year 2015 Awards under the category Best Talent Management Software
Hidden Image Url

Back to Top