我有通过 Wordpress 输出的内容,它<p>
在内容周围包裹了段落标签。我需要删除第一个<p></p>
.. 中的内容。我该怎么做?
例如,输出为:
<p>Posted by Bob</p>
<p>This is the content here</p>
<p>This is the second paragraph</p>
我想删除该行<p>Posted by Bob</p>
并留下其余部分。
我有通过 Wordpress 输出的内容,它<p>
在内容周围包裹了段落标签。我需要删除第一个<p></p>
.. 中的内容。我该怎么做?
例如,输出为:
<p>Posted by Bob</p>
<p>This is the content here</p>
<p>This is the second paragraph</p>
我想删除该行<p>Posted by Bob</p>
并留下其余部分。
在这种情况下,正则表达式解决方案可能工作正常:
$str = preg_replace('~<p>.*?</p>~s', '', $str, 1);
重要的是
?
使得不.*
贪婪(以便它尽快停止并且不会持续到最后</p>
s
,以便.
能够匹配换行符1
,以便仅删除第一个匹配项如果您只想删除标记的内容(因此如果您想保留一个空段落),只需将<p></p>
其用作替换字符串。
但是,正如我所说,这仍然不是一个完美的解决方案。想想<p>
评论中的<p>
标签,或者具有属性甚至无效 HTML 的标签。PHP 带有一个DOM 解析器。如果你可以使用 3rd-party 库,还有这个,它使用起来非常方便,并且使问题几乎变得微不足道:
require "simple_html_dom.php";
$html = new simple_html_dom($input);
$html->load($input);
$html->find('p', 0)->outertext = "";
$output = $html->save();
同样,如果您只想清空标签但保留它,请替换outertext
为innertext
.
如果您有权访问 jQuery,则可以使用以下内容:
$("p:first-child").text("Hello World!");
要在 WordPress 中包含 jQuery,请在您的<head></head>
:
<?php wp_enqueue_script("jquery"); ?>
<?php wp_head(); ?>
这以安全的方式包括 jQuery,并防止与其他 jQuery 实例或其他库发生任何冲突。