0

我正在尝试创建一个基于 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>';
}
4

2 回答 2

4

You should use the built-in shortcode api from wordpress.

In your 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' );

How to use the shortcode in the editor

[convert_price price="400"]

Now you can simply use the_content() in your template loop and the shortcodes will be properly rendered.

于 2013-01-29T16:45:51.547 回答
2

I know where you're trying to go with the custom shortcode, but why don't you stick with Wordpress's build-in machinery for shortcodes and let it do the heavy lifting? The official docs say

"The API handles all the tricky parsing, eliminating the need for writing a custom regular expression for each shortcode. Helper functions are included for setting and fetching default attributes."

Your code could become:

[priceAdditions price="400"]

and with a short little addition to functions.php, you could get your data.

于 2013-01-29T16:45:32.623 回答