使用 PHP 和正则表达式向 Wordpress 页面内容的每一行添加标记
Adding markup to each line of a Wordpress page content using PHP and Regex
我正在查看一个 Wordpress 自定义字段,用户在其中输入一些带有回车符 returns 的文本,由于 wpautop
.[=20,这些文本将被转换为 <br/>
=]
<?php echo wpautop(get_post_meta( get_the_ID(), 'customfield' , true)); ?>
接下来我需要做的是向如此获得的每一行添加一个 <span>
,以便对各个行应用一些样式。
我正在尝试使用 preg_replace
和 Regex,但这不起作用:
<?php
$subject = wpautop(get_post_meta( get_the_ID(), 'text1' , true));
$result = preg_replace('/(.*<br>)*/m', '<span></span>', $subject);
?>
<div><?php echo $result; ?></div>
...因为它将每个字符都包装在 <span>
标签中!
这有什么问题:'/((.*)<br>)*/m'
?
或者 php 中可能有更好的方法,拦截 get_post_meta
?
这是你的正则表达式:
$result = preg_replace('/(.*<br>)*/m', '<span></span>', $subject);
1 - 删除第二个 *
:
$result = preg_replace('/(.*<br>)/m', '<span></span>', $subject);
2 - 在您的评论示例中,您有 <br/>
,而不是 <br>
,使斜杠可选:
$result = preg_replace('/(.*<br\/?>)/m', '<span></span>', $subject);
3 - 让 .*
不贪心 .*?
:
$result = preg_replace('/(.*?<br\/?>)/m', '<span></span>', $subject);
4 - 更改定界符以避免转义斜杠:
$result = preg_replace('~(.*?<br/?>)~m', '<span></span>', $subject);
5 - 斜线前可能有空格:
$result = preg_replace('~(.*?<br\s*/?>)~m', '<span></span>', $subject);
6 - 试一试。
我正在查看一个 Wordpress 自定义字段,用户在其中输入一些带有回车符 returns 的文本,由于 wpautop
.[=20,这些文本将被转换为 <br/>
=]
<?php echo wpautop(get_post_meta( get_the_ID(), 'customfield' , true)); ?>
接下来我需要做的是向如此获得的每一行添加一个 <span>
,以便对各个行应用一些样式。
我正在尝试使用 preg_replace
和 Regex,但这不起作用:
<?php
$subject = wpautop(get_post_meta( get_the_ID(), 'text1' , true));
$result = preg_replace('/(.*<br>)*/m', '<span></span>', $subject);
?>
<div><?php echo $result; ?></div>
...因为它将每个字符都包装在 <span>
标签中!
这有什么问题:'/((.*)<br>)*/m'
?
或者 php 中可能有更好的方法,拦截 get_post_meta
?
这是你的正则表达式:
$result = preg_replace('/(.*<br>)*/m', '<span></span>', $subject);
1 - 删除第二个 *
:
$result = preg_replace('/(.*<br>)/m', '<span></span>', $subject);
2 - 在您的评论示例中,您有 <br/>
,而不是 <br>
,使斜杠可选:
$result = preg_replace('/(.*<br\/?>)/m', '<span></span>', $subject);
3 - 让 .*
不贪心 .*?
:
$result = preg_replace('/(.*?<br\/?>)/m', '<span></span>', $subject);
4 - 更改定界符以避免转义斜杠:
$result = preg_replace('~(.*?<br/?>)~m', '<span></span>', $subject);
5 - 斜线前可能有空格:
$result = preg_replace('~(.*?<br\s*/?>)~m', '<span></span>', $subject);
6 - 试一试。