如果不使用插件的话,在文章中和评论中是无法插入一些 PHP、CSS、HTML、JS 等代码的,就算使用了code
或pre
标签也不行...因为 wordpress 自身有一个强大的 HTML 标签过滤系统,你插入的 html 标签会直接消失~~
本文将介绍如何在文章及评论中使用code
标签来插入代码。
/**
* WordPress 如何在文章和评论中插入代码 - 龙笑天下
* https://www.ilxtx.com/html-entities-of-code-fragments-in-posts-and-comments.html
*/
add_filter('pre_comment_content', 'lxtx_encode_code_in_posts_comments');
add_filter('the_content', 'lxtx_encode_code_in_posts_comments');
function lxtx_encode_code_in_posts_comments($source) {
$encoded = preg_replace_callback('/<code>(.*?)<\/code>/ims',
create_function(
'$matches',
'$matches[1] = preg_replace(
array("/^[\r|\n]+/i", "/[\r|\n]+$/i"), "",
$matches[1]);
return "<code>" . esc_html( $matches[1] ) . "</code>";'
),
$source);
if ($encoded)
return $encoded;
else
return $source;
}
代码改自《Automatically Escape HTML Entities of Code Fragments in Comments (WordPress) 》
将上面的代码加入 functions.php 中,然后使用 <code></code> 来插入代码即可!
其它参考文章及代码
1.如何在评论中插入图片:
今天匿名在评论里插入图片的时候,突然发现我插的图片被吞了...尴尬了,原来这么久以来我的插入图片这个按钮功能是“不起作用”的... 然后百度了下,果然有结果了:“在 WordPress 中,默认...
2.Replace Content in PRE Tags with HTML Entities
//replaces pre content with html entities
function pre_entities($matches) {
return str_replace($matches[1],htmlentities($matches[1]),$matches[0]);
}
//to html entities; assume content is in the "content" variable
$content = preg_replace_callback('/<pre.*?>(.*?)<\/pre>/imsu',pre_entities, $content);
3.Preprocess Comment Content in WordPress
// Manage comment submissions
function preprocess_new_comment($commentdata) {
// Replace `code` with <code>code</code>
$commentdata['comment_content'] = preg_replace("/`(.*)`/Um", "<code>$1</code>", $commentdata['comment_content']);
// Ensure that code inside pre's is allowed
preg_match_all("/<pre(.*?)>(.*)<\/pre>/", $commentdata['comment_content'], $pre_matches); // $2
foreach($pre_matches as $match) {
$immediate_match = str_replace(array('<', '>'), array('<', '>'), $match[2]);
$commentdata['comment_content'] = str_replace($match[2], $immediate_match, $commentdata['comment_content']);
}
// Return
return $commentdata;
}
add_action('preprocess_comment', 'preprocess_new_comment');