简短代码的简单示例:
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]
插入指向页面正文的链接,但&
始终更改为&
,这会破坏链接(它不再起作用)。
我google了很多。有一些解决方案:
wp_specialchars_decode($foo);
remove_filter('the_content','wptexturize');
但这些似乎仅用于主题(functions.php),并且它不适用于短代码(我尝试在短代码函数之前或之内添加它)。
我不想归结为最后一个解决方案,即在WordPress formatting.php
文件中注释某些行,因为我正在处理一个将被许多人使用的插件。
答案 0 :(得分:5)
我遇到过与clean_url
过滤器相关的类似问题。请参阅我的回答here上的修改。
它不是短代码,所以我不能保证它会在你的特定情况下工作。可能值得一试。
oyatek编辑 (来自链接的修改后的解决方案):
function so_handle_038($content) {
$content = str_replace(array("&","&"), "&", $content);
return $content;
}
add_filter('the_content', 'so_handle_038', 199, 1);
答案 1 :(得分:3)
事实是,当您使用Visual Editor时,&
将更改为&
。但是,如果您使用文本编辑器,则单&
后跟无字符保持不变,而&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();
会对&
中的所有&
和$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']);
在你尝试对它做任何事情之前。
答案 2 :(得分:0)
这是一个我用过的绑带黑客,基本上是为了解决wordpress中的问题(因为我在iFrame中有我的链接),我去了Bitly并创建了一个没有&符号的链接。标志!所以最后我得到了一个DIDN&T已经拥有任何&的链接。标志,但STILL指向同一位置(另外,我通过Bit.ly获得链接的免费跟踪,因此我可以检查链接被点击的次数的双倍奖励)。不是" Best"解决方案,但它对我有用,我没有时间浪费时间试图找出其他解决方案。 Wordpress中的符号。