在Wordpress Shortcodes中使用PHP变量

时间:2013-07-02 13:52:16

标签: php wordpress shortcode

我正在使用Cart66 Wordpress插件,我试图在短代码中包含一个变量,你可以看到下面的代码:

$price = do_shortcode('[add_to_cart item="test-item" showprice="only" text=""]').' test';
echo do_shortcode('[add_to_cart item="test-item" showprice="no" quantity="1" text="'.$price.'" ]');

我已经完成了一些谷歌搜索,显然这是在Wordpress短代码中包含变量的正确方法,但这似乎对我不起作用,Cart66只是退回并使用默认的“添加到购物车”文本而不是上面的短代码中定义的文本。

谁能看到我在哪里出错?

4 个答案:

答案 0 :(得分:2)

正如你用谷歌搜索在短代码中添加文字是正确的但不完全正确。

您使用了" do_shortcode()"用于替换短代码功能并在前端显示其功能的函数。但是,如果您想在短代码中添加参数并使其正常工作,您需要稍微更改短代码功能。

您必须在包含短代码功能的文件中找到短代码:

找到类似下面的代码:
add_shortcode('add_to_cart','function_name');
function function_name($atts)
{
$atts //-- will be used to add parameters as you needed
}

答案 1 :(得分:0)

您可以使用PHP的Output Buffering control

PS:do_shortcode()本身并不回显输出;任何绑定在该动作上的东西也可以自己回声,这是你(A)编辑插件,或者(B)使用OB。

答案 2 :(得分:0)

我认为returend值中有一些奇怪的字符导致了问题,我使用下面的表达式代码,它似乎解决了我的问题:

$value = substr(do_shortcode('[add_to_cart item="test-item" showprice="only" text=""]'), 0, 4).' Test';
$patterns = array();
$patterns[0] = '/"/';
$replacements = array();
$replacements[2] = ' ';
$value = preg_replace($patterns, $replacements, html_entity_decode($price, ENT_QUOTES));
echo do_shortcode('[add_to_cart item="test-item" showprice="no" quantity="1" text="'.$price.'" ]');

毋庸置疑,这是一个非常复杂的解决方案。我最后使用Wordpresses WPDB class使用了一些好的旧SQL。将大约7行代码转换为2:

$priceValue = $wpdb->get_var("SELECT price FROM wp_cart66_products WHERE id = x");
echo do_shortcode('[add_to_cart item="test-item" showprice="no" quantity="1" text="£'.$priceValue.' Membership" ]');

这是一个更好的解决方案,我不建议尝试将短代码用于他们不打算用于的东西。

答案 3 :(得分:0)

‘add_shortcode’ 函数不允许您使用外部变量。它在局部范围内运行,因此任何声明为 INSIDE 的变量都将被识别,但任何声明为 OUTSIDE 的变量都不会被识别。如果要使用外部变量,则需要使用 global。

在外部变量上使用 global 会将其拉入范围内,并允许您在 add_shortcode 函数中使用它! :)

$greeting = "hello world!";   //external variable

function run_greeting() {
  global $greeting         //pulls variable within scope
  echo $greeting;
}
add_shortcode( 'greeting_shortcode', 'run_greeting' );