简短代码的简单示例:
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
文件中注释一些行,因为我正在开发一个将被许多人使用的插件 .
3 回答
我有一个类似的问题,我用
clean_url
过滤器解决了 . 请参阅我的答案编辑here .它不是短代码,所以我不能保证它会在你的特定情况下工作 . 可能值得一试 .
oyatek EDIT (来自链接的修改后的解决方案):
事实是当您使用Visual Editor时,
&
将更改为&
. 但是如果使用文本编辑器,单个&
后跟没有字符保持不变,而&sth
将更改为&sth
.总共
&
将更改为&
或&
. 我认为上面的解决方案:是一种矫枉过正,因为
so_handle_038();
解码$content
中的所有&
和&
,而在您的情况下,您只需解码$atts
数组中的那些 . 您的短代码条目可能是这样的:而
$atts
将是:要么:
所以你只需要解码
$atts['url']
:在你尝试对它做任何事情之前 .
这个是我用过的一个bandaid hack,基本上是为了修复wordpress中的问题(因为我在iFrame里面有我的链接),我去了Bitly并创建了一个没有&符号的链接!所以最后我得到一个链接,没有任何&符号,但STILL指向同一位置(加上我通过Bit.ly获得免费跟踪链接所以双倍奖金,因为我可以检查链接的次数点击了) . 不是“最佳”解决方案,但是它对我有用,我不必浪费时间试图找出Wordpress中&符号的其他解决方案 .