按标题排序-但现在是在WordPress Func中构建的,对_标题进行排序

时间:2013-11-17 作者:user1854236

我有一个非常简单的WP安装,我使用qtranslate插件以两种语言保存站点。问题是,我需要按标题对帖子进行排序,正如您可能知道的(使用qtranslate),这导致了问题-它按mysql条目对帖子进行排序(由于语言不同,这两个条目是两个),这给了我不需要的顺序(从第一语言开始)。

我想做的是,获取evert post的第一个字母,并按此进行排序,在php中,您认为这是一个好的解决方案吗?如果是这样的话,如何做到最好?

<?php query_posts( array ( \'category_name\' => \'publishers\', \'orderby\' => \'title\', \'order\' => \'ASC\' ) ); ?>

1 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

恐怕这很难做到。qTranslate将所有标题存储在一个数据库字段中,作为带有一些附加标记的串联字符串,因此没有机会使用SQL对其进行排序并快速完成。

您可以执行以下两种操作之一:

1. Stop using qTranslate

它确实还有许多其他缺陷。您可以使用WPML或Polylang,两者都要好得多。

2. Sort them in PHP

运行此查询后,不要使用SQL对查询中的帖子进行排序,而使用PHP对其进行排序。WP_Query 存储在中找到的帖子$wp_query->posts. 可以使用PHP对该数组进行排序。当然,您必须选择所有帖子才能使其工作,因此,如果此查询中有许多帖子,这是一个相当糟糕的主意。但如果只有少数人,那就不会那么糟糕了。。。

下面的示例代码-在这里编写,因此可能存在错误。

<?php
    $my_query = new WP_Query( array(\'post_type\'=>\'page\', \'orderby\'=>\'title\', \'order\'=>\'ASC\', \'posts_per_page\'=>-1) );
    if ( $my_query ->have_posts() ):
?>
<ul class="posts-list">
    <?php
        $found_posts = array();
        foreach ( $my_query->posts as $k=>$p ) {
            $found_posts[ apply_filters(\'the_title\', $p->post_title) ] = $p;
        }
        ksort($found_posts);
        $i=0;
        foreach ($found_posts as $k=>$p) {
            $my_query->posts[$i++] = $p;
        }
    ?>
    <?php while ( $my_query->have_posts() ): $my_query->the_post(); ?>
        <li><h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2></li>
    <?php endwhile; ?>
</ul>
<?php endif; wp_reset_postdata(); ?>

结束

相关推荐

自定义查询提要的自定义重写规则(URL中的Query_var查询字符串)?

问题已更新如果我想显示属于类别和自定义分类法、类别和标记、自定义分类法和标记的帖子(或帖子提要),我可以使用查询变量作为URL中的查询字符串。但我想先美化URL,如下所示:example.com/?category_name=main&channel=tech to example.com/main/channel/tech/example.com/?category_name=main&channel=tech&feed=rss2 to example.com/main/chan