WordPress.org

Ready to get started?Download WordPress

Forums

Lists of posts by category on a page with archive page styling. (11 posts)

  1. tommyboy21
    Member
    Posted 1 year ago #

    I have been searching for a solution for this problem for AGES with no luck.
    I'm hoping that there is a WordPress genius out there with some suggestions for me!

    I want to create a page that shows a list of posts from a category in addition to having text at the top and bottom of the page.

    It's important that the list of posts takes the styling from my archive page (example of which is here: http://halloweenerrific.co.uk/category/halloween-costumes-2) because I like the way that they're shown.

    However, using category pages templates (an approach that I have tried) is problem because I want to be able to optimise each of these pages for SEO - something that would be tricky by just adding category specific text to the archive.php file.

    What would be my idea of heaven would be a page template which has shortcode to add a list of posts by category (using the archive page's styling) and using a cutom field to decide which posts show up.

    How would this be done? I'm a php noob...

  2. esmi
    Forum Moderator
    Posted 1 year ago #

    That sounds like you need to implement a a page of posts.

  3. tommyboy21
    Member
    Posted 1 year ago #

    Well, it would be a page of post, using custom fields, but using the styling of an archive page.
    The problem is that I just can't manage to get a page of posts working for my theme, let alone using the archive styling.

    I was hoping that there might already be a plugin or method for achieving this result...

  4. tommyboy21
    Member
    Posted 1 year ago #

    Below is the archive page template which I have added the `<div class="single-content">
    <?php the_content(); ?>
    </div>` to in a hope that it would bring up a text area:

    <?php get_header(); ?>
    			<!-- Begin Left Sidebar -->
    			<?php if(get_option('reedwan_sidebar_position') == 'left'): ?>
    			<div class="left-sidebar grid_4">
    				<?php get_sidebar(); ?>
    			</div>
    			<?php endif; ?>
    			<!-- End Left Sidebar -->
    				<?php /* Get author data */
    					if(get_query_var('author_name')) :
    					$curauth = get_userdatabylogin(get_query_var('author_name'));
    					else :
    					$curauth = get_userdata(get_query_var('author'));
    					endif;
    				?>
    			<!-- Begin Content -->
    			<div class="content grid_8" >
    				<div class="content-title">
    				    	<?php if(is_day()): ?>
    							<h1><?php printf(__('Daily Archives: <span>%s</span>', 'Backstreet'), get_the_date()); ?></h1>
    						<?php elseif (is_month()) : ?>
    							<h1><?php printf(__('Monthly Archives: <span>%s</span>', 'Backstreet'), get_the_date('F Y')); ?></h1>
    						<?php elseif (is_year()) : ?>
    							<h1><?php printf(__('Yearly Archives: <span>%s</span>', 'Backstreet'), get_the_date('Y')); ?></h1>
    						<?php elseif (is_category()) : ?>
    							<h1><?php echo single_tag_title(); ?></h1>
    						<?php elseif (is_tag()) : ?>
    							<h1><?php echo single_tag_title(); ?></h1>
    						<?php elseif (is_author()) : ?>
    							<h1><?php _e('All posts by', 'Backstreet'); ?> <?php echo $curauth->display_name; ?></h1>
    						<?php else : ?>
    							<h1><?php _e('Blog Archives', 'Backstreet'); ?></h1>
    						<?php endif; ?>
    				</div>
    				<div class="clear"></div>
    				<div class="single-content">
    						<?php the_content(); ?>
    					</div>
    <?php if (have_posts()) : while (have_posts()) : the_post();  ?>
    				<?php
    					if(has_post_format('video') || has_post_format('audio') || has_post_format('gallery'))
    					{
    						$format_icon = 'class="' . get_post_format() . '-post-icon"';
    					}
    					else {
    						$format_icon = 'class="-post-icon"';
    					}
    				?>
    				<div class="block-post" id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
    					<a <?php echo $format_icon; ?> href='<?php the_permalink(); ?>' title='<?php the_title(); ?>'></a>
    					<h3 class="post-title"><a href='<?php the_permalink(); ?>' title='<?php the_title(); ?>'><?php the_title(); ?></a></h3>
    					<div class="clear"></div>
    					<?php if(has_post_thumbnail()): ?>
    					<?php $image = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), 'blog1-thumb'); ?>
    					<div class="post-image alignleft">
    						<?php $fullFeatured= wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), 'full-featured-thumb'); ?>
    						<a class='preview-icon' rel='prettyPhoto' href='<?php echo $fullFeatured[0]; ?>'><img class="fadeover" src="<?php echo $image[0]; ?>" alt="<?php the_title(); ?>" width='285' height='160' /></a>
    					</div>
    					<?php else: ?>
    					<div class="post-image alignleft">
    						<a href='<?php the_permalink(); ?>' title='<?php the_title(); ?>'><img class="fadeover" src="<?php echo get_template_directory_uri(); ?>/images/thumbnail.png" alt="<?php the_title(); ?>" width='285' height='160' /></a>
    					</div>
    					<?php endif; ?>
    					<div class="post-content">
    						<p><?php echo string_limit_words(get_the_excerpt(), 55); ?><a href='<?php the_permalink(); ?>' title='<?php the_title(); ?>' class="readmore"> [...]</a></p>
    					</div>
    					<div class="clear"></div>
    					<div class="post-head">
    						<span class="info-date"><?php the_time('F j, Y'); ?></span>
    						<span class="info-author"><?php the_author(); ?></span>
    						<span class="info-category"><?php the_category(', ') ?></span>
    						<span class="info-comment"><?php comments_popup_link('0','1','%'); ?></span>
    					</div>
    				</div>
    				<div class="clear"></div>
    				<?php endwhile;
    				endif; ?>
    				<div class="clear"></div>
    				<?php kriesi_pagination($pages = '', $range = 2); ?>
    			</div>
    			<!-- End Content -->
    
    			<!-- Begin Right Sidebar -->
    			<?php if(get_option('reedwan_sidebar_position') == 'right'): ?>
    			<div class="right-sidebar grid_4">
    				<?php get_sidebar(); ?>
    			</div>
    			<?php endif; ?>
    			<!-- End Right Sidebar -->
    <?php get_footer(); ?>

    I know need to figure out what element of the page of posts code I need to include (and where) for it to allow me to choose the category using a custom field.

    Would be greatly appreciated if someone could offer me advice on this.

  5. esmi
    Forum Moderator
    Posted 1 year ago #

    See Example_Using_Custom_Fields and start with a copy of page.php - not archive.php.

  6. tommyboy21
    Member
    Posted 1 year ago #

    Thanks for your help.

    I've tried to implement page of posts using the page.php file as a starting point, but it doesn't return anything - neither the page text or
    the posts by category... Any idea where I'm going wrong?

    <?php
    /*
    Template Name: Page Of Posts with Custom Fields
    */
    
    get_header(); ?>
    			<?php if(get_option('reedwan_page_style') == 'sidebar'): ?>
    			<!-- Begin Left Sidebar -->
    			<?php if(get_option('reedwan_sidebar_position') == 'left'): ?>
    			<div class="left-sidebar grid_4">
    				<?php get_sidebar(); ?>
    			</div>
    			<?php endif; ?>
    			<!-- End Left Sidebar -->
    			<!-- Begin Content -->
    			<div class="single-container page grid_8" >
    				<?php
    if (is_page() ) {
    $category = get_post_meta($posts[0]->ID, 'category', true);
    }
    if ($category) {
     $cat = get_cat_ID($category);
     $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
     $post_per_page = 4; // -1 shows all posts
     $do_not_show_stickies = 1; // 0 to show stickies
     $args=array(
      'category__in' => array($cat),
      'orderby' => 'date',
      'order' => 'DESC',
      'paged' => $paged,
      'posts_per_page' => $post_per_page,
      'ignore_sticky_posts' => $do_not_show_stickies
     );
     $temp = $wp_query; // assign orginal query to temp variable for later use
     $wp_query = null;
     $wp_query = new WP_Query($args);
     if( have_posts() ) :
    		while ($wp_query->have_posts()) : $wp_query->the_post(); ?>
    	  <div <?php post_class() ?> id="post-<?php the_ID(); ?>">
        <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
        <small><?php the_time('F jS, Y') ?> <!-- by <?php the_author() ?> --></small>
        <div class="entry">
         <?php the_content('Read the rest of this entry »'); ?>
        </div>
        <p class="postmetadata"><?php the_tags('Tags: ', ', ', '<br />'); ?> Posted in <?php the_category(', ') ?> | <?php edit_post_link('Edit', '', ' | '); ?> <?php comments_popup_link('No Comments »', '1 Comment »', '% Comments »'); ?></p>
       </div>
      <?php endwhile; ?>
      <div class="navigation">
       <div class="alignleft"><?php next_posts_link('« Older Entries') ?></div>
       <div class="alignright"><?php previous_posts_link('Newer Entries »') ?></div>
      </div>
     <?php else : ?>
    		<h2 class="center">Not Found</h2>
    		<p class="center">Sorry, but you are looking for something that isn't here.</p>
    		<?php get_search_form(); ?>
    
    	<?php endif; 
    
    	$wp_query = $temp; //reset back to original query
    
    } // if ($category)
    ?>
    	</div>
    			</div>
    			<!-- End Content -->
    			<!-- Begin Right Sidebar -->
    			<?php if(get_option('reedwan_sidebar_position') == 'right'): ?>
    			<div class="right-sidebar grid_4">
    				<?php get_sidebar(); ?>
    			</div>
    			<?php endif; ?>
    			<!-- End Right Sidebar -->
    			<?php endif; ?>
    
    			<?php if(get_option('reedwan_page_style') == 'fullwidth'): ?>
    			<!-- Begin Content -->
    			<div class="single-container page grid_12" >
    				<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    				<div class="single-block">
    					<div class="page-line-title"><h1 class="inner-title"><?php the_title(); ?></h1></div>
    					<div class="clear"></div>
    					<div class="single-content">
    						<?php the_content(); ?>
    					</div>
    				</div>
    				<?php endwhile; endif; ?>
    			</div>
    			<!-- End Content -->
    			<?php endif; ?>
    <?php get_footer(); ?>
  7. esmi
    Forum Moderator
    Posted 1 year ago #

    You have to define the category id. You can't use $category = get_post_meta($posts[0]->ID, 'category', true).

  8. tommyboy21
    Member
    Posted 1 year ago #

    Hi,

    I'm sorry, I don't understand.
    If I'm specifying the category ID in the template, doesn't that defeat the object of using custom fields?

    I was hoping that I would be able to make a page template that I could use for different categories without having to change the template files.

    Thanks.

  9. esmi
    Forum Moderator
    Posted 1 year ago #

    If I'm specifying the category ID in the template, doesn't that defeat the object of using custom fields?

    We don't know what it is that you actually want. You may have wanted all posts with the this field but only if they were in Category X. Have a look at the Custom field example link I gave

  10. tommyboy21
    Member
    Posted 1 year ago #

    Hi,

    I have been using the custom field example, but it isn't returning results for some reason (have have tried different categories).

    I want the custom field to be 'category' so that I can create numerous pages that will contain posts from a specific category in addition to the page text (which would be input using the post text area).

    It looks as if the Genesis framework has the functionality that I'm looking for:
    http://www.studiopress.com/tutorials/category-blog-page

    But my theme isn't using the genesis framework...

  11. esmi
    Forum Moderator
    Posted 1 year ago #

    I want the custom field to be 'category' so that I can create numerous pages that will contain posts from a specific category in addition to the page text

    Then you will need a new page template for each category - each with the category hard-coded into the template.

Topic Closed

This topic has been closed to new replies.

About this Topic