Posts for Page Shortcode

Below, you’ll find a detailed guide on how to add the Posts for Page Shortcode to your WordPress website, including its parameters, examples, and PHP function code. Additionally, we’ll assist you with common issues that might cause the Posts for Page Plugin shortcode not to show or not to work correctly.

Before starting, here is an overview of the Posts for Page Plugin and the shortcodes it provides:

Plugin Icon
Posts for Page

"Posts for Page is a WordPress plugin designed to effortlessly display your blog posts on any page. With its user-friendly interface, it simplifies content management. Customize your website with ease."

★★★★☆ (13) Active Installs: 2000+ Tested with: 4.3.32 PHP Version: false
Included Shortcodes:
  • [posts-for-page]

Posts for Page [posts-for-page] Shortcode

The Posts-for-Page shortcode is a versatile tool that allows you to customize the display of posts on your WordPress pages. You can define the length of posts, add a ‘Read More’ text, and customize navigation with ‘Next’ and ‘Previous’ text. It also supports sorting by categories, tags, authors, and more. You can choose to show full posts or excerpts, hide images, and even strip HTML from the content. The shortcode ensures that your posts are displayed exactly how you want them.

Shortcode: [posts-for-page]

Parameters

Here is a list of all possible posts-for-page shortcode parameters and attributes:

  • length – Defines the length of the post excerpt
  • read_more – Custom text for the ‘read more’ link
  • prev_text – Custom text for the previous page link
  • next_text – Custom text for the next page link
  • cat_slug – Specifies a category using its slug
  • cat – Specifies a category using its ID
  • tag_slug – Specifies a tag using its slug
  • order_by – Determines the order of the posts
  • post_id – Specifies a specific post using its ID
  • author – Specifies posts from a certain author
  • num – Number of posts to show
  • show_full_posts – Determines if full posts are displayed
  • hide_images – Option to hide images in the posts
  • use_wp_excerpt – Option to use the WordPress excerpt function
  • strip_html – Option to remove HTML from the post content
  • hide_post_content – Option to hide the post content
  • show_meta – Option to show the post meta data
  • hide_post_title – Option to hide the post title
  • hide_read_more – Option to hide the ‘read more’ link
  • create_para_tags – Option to create paragraph tags in the post content
  • order – Specifies the order direction of the posts
  • force_excerpt_image – Forces an image in the excerpt
  • force_image_height – Forces a specific image height
  • force_image_width – Forces a specific image width

Examples and Usage

Basic example – Display posts from a specific category by referencing the category slug.

[posts-for-page cat_slug="news" /]

Advanced examples

Display posts from a specific category, limit the number of posts displayed, and customize the “Read More” text.

[posts-for-page cat_slug="news" num="5" read_more="Continue Reading..." /]

Display posts from a specific author, hide the post content, and customize the previous and next text.

[posts-for-page author="John" hide_post_content="true" prev_text="Previous Posts" next_text="Next Posts" /]

Display a specific post by ID, show the full post content, and hide the post title.

[posts-for-page post_id="123" show_full_posts="true" hide_post_title="true" /]

These examples demonstrate the flexibility of the shortcode and how it can be used to customize the display of posts on your WordPress site.

PHP Function Code

In case you have difficulties debugging what causing issues with [posts-for-page] shortcode, check below the related PHP functions code.

Shortcode line:

add_shortcode("posts-for-page", "sc_posts_for_page");

Shortcode PHP function:

