我认为返回值中有一些奇怪的字符导致了问题,我使用了下面的表达式代码,它似乎解决了我的问题:
$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 类,我最终使用了一些好的旧 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" ]');
这是一个更好的解决方案,我不建议尝试将短代码用于它们不打算用于的事情。