我正在使用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只是退回并使用默认的“添加到购物车”文本而不是上面的短代码中定义的文本。
谁能看到我在哪里出错?
答案 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' );