我正在寻找一些提供清晰,良好的做法,示例(或链接到现有的)如何创建一个A到Z的帖子列表,其中包含自定义帖子类型的分页基于以下场景的 Wordpress 的最新版本。
我在本网站上发现了两个问题,但都没有明确或明确地回答这个问题。
让我简单地解释一下场景和那些回应。我的解释基于一个关于Fruit的网站。在尝试使用给出的答案时,我希望我和其他学习者能够轻松地按照回复并将其集成到自己的代码中。
<div id="MyAtoZArea" class="MyAtoZStyle"></div>
。<ul>
中,每个标题都是不同的列表项<li>
A
苹果
杏子
B
香蕉
A
苹果
K
猕猴桃
S
Strawberrys
欢迎所有建设性的指导和意见。
答案 0 :(得分:0)
我会像下面这样做。您应该在模板中发布以下代码:
<?php
//get the posts first
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
'paged' => $paged,
'posts_per_page' => 20,
'post_type' => 'fruits',
'post_status' => 'publish',
'orderby' => 'title'
);
$fruits = new WP_Query( $args );
?>
<ul>
<?php
//loop through all the posts in the custom query
if( $fruits->have_posts() ) {
$current_first_letter = '';
while($fruits->have_posts() ) {
$fruits->the_post();
$title = the_title();
if (is_string($title)) {
$first_letter = $title[0]
//output a first letter list item with a custom class to be styled differently in your css if it is a new first letter
if ($first_letter != $current_first_letter) {
echo '<li class="divider"'> . strtoupper($first_letter) . '</li>';
$current_first_letter = $first_letter;
}
}
?>
<li><?php the_title(); ?></li>
<?php
}
}
?>
</ul>
//pagination
<?php if ($fruits->max_num_pages > 1) { // check if the max number of pages is greater than 1 ?>
<nav class="prev-next-posts">
<div class="prev-posts-link">
<?php echo get_next_posts_link( 'Older Entries', $fruits->max_num_pages ); // display older posts link ?>
</div>
<div class="next-posts-link">
<?php echo get_previous_posts_link( 'Newer Entries' ); // display newer posts link ?>
</div>
</nav>
<?php } ?>
//restore original post data
<?php wp_reset_postdata(); ?>
您可以轻松更改代码,以便还显示没有帖子的字母标签
答案 1 :(得分:0)
请使用以下代码。你应该在你的帖子类型模板中使用以下代码:它真的对我有用...我也测试了这个代码....见截图1. http://prntscr.com/dxzi22(完整的A到Z)2。{{3 (带有分页的完整A到Z)...你需要做一些CSS ...
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array('paged' => $paged,'posts_per_page' => -1,'post_type' => 'services','post_status' => 'publish','orderby' => 'title','order' => 'asc');
$fruits = new WP_Query($args);
if($fruits->have_posts()){
$current_first_letter = '';
$t = array();
$s = array();
while($fruits->have_posts()){
$fruits->the_post();
$title = get_the_title();
if(is_string($title)){
$first_letter = strtoupper($title[0]);
if($first_letter != $current_first_letter){
$t[] = $first_letter;
$current_first_letter = $first_letter;
}
}
$s[$first_letter][] = get_the_title();
}
}
$t = array_unique($t);
$tc = count($t);
$sc = count($s);
for($i=0; $i<$tc; $i++){
?>
<div>
<h4><?php echo $t[$i]; ?></h4>
<ul>
<?php
foreach($s as $key => $value){
if($key == $t[$i]){
$vc = count($value);
for($j=0; $j<$vc; $j++){
?>
<li><?php echo $value[$j]; ?></li>
<?php
}
}
}
?>
</ul>
</div>
<?php
}
if($fruits->max_num_pages > 1){ ?>
<nav class="prev-next-posts">
<div class="prev-posts-link">
<?php echo get_next_posts_link( 'Older Entries', $fruits->max_num_pages ); ?>
</div>
<div class="next-posts-link">
<?php echo get_previous_posts_link( 'Newer Entries' ); ?>
</div>
</nav>
<?php } ?>
<?php wp_reset_postdata(); ?>