XenLate is a simple addon to show WordPress posts in the sidebar of XenForo. The first release simply added a listener to the model. A template did a xen:callback. Everything was very basic and the model was actually jammed with HTML as well as PHP code. Nothing was clean but it moved the idea into an addon.
Today I released 1.1.0 and wanted to go through the files in case someone else wanted to see how the addon was built.
Image shows new CSS added after XenLate 1.1.0 was uploaded.
The Listener
The model
Templates
Feel free to download the addon and try it on your site.
Today I released 1.1.0 and wanted to go through the files in case someone else wanted to see how the addon was built.
Image shows new CSS added after XenLate 1.1.0 was uploaded.
The Listener
PHP:
<?php
/**
* Class TRN_XenLate_Listener_Index
*/
class TRN_XenLate_Listener_Index
{
/**
* @param $hookName
* @param $contents
* @param array $hookParams
* @param XenForo_Template_Abstract $template
*/
public static function templateHook($hookName, &$contents, array $hookParams, XenForo_Template_Abstract $template)
{
if ($hookName == 'ad_sidebar_below_visitor_panel')
{
/** @var $LatestWPPostsModel TRN_XenLate_Model_WPPosts */
$LatestWPPostsModel = XenForo_Model::create('TRN_XenLate_Model_WPPosts');
$LatestWPPosts = $LatestWPPostsModel->getPosts();
$LatestPosts = $LatestWPPostsModel->preparePosts($LatestWPPosts);
$viewParams = array(
'latestposts' => $LatestPosts,
); // Pass variables to template
$trn_xenword_contents = $template->create('trn_xenlate_latestposts', $viewParams);
$contents = $trn_xenword_contents . $contents;
}
}
}
The model
PHP:
<?php
/**
* Filename: WPPosts.php
* Author: LPH
*/
/**
* Class TRN_XenLate_Model_WPPosts
*/
class TRN_XenLate_Model_WPPosts extends XenForo_Model
{
/**
* @return array|false
*/
public function getPosts()
{
define('WP_USE_THEMES', false);
define('DOCUMENT_ROOT', $_SERVER['DOCUMENT_ROOT']);
// Change the path to the correct location
require(DOCUMENT_ROOT . '/wp-blog-header.php');
$args = array(
'numberposts' => '5',
'offset' => 0,
'post_type' => 'post',
'post_status' => 'publish'
);
$LatestWPPosts = wp_get_recent_posts($args);
return $LatestWPPosts;
}
/**
* @param $LatestWPPosts
*
* @return string
*/
public function preparePosts(array $LatestWPPosts)
{
$LatestPosts = array();
foreach($LatestWPPosts as &$LatestWPPost)
{
$LatestPostTitle = $LatestWPPost['post_title'];
$LatestPostUrl = esc_url(get_permalink($LatestWPPost['ID']));
$LatestPostExcerpt = $LatestWPPost['post_excerpt'];
$LatestPostThumbnail = get_the_post_thumbnail_url($LatestWPPost['ID'], array(50, 50));
$LatestPosts[] = array( 'postTitle' => $LatestPostTitle, 'postUrl' => $LatestPostUrl , 'postExcerpt' => $LatestPostExcerpt, 'postThumbnailUrl' => $LatestPostThumbnail ) ;
}
return $LatestPosts;
}
}
// End WPPosts.php
Templates
Code:
<xen:require css="trn_xenlate_latestposts.css" />
<div class="section">
<div class="secondaryContent">
<div class="visitorText">
<h3>Latest Articles</h3>
<div class="LatestWPPosts">
<xen:include template="trn_xenlate_latestpost_items" />
</div>
</div>
</div>
</div>
Code:
<xen:foreach loop="$latestposts" value="$latestpost">
<div class="recent_post">
<xen:if is="{$latestpost.postThumbnailUrl} != ''">
<div class="thumbnail"><img src="{$latestpost.postThumbnailUrl}"></div>
</xen:if>
<h4><a href="{$latestpost.postUrl}">{$latestpost.postTitle}</a></h4>
<div class="excerpt">{$latestpost.postExcerpt}</div>
</div>
</xen:foreach>
Feel free to download the addon and try it on your site.