WordPress 帖子按每个字母的字母顺序排序

Ann*_*yan 1 php wordpress

我需要显示所有按 排序的帖子post_title ACS,如下所示:

A
  animal
  angel
  apple
C
  cat
  cinema
  crime
F
  friday
  fire
K
  kill
  king
  .................
Run Code Online (Sandbox Code Playgroud)

等等

因此,如果没有标题以 G 开头的帖子,则 G 将不会像上面那样显示或显示为字母分隔符。有人可以帮忙吗?

Nat*_*son 5

我将运行一个查询来获取按帖子标题排序的所有帖子,就像您通常使用 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

用于$letter_keyed_posts以您需要的格式输出内容。