function sc_posts_for_page($atts, $content = null){
		
	if($atts['length'] > 0 ){
	}else{
		$atts['length'] = 50;
	}
	//echo $atts['read_more'];
	if($atts['read_more'] != "" ){
		$_opts['readMoreText'] = $atts['read_more'];
	}else{
		$_opts['readMoreText'] = "Read More »";
	}

	if($atts['prev_text'] != "" ){
		$_opts['prevText'] = $atts['prev_text'];
	}else{
		$_opts['prevText'] = "« Newer Entries";
	}

	if($atts['next_text'] != "" ){
		$_opts['nextText'] = $atts['next_text'];
	}else{
		$_opts['nextText'] = "Older Entries » ";
	}

	// set values from the shortcode
	$_opts['cat_slug'] = $atts['cat_slug'];
	$_opts['cat'] = $atts['cat'];
	$_opts['tag_slug'] = $atts['tag_slug'];
	$_opts['order_by'] = $atts['order_by'];
	$_opts['post_id'] = $atts['post_id'];
	$_opts['author'] = $atts['author'];
	$_opts['num'] = $atts['num'];
	
	$_opts['showFullPost'] = $atts['show_full_posts'];

	global $paged;
	
	if (empty($paged)) {
			$_opts['cur_page'] = 1;
	}
	else
	{
		$_opts['cur_page'] = $paged;
	}

	$_opts['hide_images'] = $atts['hide_images'];
	$_opts['use_wp_excerpt'] = $atts['use_wp_excerpt'];
	$_opts['strip_html'] = $atts['strip_html'];
	$_opts['hide_post_content'] = $atts['hide_post_content'];
	$_opts['show_meta'] = $atts['show_meta'];
	$_opts['hide_post_title'] = $atts['hide_post_title'];
    $_opts['hide_read_more'] = $atts['hide_read_more'];
    $_opts['create_para_tags'] = $atts['create_para_tags'];
    $_opts['order'] = $atts['order'];
    $_opts['force_excerpt_image'] = $atts['force_excerpt_image'];
    $_opts['force_image_height'] = $atts['force_image_height'];
    $_opts['force_image_width'] = $atts['force_image_width'];
    
	//get the id of the current article that is calling the shortcode
	$parent_id = get_the_ID();
	
	$output = "";
	
	$i = 0;
	
	$children  = pfp_get_posts($_opts);

	if (is_array($children))
	{
		if(count($children) <= 0){
			$out = "<strong>Items for Page:</strong> There are no posts that match the selection criteria.";
			return $out;
		}

		foreach( $children as $child ) {
			$title = $child->post_title;
			$link = get_permalink($child->ID);
			$content;
			$date;
			//$thumb = get_the_post_thumbnail($child->ID,array(60, 60, true));
			$imageSrc = "";
            $image_html = "";
            $excerpt_images = ""; 
            
            if($_opts['create_para_tags'] == "true")
            {
                //$content = wpautop($child->post_content);
                $content = wpautop(apply_filters('the_content', $child->post_content));
                //echo "wpautop";
            }
            else
            {
                //if($_opts['showFullPost'] == "true")
                //{
                    //$content = apply_filters('the_content', $child->post_content);
                //}
                //else
                //{
                    //$content = $child->post_content;
                //}
                $content = apply_filters('the_content', $child->post_content);
                //echo "no wpautop";
            }
            

			if($_opts['showFullPost'] != "true")
			{

				if($_opts['hide_images'] != 'true')
				{
					$args = array(
					'numberposts' => 1,
					'order'=> 'ASC',
					'post_mime_type' => 'image',
					'post_parent' => $child->ID ,
					'post_status' => null,
					'post_type' => 'attachment'
					);
					//get the first image and resize it 
					$attachments = get_children( $args );
					
					if ($attachments) {
						foreach($attachments as $attachment) {				
							$image_attributes = wp_get_attachment_image_src( $attachment->ID, 'thumbnail' )  ? wp_get_attachment_image_src( $attachment->ID, 'thumbnail' ) : wp_get_attachment_image_src( $attachment->ID, 'full' );
							$imageSrc = '<img src="'.wp_get_attachment_thumb_url( $attachment->ID ).'" />';
                            $imageSrc = pfp_resize_image($imageSrc, $_opts['force_image_height'], $_opts['force_image_width']);
						}
						// if attachment found need to remove the image from the post content **TODO - this is odd behaviour but works
						$content = remove_images($content);
					}	
                    else // maybe an image in the post content itself - so resize if necessary
                    {
                        $match = preg_match('/<img[^>]+./', $content, $excerpt_images);                           
                        // got array of any images found now get just the src value so we can use it when forcing the image size
                        if(!empty($excerpt_images[0]))
                        {
                            $imageSrc = pfp_resize_image($excerpt_images[0], $_opts['force_image_height'], $_opts['force_image_width']);
                            $content = remove_images($content);
                        }                                               
                    }
				}

				if($_opts['use_wp_excerpt'] == 'true')
				{					
					// use wp excerpt function
					//$post = get_post($post_id);
                    //if($_opts['force_excerpt_image'] == 'true')
                    //{
                    //    //echo "imageSrc: " . $child->ID . $imageSrc . "<br>"; 
                    //    // if one not already added as thumbnail get it from post content itself
                    //    if(empty($imageSrc))
                    //    {
                    //        $match = preg_match('/<img[^>]+./', $content, $excerpt_images);
                            
                    //        // got array of any images found now get just the src value so we can use it when forcing the image size
                    //        if(!empty($excerpt_images[0]))
                    //        {
                    //            $image_html = pfp_resize_image($excerpt_images[0], $_opts['force_image_height'], $_opts['force_image_width']);
                    //        }                               
	                   // }
                    //}                    
					setup_postdata($child);
					$content = robins_get_the_excerpt($child->ID);
                    if(!empty($image_html))
                    {
                        $content = $image_html . $content;
                    }                    
				}
				else
				{   
					// remove all images from the post
                    if($_opts['hide_images'] == 'true')
                    {
					    $content = remove_images($content);		
                    }
                    else
                    {
                        $content = ($content);		
                    }
          
					if($_opts['strip_html'] == 'true')
					{
						$content = strip_tags($content);
					}
					//split excerpt into array for processing
					$words = explode(' ', $content);
			
					//chop off the excerpt based on the atts->lenth
					$words = array_slice($words, 0, $atts['length']);
			
					//merge the array of words for the excerpt back into sentances
					$content = implode(' ', $words) . "...";	
				}	
			} 	
		
            
			// output post

			$output .= "<div class='pfpItem entry-content'>";
			
			if($_opts['hide_post_title'] != 'true')
			{
				$output .= "<h2 class='entry-title'><a href='$link'>$title</a></h2>";
			}
			if($_opts['show_meta'] == 'true')
			{
				$userid = $child->post_author;
				$userdata = get_userdata($userid); 
				$output .= "<div class='entry-meta'>";
				$output .= "Posted on " . mysql2date('F j, Y',$child->post_date) . " by " . $userdata->user_nicename;
				$output .= "</div>";
			}
			// do not get any content if it is to be hidden (i.e. show titles only)
			if($_opts['hide_post_content'] != 'true')
			{
				if( ($_opts['hide_images'] != 'true') && ($_opts['showFullPost'] != "true"))
				{
					$output .= $imageSrc;
				}
				$output .= $content;
                if( ($_opts['hide_read_more'] != 'true') && ($_opts['showFullPost'] != "true"))
                {    
				    $output .= "<a href='$link' class='pfpReadMore'>" . $_opts['readMoreText'] . "</a>";
                }
			}
			$output .= "<div class='clear'></div>";

			$output .= "<hr>";				
			$output .= "</div>";	
									
		}
	}
	
    global $wp_query;
    $page_links_total =  $wp_query->max_num_pages;

	if($_opts['cur_page'] > 1)
	{
		// show prev
		$output .= "<span class='pfpNav'>" . get_previous_posts_link($_opts['prevText']) . "</span>";
	}
	if($_opts['cur_page'] <  $page_links_total)
	{
		// show next
		$output .= "<span class='pfpNav'>" . get_next_posts_link($_opts['nextText']) . "</span>";
	}


	wp_reset_query();
	return $output;

}

Code file location:

posts-for-page/posts-for-page/posts-for-page.php

Conclusion

Now that you’ve learned how to embed the Posts for Page Plugin shortcode, understood the parameters, and seen code examples, it’s easy to use and debug any issue that might cause it to ‘not work’. If you still have difficulties with it, don’t hesitate to leave a comment below.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *