允许在注释中使用短码之间的标记

时间:2011-09-24 作者:Joseph Leedy

在我的个人博客上,我希望评论者能够使用某些短代码(例如[html]、[css]、[js]、[php])发布代码。出于安全原因,我仍然希望剥离注释标记,但允许它们位于这些短代码之间。当我写测试注释时,“[html]<p>sample code</p>[/html]“成为”[html]&lt;p&gt;sample code&lt;/p&gt;[/html]“。为了解决这个问题,我想出了以下代码,但我无法使其运行。有人能告诉我我做错了什么吗?谢谢!

function process_code_tags($comment)
{
  $comment = preg_replace_callback(\'/(\\[html\\])(.*?)(\\[\\/html\\])/imsu\',  create_function(\'$matches\', \'return $matches[0].htmlspecialchars_decode($matches[1]).$matches[2];\'), $comment);      
  return $comment;
}
//add_filter(\'preprocess_comment\', \'process_code_tags\');
add_filter(\'comment_text\', \'process_code_tags\', 9);

1 个回复
SO网友:chrisguitarguy

你想让人们在他们的评论中发布代码,就像在这里我们可以做的那样<p>something</p> 不用担心做任何事情&gt;&lt; 东西我认为您仍然需要将这些特殊的html字符转换为各自的实体,但您需要保持警惕,以避免标签被wp_filter_kses.

您需要挂接一个名为pre_comment_content 并将短代码标记中的任何内容转换为它们的HTML实体等价物。

<?php
add_filter(\'pre_comment_text\', \'wpse29367_pre_comment_text\', 9 );
function wpse29367_pre_comment_text( $text )
{
    $text = preg_replace_callback( 
        \'/(\\[html\\])(.*?)(\\[\\/html\\])/i\', 
        create_function( \'$matches\', \'return $matches[1] . htmlspecialchars( $matches[2] ) . $matches[3];\' ),
        $text
    );
    return $text;
}
然后,您可以在您创建的快捷码函数中解码它们或任何内容:

<?php
add_action( \'init\', \'wpse29367_add_shortcode\' );
function wpse29367_add_shortcode()
{
    add_shortcode( \'html\', \'wpse29367_shortcode_cb\' );
}

function wpse29367_shortcode_cb( $atts, $content = NULL )
{
    /**
     * decode html entities here if you want
     * eg: 
     * return htmlspecialchars_decode( $content );
     */
}
拼图的最后一块,添加do_shortcode 筛选到comment\\u文本。

<?php
add_filter( \'comment_text\', \'do_shortcode\' );
您可以通过使用以下插件为您的访问者做好这项工作SyntaxHighlighter Evolved, 只需使用我发布的第一段代码do_shortcode 筛选到comment_text.

注意:未测试上述任何一项。小心复制和粘贴

结束