首页 文章

WordPress:从短代码中删除#038

提问于
浏览
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

此函数通过短代码 [my_shortcode] 插入到页面正文的链接,但 & 始终更改为 &#038 ,这会破坏链接(它不再起作用) . 我google了很多 . 有一些解决方案:

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

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

我不想落到最后的解决方案,这是在WordPress formatting.php 文件中注释一些行,因为我正在开发一个将被许多人使用的插件 .

3 回答

  • 5

    我有一个类似的问题,我用 clean_url 过滤器解决了 . 请参阅我的答案编辑here .

    它不是短代码,所以我不能保证它会在你的特定情况下工作 . 可能值得一试 .

    oyatek EDIT (来自链接的修改后的解决方案):

    function so_handle_038($content) {
        $content = str_replace(array("&","&"), "&", $content); 
        return $content;
    }
    add_filter('the_content', 'so_handle_038', 199, 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']);
    

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

  • 0

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

相关问题