截取帖子的\\u内容(对于单个帖子页面)并将\\u内容划分为500个字符(或任何其他字符数)的部分,然后输出包装在自己的div容器中的每个500个字符的部分的最佳方法是什么?
我知道get\\u the\\u content()将以字符串形式返回post内容,该字符串可以存储在变量中。但是,作为PHP新手,我不知道如何根据字符数对内容进行分段。我们可以使用以下方法获得字符数:
<?php
$content = get_the_content();
echo strlen($content);
?>
但这是我所知的。有人能帮我解决这个挑战吗?
更新:在Lukas Kolletzki对stackoverflow的一些帮助下,我取得了以下进展:
<?php
$content = get_the_content();
$chunks = str_split($content, 500);
//Printing each chunk in a div
foreach($chunks as $chunk_content) {
echo "<div>";
echo $chunk_content;
echo "</div>";
}
?>
这成功地将帖子内容拆分为500个单词的部分,并将每个部分包装到单独的容器中。
更进一步,Lukas建议使用wordwrap()和explode()函数来确保单词不会被切成两半:
<?php
$content = get_the_content();
$strings = wordwrap($content, 500, "<br />"); //Put a {BREAK} every 500 characters
$chunks = explode("<br />", $strings); //Put each segment separated by {BREAK} into an array field
//Printing each chunk in a div
foreach($chunks as $chunk_content) {
echo "<div class="post-content">";
echo $chunk_content;
echo "</div>";
}
?>
这很好地工作,但现在我意识到正常的wordpress标记没有被输出。这是因为get\\u the\\u content()只输出文本,而不输出html吗?
我如何才能将这些段落返回到帖子内容中,并仍然保持上述功能?
再次感谢,请不要将此标记为重复。这是一个与摘录长度过滤问题截然不同的问题。。。至少我这么认为。
SO网友:user2655393
因此,我非常感谢@kaiser和@t31os提供的所有反馈和答案。我对PHP不太了解,所以很难用kasier&;t31os的答案。这是我的错,因为我不是一个很有天赋的程序员:-(
但是,我想发布我通过对PHP进行研究而提出的解决方案。net并就StackOverflow提出了类似的问题。
下面是我用来完成我最初打算做的事情的代码:
<?php
$content = get_the_content();
$strings = wordwrap($content, 500, "<!--break-->"); //insert this every 500 chars, but preserve whole words.
$chunks = explode("<!--break-->", $strings); create a new string of 500-char sections.
ob_start(); // buffer the output of the following expressions...
foreach($chunks as $chunk_content) {
echo \'<span>\'; // use <span> instead of <div> so as to not interrupt the paragraph formatting of the content when viewed normally (graceful degradation).
echo $chunk_content;
echo \'</span> \';
}
$segmented_content = ob_get_contents(); // put the results of the above expressions into a variable.
ob_end_clean(); // discard the expressions that were buffered.
echo nl2br($segmented_content); // put the result through a filter which replaces line-breaks with <br> tags.
?>
备注:
这种内容分段的目的是创建单独的框架或“页面”,供书架页面翻转插件使用(请查看此codrops tutorial 了解更多信息)。每个500个字符的部分将被视为一个“页面”,页面上的导航控件允许用户通过一个漂亮的CSS3 3D转换来翻转页面。
我用过<span>
容器来包装输出,因为此方法有助于进行适当的降级。如果用户的设备不支持Javascript或一些基本的CSS3属性,那么Modernizer将检测到这一点,我的CSS将进行调整,显示正常的内容页面,而不是分为单独的框架,在这种情况下<span>
不会破坏内容的正常段落结构。
我使用输出缓冲将所有500个字符部分编译成一个变量,通过nl2br();
最终输出的过滤器。
起初我试着用wpautop();
过滤以确保段落在输出中正确呈现,但很快就会记住<span>
和<p>
标记不能重叠:-P如果我应用wpautop();
单独过滤到每个500 char部分,它将输出<p>
有时在句子中间加标记。解决方案是使用nl2br();
筛选以添加<br>
内容中每个换行处的标记,因为它们不需要结束标记,将保持段落结构,而不会中断500个字符容器。
问题:此代码有效,将用于流量不高的网站(每天访问量可能少于50次)。但是,我仍然担心(因为我真的不是很了解PHP),这段代码可能很慢,也不是很优雅。
假设我确切地知道如何实现kaiser和t31os在其答案中建议的目标,那么他们的解决方案在计算速度方面是否会更好(即更少的服务器请求、db查询、更少的代码等)?还是我的解决方案同样好?