2012-12-13 82 views
0

簡單的例子一個簡碼的:WordPress的:從短代碼刪除#038

function s_print($atts){ 
    return 'http://abc.com/?foo=1&bar=2'; 
} 
add_shortcode('my_shortcode', 's_print'); 

,並返回:

http://abc.com/?foo=1&bar=2 

該功能用於插入通過簡碼[my_shortcode]一個鏈接到頁面的身體,但&總是更改爲&#038,這打破了鏈接(它不再工作)。 我GOOGLE了很多。有一些解決方案:

wp_specialchars_decode($foo); 
remove_filter('the_content','wptexturize'); 

但這些似乎只對主題(functions.php文件)使用,並沒有對簡碼的工作(我嘗試過或內部簡碼功能附加它)。

我不想落在最後的解決方案,它在WordPress formatting.php文件中評論了一些行,因爲我正在研究一個將被許多人使用的插件。

回答

5

我有一個類似的問題,我用clean_url過濾器解決。請參閱我的回答here上的編輯。

這不是一個短代碼,所以我不能保證它會在你的特定情況下工作。雖然可能值得一試。

編輯通過oyatek (從鏈接aboove修改的方案):

function so_handle_038($content) { 
    $content = str_replace(array("&","&"), "&", $content); 
    return $content; 
} 
add_filter('the_content', 'so_handle_038', 199, 1); 
+0

鏈接描述的解決方案不適用於短代碼,但我修改了一下,它的工作!太感謝了!我認爲這是無望的!讓我給你的答案添加一個解決方案。 – oyatek

+0

優秀;很高興它有幫助。 – Hobo

+0

在我的情況下,它使用'clean_url'而不是'the_content'。謝謝! – chelder

2

事實是,當您使用可視化編輯器,在&將改爲&。但是如果您使用文本編輯器,則單個&後跟沒有字符保持不變,而&sth將更改爲&sth

總共&將更改爲&&。我認爲,上述解決方案:

function so_handle_038($content) { 
    $content = str_replace(array("&","&"), "&", $content); 
    return $content; 
} 
add_filter('the_content', 'so_handle_038', 199, 1); 

是一種矯枉過正,因爲so_handle_038();解碼所有& S和& S IN的$content,而在你的情況,你只需要解碼與$atts陣列英寸你的簡碼錄入大概是這樣的:

[my_shortcode url="http://abc.com/?foo=1&bar=2" /] 

$atts將是:

array('url' => "http://abc.com/?foo=1&bar=2") 

或:

array('url' => "http://abc.com/?foo=1&bar=2") 

所以你只需要解碼$atts['url']

html_entities_decode($atts['url']); 

之前,你試圖做任何事情。

0

這一個是我用過的一個bandaid黑客,基本上是爲了解決WordPress中的問題(因爲我有我的鏈接在一個iFrame裏面),我去了Bitly並創建了一個鏈接,沒有&符號& sign!所以最後我得到了一個鏈接,沒有任何&標誌,但仍指向相同的位置(加上我通過Bit.ly免費跟蹤鏈接,所以雙重獎勵,因爲我可以檢查鏈接多少次被點擊)。不是「最好」的解決方案,但它確實對我有效,我不必浪費時間去嘗試找出Wordpress中&符號的其他解決方案。