我正在尝试创建一个简单的基于Wordpress短代码的函数,该函数将采用定义的数字并将其转换为最终用户的本地货币。我被困在哪里是如何在帖子中搜索短代码,因为定义的数字可能会发生变化。如果有人可以请让我知道如何最好地将数字作为变量提取,我可以通过汇率函数运行它(工作正常,我已经使用自定义字段存储数据进行了测试)。
{customShortcode - priceAdditions [400]}
我试图在explode()
周围[]
,这似乎显示出了希望,但我无法弄清楚如何提取它,同时还有一个以上的实例的前景用于不同的数字。我认为regex
或preg_match
可能是要走的路,但我还不太明白。
如果您需要更多信息,请告诉我们。提前谢谢。
丹
编辑 - 有效的短代码功能 -
$thePostContent = get_the_content($post->ID);
$thePostContent = str_replace('{customShortcode - price}',thePrice(),$thePostContent);
功能 -
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>';
}
答案 0 :(得分:4)
您应该使用wordpress内置的shortcode api。
在functions.php
function thePrice( $atts ) {
extract( shortcode_atts( array(
'price' => 0 //default price
), $atts ) );
//$price is now available and will hold the user entered price
//in the example below this would be 400
/*
Your conversion code here
*/
}
add_shortcode( 'convert_price', 'thePrice' );
如何在编辑器中使用短代码
[convert_price price="400"]
现在您只需在模板循环中使用the_content()
即可正确呈现短代码。
答案 1 :(得分:2)
我知道你要在哪里使用自定义短代码,但为什么不坚持使用Wordpress的内置机器来制作短代码并让它完成繁重的工作呢? The official docs say
“API处理所有棘手的解析,无需使用 为每个短代码编写自定义正则表达式。帮手 包含用于设置和获取默认属性的函数。“
您的代码可能会变成:
[priceAdditions price="400"]
只需添加functions.php
,您就可以获得数据。