按标题排序wordpress帖子,忽略像“the”,“a”,“an”这样的文章

时间:2011-12-22 21:41:09

标签: wordpress sorting alphabetical

我按标题按字母顺序对帖子进行排序,如下所示:

   <?php
      {
       $posts = get_posts($query_string . 
        '&orderby=title&order=asc&posts_per_page=-1');
      } 
      get_template_part( 'loop', 'category' );
    ?>

我想从排序中排除“the”,“a”和“an”等文章。

实现这一目标的最佳方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

  

我不知道有什么简单的方法可以做到这一点,

要实现此目的,您需要在帖子中添加custom meta field。将其命名为mytitle(比如说)。

对于您添加的新帖子,这很简单,您必须在添加帖子页面的mytitle自定义字段中添加修改后的标题(从标题中删除a,an)。

对于旧帖子这有点棘手,你必须编写一个PHP代码来检索帖子的标题使用php preg_replace从他们中删除'a','an','the'并使用以下内容将其添加到wordpress数据库的postmeta表中:

<?php //inside loop   
$query=INSERT INTO xyz_postmeta (post_id, meta_key, meta_value) VALUES ($postid, 'mytitle' $title);
$wpdb->query('$query'); ?> 

其中$ postid是循环内的帖子ID,$ title是你修改后的标题。

  

现在您已使用自定义mytitle字段更新了所有以前的帖子。

现在要显示,你必须使用自定义循环(不是主题中包含的循环)。

以下是如何制作基本自定义循环以显示按照mytitle的顺序排序的帖子。

$querystr = "
   SELECT wposts.*
   FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
   WHERE wposts.ID = wpostmeta.post_id
   AND wpostmeta.meta_key = 'mytitle'
   AND wposts.post_type = 'post'
   AND wposts.post_status = 'publish'
   ORDER BY wpostmeta.meta_value ASC
   ";

现在,您可以通过任何方式执行查询。 Wordpres提供了各种方法。 Here's a link

例如,你可以做这样的事情

$pageposts = $wpdb->get_results($querystr, OBJECT);
foreach ( $pageposts as $pagepost ) 
{
    echo $pagepost->post_title;
    //do other stuff to display content, meta etc..
}