为每个字母按字母顺序排列帖子

时间:2014-06-08 作者:user51315

我需要为每个字母按字母顺序排列我的帖子。我的意思是:

当人们进入www.xxx时。com/a,他们只会通过启动a来查看帖子。

ABC XYZ公司

荷兰航空公司

是UYZ

当人们进入www.xxx时。com/b,他们只会通过启动b来查看帖子。

BCK OIO公司

BHJ PEP

我希望你能理解我想要什么。我创建了以下代码:

    <?php
$last_char = \'\';
$args=array(
  \'orderby\' => \'title\',
  \'order\' => \'ASC\',
  \'posts_per_page\'=>-1,
  \'caller_get_posts\'=>1
);
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) {
  echo \'Alphabetic index of all \' . count($my_query->posts) . \' posts\';
  while ($my_query->have_posts()) : $my_query->the_post();
    $this_char = strtoupper(substr($post->post_title,0,1));
    if ($this_char != $last_char) {
      $last_char = $this_char;
      echo \'<h2>\'.$last_char.\'</h2>\';
    } ?>
    <p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
    <?php
  endwhile;
} //if ($my_query)
wp_reset_query();  // Restore global post data stomped by the_post().
?>
然而,该代码在一个页面中按字母顺序列出所有帖子。正如我之前所说,我只想要同样的东西,但我指定了一个字母。

谢谢你帮助我。

2 个回复
最合适的回答,由SO网友:user51315 整理而成

这就是我对这个问题的看法。我找到的两个代码是由wordpress的MichaelH编写的。组织。即使他可能不会看到这个帖子,我也要感谢他。

现在,我只需要从指定的一个类别中对这些帖子进行排序。如果有人知道如何按指定类别对它们进行排序,请帮助我。谢谢

   <?php
    //get all post IDs for posts beginning with cap B, in title order,
    //display posts
    $first_char = \'B\';

    $postids=$wpdb->get_col($wpdb->prepare("
    SELECT      ID
    FROM        $wpdb->posts
    WHERE       SUBSTR($wpdb->posts.post_title,1,1) = %s
    ORDER BY    $wpdb->posts.post_title",$first_char)); 

    if ($postids) {
    $args=array(
      \'post__in\' => $postids,
      \'post_type\' => \'post\',
      \'post_status\' => \'publish\',
      \'posts_per_page\' => -1,
      \'caller_get_posts\'=> 1
    );
    $my_query = null;
    $my_query = new WP_Query($args);
    if( $my_query->have_posts() ) {
     echo \'List of Posts Titles beginning with the letter \'. $first_char;
      while ($my_query->have_posts()) : $my_query->the_post(); ?>
        <p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
        <?php
      endwhile;
    }
    wp_reset_query();  // Restore global post data stomped by the_post().
    }
    ?>

SO网友:Pieter Goosen

此代码使用URL中的最后一个字母搜索以该特定字母开头的所有帖子。所以我的网站。com/a将返回所有以字母“a”开头的帖子。为了使其正常工作,我建议为字母表中的每个字母创建一个类别。

下面是几段代码的组合。

首先,您需要获取您所在页面的当前URL。幸亏Stephen Harris, 下面的代码就可以做到这一点

$current_url = home_url(add_query_arg(array(),$wp->request));
其次,现在您有了当前的URL,您需要去掉最后一个URL之前的所有内容/ 把信留着就行了。幸亏DisgruntledGoat

$id = substr( $current_url, strrpos( $current_url, \'/\' )+1 );
好了,现在您已经有了最后一封信,您需要将其返回到查询中,以获取所有以该信开头的帖子。再次感谢前往21zna9

$request = $id; 
    $results = $wpdb->get_results(
        "
            SELECT * FROM $wpdb->posts
            WHERE post_title LIKE \'$request%\'
            AND post_type = \'post\'
            AND post_status = \'publish\'; 
        "
    ); 
现在,将所有内容放入一个工作查询中。

<ul class="posts">
<?php 
    global $wpdb, $wp; 
    $current_url = home_url(add_query_arg(array(),$wp->request));
    $id = substr( $current_url, strrpos( $current_url, \'/\' )+1 );
    $request = $id; 
    $results = $wpdb->get_results(
        "
            SELECT * FROM $wpdb->posts
            WHERE post_title LIKE \'$request%\'
            AND post_type = \'post\'
            AND post_status = \'publish\'; 
        "
    ); 

    if ( $results ) {
        foreach ( $results as $post ) {
            setup_postdata ( $post ); ?> 

                <li>
                    <?php get_template_part( \'content\', get_post_format() ); ?>
                </li>

            <?php 
        }
    } else { ?>

    <div class="alert">No posts found for this particular letter.</div>

<?php } ?>
</ul>
您只需要修改循环的输出以满足您的需要。上面的代码将让您大致了解如何操作

结束