簡體   English   中英

在 Wordpress 簡碼中使用 PHP 變量

[英]Using PHP variables in Wordpress Shortcodes

我正在使用 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 只是回退並使用默認的“添加到購物車”文本而不是文本在上面的簡碼中定義。

誰能看到我哪里出錯了?

正如您在 google 上搜索的那樣,在短代碼中添加文本是正確的,但並不完全正確。

您已經使用了“do_shortcode()”函數,該函數用於替換短代碼功能並在前端顯示其功能。 但是,如果您想在短代碼中添加參數並使其工作,則需要稍微更改短代碼功能。

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

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

您可以使用 PHP 的輸出緩沖控件

PS: do_shortcode()本身不會回顯輸出; 綁定在該操作上的任何內容也可能會自行回顯,即當您 (A) 編輯插件或 (B) 使用 OB 時。

我認為返回值中有一些奇怪的字符導致了問題,我使用了下面的表達式代碼,它似乎解決了我的問題:

$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" ]');

這是一個更好的解決方案,我不建議嘗試將短代碼用於它們不打算用於的東西。

'add_shortcode'函數不允許您使用外部變量。 它在局部范圍內運行,因此任何聲明為 INSIDE 的變量都將被識別,但任何聲明為 OUTSIDE 的變量都不會被識別。 如果要使用外部變量,則需要使用全局變量

在外部變量上使用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' );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM