各ページの最初の数語が下にある 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>
どんな助けでも大歓迎です
もう1つのオプションは、カスタムループを作成し、それを表示するテーマの「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()は、カスタムナビゲーションに投稿情報を入力するための主要なプレーヤーです。次に、nav ID、nav_postクラス、およびh2 / pに適切なcssを追加するだけで、準備完了です。おそらく、特定の数の投稿の後でループをハードストップしたいと思うでしょう-すべての投稿がナビゲーションにリストされることを望んでいるとは思えません!
各投稿のコンテンツのプレビューをフォーマットする方法を制御するには、「formatPreview()」関数を個別に作成する必要がありますが、最初の数語を単純に置き換えるのは難しいことではありません。
params を に渡すだけで、アンカー内に余分なテキストを配置する方法はないと思います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
が、これはほとんどのユースケースで機能します。
それを行う別の方法は、カスタムウォーカーを使用することです