0

简码的简单示例:

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

此函数通过 shortcode 插入页面正文的链接[my_shortcode],但&始终更改为&#038,这会破坏链接(它不再工作)。我用谷歌搜索了很多。有一些解决方案:

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

但这些似乎只用于主题(functions.php),它不适用于简码(我尝试在简码函数之前或内部添加它)。

我不想落入最后一个解决方案,它正在评论 WordPressformatting.php文件中的一些行,因为我正在开发一个将被许多人使用的插件。

4

3 回答 3

6

我有一个类似的问题,我clean_url用过滤器解决了这个问题。在此处查看我的答案的编辑。

它不在简码中,所以我不能保证它会在您的特定情况下工作。不过可能值得一试。

oyatek编辑( 来自上述链接的修改解决方案):

function so_handle_038($content) {
    $content = str_replace(array("&","&"), "&", $content); 
    return $content;
}
add_filter('the_content', 'so_handle_038', 199, 1);
于 2012-12-13T06:36:13.780 回答
3

事实上,当您使用可视化编辑器时,&将更改为&. 但是如果你使用文本编辑器,single&后面没有字符保持不变,而&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 $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']);

在你尝试对它做任何事情之前。

于 2013-07-28T00:25:45.040 回答
0

这是我使用的一个创可贴黑客,基本上是为了解决 wordpress 中的问题(因为我的链接在 iFrame 中),我去了 Bitly 并创建了一个没有 & 符号的链接!所以最后我得到了一个链接,它没有任何 & 标志,但仍然指向同一个位置(另外我通过 Bit.ly 获得了免费跟踪链接,所以我可以检查链接的次数是双倍的奖励被点击)。不是“最佳”解决方案,但它对我有用,我不必浪费时间试图为 Wordpress 中的 & 符号找出其他解决方案。

于 2015-12-04T13:12:44.913 回答