我的WP帖子里有很多未格式化的文字;我试图使用这段代码:
function user_content_replace($content) {
return str_replace('.','.</p><p>',$content);
}
add_filter('the_content','user_content_replace', 99);
所以实际上我想用PARAGRAPH和PERIOD(.</p><p>
)替换PERIOD
但我需要一点帮助:首先 - 这个代码取代了每一个点,所以我所有的永久链接,图像路径等都被DOT取代而且这很糟糕,在这种情况下,web根本不起作用。< / p>
所以,我认为替换每一个DOT的解决方案对我来说都是拯救,所以不是每个DOT。
有什么想法吗?
感谢名单
编辑:
我更改了上面的代码并编辑了wp-includes文件夹中的核心post-template.php文件:
function the_content( $more_link_text = null, $strip_teaser = false) {
$content = get_the_content( $more_link_text, $strip_teaser );
$content = apply_filters( 'the_content', $content );
$content = preg_replace('/([^\\.]*\\.[^\\.]*\\.[^\\.]*){1}\\.([^\\.]*)/s', '$1.</p><p>$2',$content);
echo $content;
}
现在还可以,大部分文字都是语法正确的,现在问题是上面的表情改变了图像路径,所以反而 something.com/wp-content/image.jpg 我有 - something.com/wp-content/image。
jpg
有关于此的任何想法?
注意:
嗯,代码昨天有效,但今天不起作用。代码中没有任何更改,但它不起作用。有什么想法吗?
答案 0 :(得分:2)
我需要更换每个第三个DOT,这都是
代码示例:
$content = "first.sec\nond.third.fourth.fifth>.sixth].seventh.";
$replacement = '$1.</p><p>$2';
echo preg_replace("/([^\\.]*\\.[^\\.]*\\.[^\\.]*){1}\\.([^\\.]*)/s", $replacement, $content);
echo "\n";
输出上述代码:
first.sec
ond.third.</p><p>fourth.fifth>.sixth].</p><p>seventh.
答案 1 :(得分:1)
您可以通过一些手动字符串迭代轻松完成此操作:
$text = 'text.with.dots.text.with.dots.text.with.dots';
function user_content_replace($content) {
$str_parts = explode('.', $content);
$result = '<p>';
for ($i = 0; $i < count($str_parts); $i++) {
$result .= $str_parts[$i];
if (($i + 1) % 3 === 0)
$result .= '.</p><p>';
else
$result .= '.';
}
$result .= '</p>';
return $result;
}
然而,正如评论所指出的,这很难准确(例如,如果忘记了一个点)。这就是为什么短代码很受欢迎的原因,也就是因为使用这些短代码更准确地操作字符串内容,当用作边界时也是如此。例如,你可以这样做:
$better = '[myTag]text.with.dots[/myTag][myTag]text.with.dots[/myTag][myTag]text.with.dots[/myTag]';
function user_content_replace2($content) {
$result = preg_replace('/\[myTag\]/', '<p>', $content);
$result = preg_replace('/\[\/myTag\]/', '</p>', $result);
return $result;
}
答案 2 :(得分:0)
这是对我的问题的正确和有效的答案:
function user_content_replace($content) {
$sentences_per_paragraph = 3; // settings
$pattern = '~(?<=[.?!…])\s+~'; // some punctuation and trailing space(s)
$sentences_array = preg_split($pattern, $content, -1, PREG_SPLIT_NO_EMPTY); // get sentences into array
$sentences_count = count($sentences_array); // count sentences
$output = ''; // new content init
// see PHP modulus
for($i = 0; $i < $sentences_count; $i++) {
if($i%$sentences_per_paragraph == 0 && $i == 0) { //divisible by settings and is first
$output .= "<p>" . $sentences_array[$i] . ' '; // add paragraph and the first sentence
} elseif($i%$sentences_per_paragraph == 0 && $i > 0) { //divisible by settings and not first
$output .= "</p><p>" . $sentences_array[$i] . ' '; // close and open paragraph, add the first sentence
} else {
$output .= $sentences_array[$i] . ' '; // concatenate other sentences
}
}
$output .= "</p>"; // close the last paragraph
echo $output;
}
add_filter('the_content','user_content_replace', 99);
以上答案仅是部分答案,不适合WordPress代码层次结构。他们也导致图像URL问题,我不建议在我的问题中解释问题的方法。感谢大家的帮助。