phpwordpressmagentopostsfishpig

Fishpig get title, post content, post thumbnail and permalink


I am trying to get my code to return the last 3 posts from wordpress in Magento using the Fishpig extension. This is the code I have so far, but it appears to returning posts more than once. I also need it to just return posts, as it also returns pages at the moment.

<?php $resource = Mage::getSingleton('core/resource');
   $readConnection = $resource->getConnection('core_read');
   $query = "SELECT p.id,p.post_title,p.post_name ,p.post_content,p.comment_count,pm.meta_value FROM wp_postmeta AS pm INNER JOIN wp_posts AS p ON pm.post_id=p.ID  ORDER BY p.post_date";
   $results = $readConnection->fetchAll($query);


   ?>
<?php 
   foreach($results as $row) { ?>
<?php if($row['post_title']!='Auto Draft'):  
   //Get url from pm.meta_value
   /********/
   $readConnection1 = $resource->getConnection('core_read');
   $query1 ="SELECT * FROM `wp_postmeta` WHERE `post_id` = '".$row['meta_value']."' AND meta_key='_wp_attached_file'"; 
   $results1 = $readConnection->fetchAll($query1);
   $url='/news/wp-content/uploads/'.($results1[0]['meta_value']);
   ?>
<div class="blog-post-image">
   <img src="<?php echo $url; ?>">
</div>
<div class="blog-post-content">
   <?php  ?>
   <h3> <a href="<?php echo $this->getUrl('news/').$row['post_name'];?>"> <?php echo $row['post_title'];?></a></h3>
   <p class="blog-content">  <?php $content = $row['post_content'];  echo $string = substr($content,0,220); if(strlen($content)>220){echo "...";}      ?></a></p>
   <a href="" class="blog-posts-cta">More Info</a>
</div>
<?php endif; ?>
<?php
   if($counter == 4)
   {
        break;
   }
   $counter++;   
   }

   ?>

Solution

  • To display 3 posts and display the post title, URL, image and post content (or excerpt), you would need the following code:

    <?php $posts = Mage::getResourceModel('wordpress/post_collection')
        ->addIsViewableFilter()
        ->addPostTypeFilter('post')
        ->setPageSize(3)
        ->load() ?>
    <?php if (count($posts) > 0): ?>
        <ul>
            <?php foreach($posts as $post): ?>
                <li>
                    <h2>
                        <a href="<?php echo $post->getPermalink() ?>"><?php echo $this->escapeHtml($post->getPostTitle()) ?></a>
                    </h2>
                    <?php if ($image = $post->getFeaturedImage()): ?>
                        <a href="<?php echo $post->getPermalink() ?>" class="fimg"><img src="<?php echo $image->getAvailableImage() ?>" alt="" /></a>
                    <?php endif; ?>
                    <?php echo $post->getPostContent() ?>
                    <?php
                    /**
                     * You could also use:
                     * echo $post->getPostExcerpt(20)
                     * This would display the first 20 words of the post content
                     * or the manually entered excerpt
                     **/
                    ?>
                </li>
            <?php endforeach; ?>
        </ul>
    <?php endif; ?>
    

    This has been writte quickly by hand and hasn't been tested but should work fine.