Run shortcode before filters

时间:2011-11-04 作者:chifliiiii

我的用户在注释中发布代码片段。我为此创建了一个快捷码:

function post_codigo($atts,$content=""){

        return \'<code>\'.$content.\'</code>\';
}

add_shortcode(\'codigo\',\'post_codigo\');  
问题是html在打包到代码标记之前会被过滤掉。

我想如果我能在过滤器之前运行短代码,那么我可以使用

function pre_esc_html($content) {
  return preg_replace_callback(
    \'#(<code.*?>)(.*?)(</code>)#imsu\',
    create_function(
      \'$i\',
      \'return $i[1].esc_html($i[2]).$i[3];\'
    ),
    $content
  );
}

add_filter(
  \'the_content\',
  \'pre_esc_html\',
  9
);
我在这附近找到的。你怎么想的?

更新:好,现在我将我的快捷码更改为:

 function post_codigo($atts,$content=""){

            return \'<code>\'.esc_html($content).\'</code>\';
    }

    add_shortcode(\'codigo\',\'post_codigo\');
但它仍然添加了中断,并将整个代码分解为几个部分 标签

4 个回复
最合适的回答,由SO网友:goldenapples 整理而成

可以过滤阵列$no_texturize_shortcodes, 它是从wptexturize中排除的短代码的集合。如果你这样做[codigo] 不会对短代码标记进行纹理化:

add_filter( \'no_texturize_shortcodes\', \'no_texturize_codigo_shortcode\' );

function no_texturize_codigo_shortcode( $excluded_shortcodes ) {
    $excluded_shortcodes[] = \'codigo\';
    return $excluded_shortcodes;
}

SO网友:Simon

这个no_texturize_shortcodes filter没有为我做任何事情,因为短代码中的内容已经被wpautop() 以及任何其他连接到the_content. 我求助于更改do_shortcode 关于the_content, 所以我可以确定它是两个中的第一个。方法如下:

remove_filter(\'the_content\', \'do_shortcode\', 11); // AFTER wpautop()
add_filter(\'the_content\', \'do_shortcode\', 9); // BEFORE wpautop()
这似乎效果相当不错,但由于这对WordPress处理文本/html转换的方式有很大的改变,我建议您谨慎使用。我猜,您使用的插件/短代码越多,就越有可能遇到与此更改相关的问题。

SO网友:sxalexander

您的主题是否使用comment_text() 显示访问者的评论?

如果是,请尝试更改:

<?php comment_text(); ?>
收件人:

<?php echo do_shortcode(apply_filters(\'comment_text\', get_comment_text())); ?>
这将对注释文本应用任何“comment\\u text”过滤器,before 它将应用短代码。

无论在哪里显示评论,都应该在主题模板中执行此操作。

SO网友:Sagive

您应该使用html字符吗?

return \'&lt;code&gt;\'.$content.\'&lt;/code&gt;\';

尝试了此区域设置,效果良好gr8

结束

相关推荐

调用Function_Exist()比调用Apply_Filters()快还是慢

调用函数\\u exists()时,应用\\u filters()的速度是快还是慢。。。还是差异太小,不应该考虑?我在Kaiser的基础上做了一些测试,结果表明,在同时存在函数和过滤器的情况下,function\\u exists()的速度大约是3倍。如果过滤器不存在,速度将提高约11倍。没想到会这样。function taco_party() { return true; } add_filter( \'taco-party\', \'taco_party\'