I am trying to create a simple Wordpress shortcode based function that will take a defined number and convert it to the end user's local currency. Where I am stuck is how to search the post for the shortcode because the defined number is subject to change. If someone could please let me know how best to extract the number as a variable, I can then run it through the exchange rate function (which works fine, I have tested it with custom field stored data).
{customShortcode - priceAdditions [400]}
I have tried to explode()
it around the []
and that seems to show promise but I can't work out how to extract it, also with the prospect of more than one instance of this being used with different numbers. I think regex
or preg_match
may be the way to go but I don't quite understand that just yet.
If you need more info, please let me know. Thanks in advance.
Dan
Edit - The function for the shortcode that works -
$thePostContent = get_the_content($post->ID);
$thePostContent = str_replace('{customShortcode - price}',thePrice(),$thePostContent);
The function -
function thePrice(){
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
$Exploded_URL = explode("/",$pageURL);
if ($Exploded_URL[4] == ''){$thePostIsIn = 217;}
elseif ($Exploded_URL[4] == 'productA'){$thePostIsIn = 347;}
elseif ($Exploded_URL[4] == 'productB'){$thePostIsIn = 345;}
else {$thePostIsIn = 217;}
if (empty($_COOKIE['userLocate']) || $_COOKIE['userLocate'] == 'US' || ($_COOKIE['userLocate'] != 'EU' && $_COOKIE['userLocate'] != 'AU' && $_COOKIE['userLocate'] != 'GB')){
$currencyCode = 'USD';
$currencyPrefix = '$';
}
elseif ($_COOKIE['userLocate'] == 'EU'){
$currencyCode = 'EUR';
$currencyPrefix = '€';
}
elseif ($_COOKIE['userLocate'] == 'AU'){
$currencyCode = 'AUD';
$currencyPrefix = 'A$';
}
elseif ($_COOKIE['userLocate'] == 'GB'){
$currencyCode = 'GBP';
$currencyPrefix = '£';
}
else {
$currencyCode = 'USD';
$currencyPrefix = '$';
}
$args=array(
'post_type' =>'page',
'post__in' => array($thePostIsIn)
);
$recent_posts = get_posts($args);
foreach( $recent_posts as $recent ){
$mypages = get_post( $recent->ID );
$theBaseRate = get_post_meta($recent->ID, "Payment Cost",1);
if(get_post_meta($recent->ID, "Payment Period",1)){
$payPeriod = get_post_meta($recent->ID, "Payment Period",1);
}
else{
$payPeriod = "per month";
}
$rssFeedUrl = "http://themoneyconverter.com/rss-feed/GBP/rss.xml";
$rss = simplexml_load_file($rssFeedUrl);
foreach($rss->channel->item as $feedItem){
$currency = explode('/',$feedItem->title);
if(strpos($currency[0], $currencyCode )!== false){
$content = $feedItem->description;
$content = explode('= ',$content);
$content = substr($content[1],0,7);
$theCost = $theBaseRate * $content;
$theCost = number_format($theCost, 2, '.', '');
}
}
}
echo '<p class="rentCost"><span class="rentalCost">'.$currencyPrefix.$theCost.' '.$payPeriod.'</span></p><div class="clear"></div>';
}