带有可变字符串的Wordpress自定义短代码功能(新手)

时间:2013-01-29 16:19:04

标签: php wordpress shortcode

我正在尝试创建一个简单的基于Wordpress短代码的函数,该函数将采用定义的数字并将其转换为最终用户的本地货币。我被困在哪里是如何在帖子中搜索短代码,因为定义的数字可能会发生变化。如果有人可以请让我知道如何最好地将数字作为变量提取,我可以通过汇率函数运行它(工作正常,我已经使用自定义字段存储数据进行了测试)。

{customShortcode - priceAdditions [400]}

我试图在explode()周围[],这似乎显示出了希望,但我无法弄清楚如何提取它,同时还有一个以上的实例的前景用于不同的数字。我认为regexpreg_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>';
}

2 个答案:

答案 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,您就可以获得数据。