我需要显示按post_title ACS
排序的所有帖子,如下所示:
A
animal
angel
apple
C
cat
cinema
crime
F
friday
fire
K
kill
king
.................
等等
因此,如果没有标题以G开头,则G不会像上面那样显示或显示为字母分隔符。 有人可以帮忙吗?
答案 0 :(得分:2)
我运行查询以获取按帖子标题排序的所有帖子,就像通常使用get_posts一样。然后我会遍历这些并使用substr来获取每个帖子标题的第一个字母。把它做成大写。创建一个新数组。检查字母是否作为数组中的键存在(array_key_exists)。如果需要,添加密钥并将帖子放入其中。按照此过程为您提供易于管理的数组,按字母排序。有没有更简单的方法?可能,但这会奏效。
以下是实现它的代码:
<?php
$posts = get_posts(
array(
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => -1,
'orderby' => 'title',
'order' => 'ASC',
)
);
$letter_keyed_posts = array();
if ( $posts ) {
foreach ( $posts as $post ) {
$first_letter = strtoupper( substr( $post->post_title, 0, 1 ) );
if ( ! array_key_exists( $first_letter, $letter_keyed_posts ) ) {
$letter_keyed_posts[ $first_letter ] = array();
}
$letter_keyed_posts[ $first_letter ][] = $post;
}
}
使用$letter_keyed_posts
以您需要的格式输出内容。
答案 1 :(得分:0)
虽然Nathan Dawson的代码看起来比下面的代码更准确,但我无法强迫他的代码在我的网站上运行。
我正在使用此代码,它已经可以使用并且适合我:
<?php
$args = array( 'cat' => YOUR_CATEGORY_ID, 'posts_per_page' => -1, 'order'=> 'ASC', 'orderby' => 'title' );
query_posts($args);
if (have_posts()) {
$current_letter = '';
while (have_posts()) {
the_post();
$title_letter = strtoupper(substr($post->post_title,0,1));
if ($title_letter != $current_letter) {
echo "<h3>$title_letter</h3>";
$current_letter = $title_letter;
}
?>
<div><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></div>
<?php
}
}
?>
答案 2 :(得分:0)
这对我来说是完美的工作。
<?php
$posts = get_posts(
array(
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => -1,
'orderby' => 'title',
'order' => 'ASC',
)
);
$alphas = range('A', 'Z');
$letter_keyed_posts = array();
if ( $posts ) {
foreach ( $posts as $post ) {
$first_letter = strtoupper( substr( $post->post_title, 0, 1 ) );
if ( ! array_key_exists( $first_letter, $letter_keyed_posts ) ) {
$letter_keyed_posts[ $first_letter ] = array();
}
$letter_keyed_posts[ $first_letter ][] = $post;
}
}
foreach ($letter_keyed_posts as $key => $value) {
?>
<table class="table">
<caption><h1 class="text-left">List of --> <?php echo $key; ?></h1></caption>
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Title</th>
</tr>
</thead>
<tbody>
<?php foreach ($value as $val) {
?>
<tr>
<th scope="row"><?php echo $val->ID; ?></th>
<td><a href="<?php echo get_permalink( $val->ID ); ?>"><?php echo $val->post_title; ?></a></td>
</tr>
<?php
} ?>
</tbody>
</table>
<?php
}
?>
谢谢[内森·道森,阿米尔·哈姆扎]