Display latest WordPress Posts at X-cart

Here’s my solution using RSS and a Smarty plugin to pull the latest posts from any WordPress blog.

Create this file include/templater/plugins/function.sr_wpfeed.php:


if ( !defined('XCART_START') ) { header("Location: home.php"); die("Access denied"); }
## -----------------------------------------------------------------------------
## Smarty plugin "sr_wpfeed"
## Purpose: Return wordpress RSS feed
## Snow River X-Cart web store
##
## Author: Ralph Day, Snow River
##
##
## -----------------------------------------------------------------------------
##
## Changelog:
##
## 2009-10-26 Created (RD)
##
##
## -----------------------------------------------------------------------------
##
##
## Sample usage
## ------------
## {sr_wpfeed var="someposts" wpsite="http://www.glassespeople.com/blog/feed" num=3}
## {foreach from=$someposts item=somepost}
##

##
## {$someposts.title}
##

##

## {$someposts.description}
##
## {/foreach}
##
##
## Parameters
## ———-
## var [string] (required)
## Name for Smarty variable to return feed array in
##
## wpsite [string] (required)
## URL of WordPress site
##
## num [integer] (required)
## number of posts to return
##
##
## —————————————————————————–

function smarty_function_sr_wpfeed($params, &$smarty) {

global $sql_tbl;
global $store_language;

$required_params = array(‘var’,’wpsite’, ‘num’);

foreach($required_params as $_key => $reqd_param) {
if (!isset($params[$reqd_param]))
$smarty->trigger_error(“sr_wpfeed: required attribute ‘$reqd_param’ not passed”, E_USER_ERROR);
}

$var = ”;
$wpsite = ”;
$num = 0;
foreach($params as $_key => $_val) {
switch($_key) {
case ‘wpsite’:
case ‘var’:
if (!is_array($_val)) {
if ($_val <> ”)
$$_key = $_val;
else
$smarty->trigger_error(“sr_wpfeed: ‘$_key’ cannot be an empty string”, E_USER_ERROR);
} else
$smarty->trigger_error(“sr_wpfeed: ‘$_key’ cannot be an array”, E_USER_ERROR);
break;

case ‘num’:
if (!is_array($_val)) {
$$_key = (int)$_val;
if ($$_key < 0 || $$_key >25)
$smarty->trigger_error(“sr_wpfeed: ‘$_key’ not between 1 and 25”, E_USER_ERROR);
} else
$smarty->trigger_error(“sr_wpfeed: ‘$_key’ cannot be an array”, E_USER_ERROR);
break;

default:
$smarty->trigger_error(“sr_wpfeed: attribute ‘$_key’ not recognized”, E_USER_NOTICE);
break;
}
}
if(!$xml=simplexml_load_file($wpsite.’/feed’)){
$smarty->trigger_error(‘Error reading XML file’,E_USER_ERROR);
}
$posts = array();
foreach($xml as $item){
for($i=0; $i<count($item->item); $i++){
if($i<$num){ $posts[] = array(‘link’ => (string)$item->item[$i]->link
, ‘title’ => htmlentities($item->item[$i]->title,ENT_COMPAT, ‘UTF-8’)
, ‘description’ => $item->item[$i]->description
);
}
}
}

$smarty->assign($var, $posts);
}
?>

Then in whatever template you want to display the posts in you can display the posts something like this:

{sr_wpfeed var="someposts" wpsite="http://www.glassespeople.com/blog/feed" num=5}
{foreach from=$someposts item=somepost}


{$somepost.title}

{$somepost.description}

{/foreach}

his should work in any version of X-Cart as it doesn’t use any X-Cart functions. Also, there are no modifications to the X-Cart PHP code so it doesn’t get wiped out by upgrades.