我想显示一个 WordPress 导航,它下面有每个页面的前几个单词。
这是我目前拥有的:
<?php wp_list_pages('title_li=&link_after=<span>FIRST FEW WORDS HERE</span>'); ?>
我希望输出如下:
<li><a href="#">Home<span>Welcome to the website</span></a></li>
任何帮助将不胜感激
我唯一能想到的就是这样做:
用于wp_get_pages
获取所有标题(或您想要的标题),然后使用查询访问数据库,该查询将使用标题获取每个帖子。因此,对于get_pages
返回的数组中的每个标题,您都会获得相应的帖子。在 SQL 或 PHP 中,使用该substring
方法获取前几个单词,并根据需要显示。
这只是逻辑,我对代码有点生疏,所以我不想让你感到困惑。如果你不明白我会试试...
我认为没有办法通过将参数传递给wp_list_pages
. 但是,您可以过滤它并使用preg_replace
. 例如...
add_filter('wp_list_pages', function($data) {
return preg_replace('/(<a[^>]+[^<]+)<\/a>/si', '\\1<span>FIRST FEW WORDS HERE</span></a>', $data);
});
虽然我使用过preg_replace()
你也可以(并且可能应该)使用DomDocument
,但这适用于大多数用例。
另一种方法是使用自定义助行器
另一种选择是制作一个自定义循环并将其添加到您要显示它的主题的“index.php”文件中。
一个简单的例子:
<div id="nav"><ul>
<!-- start the loop-->
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<li class="nav_post">
<a href="<?php the_permalink(); ?>"><?php the_title(); ?>
<span><?php formatPreview(the_content()); ?></span></a>
</li>
<!-- stop the loop-->
<?php endwhile; else: ?>
<p>No posts!</p>
<?php endif; ?>
</ul></div>
the_permalink()、the_title() 和 the_content() 是此处使用帖子信息填充自定义导航的关键参与者。然后只需为导航 ID、nav_post 类和 h2/p 添加适当的 css 就可以了!您可能希望在一定数量的帖子后硬停止循环 - 我怀疑您是否希望在导航中列出每个帖子!
您必须单独创建“formatPreview()”函数来控制如何格式化每篇文章内容的预览 - 但仅删除前几个单词应该不难!