对帖子进行排序时忽略‘a’

时间:2017-03-30 作者:Tom

我试图对页面上的帖子进行排序,但忽略了“a”、“an”和“the”。我在这一页上找到了一个很好的例子:https://css-tricks.com/ignoring-the-in-wordpress-queries/

我的查询

$args = array(
    \'post_type\' => \'post\',
    \'posts_per_page\' => -1
);

add_filter(\'posts_fields\', \'wpcf_create_temp_column\'); // Add the temporary column filter
add_filter(\'posts_orderby\', \'wpcf_sort_by_temp_column\'); // Add the custom order filter

$query = new WP_Query( $args );

remove_filter(\'posts_fields\',\'wpcf_create_temp_column\'); // Remove the temporary column filter
remove_filter(\'posts_orderby\', \'wpcf_sort_by_temp_column\'); // Remove the temporary order filter 
我的职能。php

function wpcf_create_temp_column($fields) {
  global $wpdb;
  $matches = \'The|A|An\';
  $has_the = " CASE 
      WHEN $wpdb->posts.post_title regexp( \'^($matches)[[:space:]]\' )
        THEN trim(substr($wpdb->posts.post_title from 4)) 
      ELSE $wpdb->posts.post_title 
        END AS title2";
  if ($has_the) {
    $fields .= ( preg_match( \'/^(\\s+)?,/\', $has_the ) ) ? $has_the : ", $has_the";
  }
  return $fields;
}

function wpcf_sort_by_temp_column ($orderby) {
  $custom_orderby = " UPPER(title2) ASC";
  if ($custom_orderby) {
    $orderby = $custom_orderby;
  }
  return $orderby;
}
查询是对以“The”和“an”开头的帖子进行正确排序。不过,它并没有正确排序以“a”开头的帖子。例如,“他们自己的联盟”,就出现在“鹰”之后“派对海滩的恐怖”后面是一部短片,“合唱队”后面是“霍顿”有什么想法吗?

1 个回复
SO网友:Casper

这是因为您是从第四个字符开始匹配的,因为它应该只与“the”(三个字符之后)一起使用。然后,文章作者添加了一个具有类似效果的“an”<我想他毕竟没有考“a”。

您的代码与此匹配:

派对海滩的恐怖

短胶片

霍顿

荷鲁斯线

请参阅:THEN trim(substr($wpdb->posts.post\\u titlefrom 4)

您应该使用正则表达式来修剪尾部A|AN|THE 甚至可以使用PHP对它们进行排序。

相关推荐

使用WP_QUERY混合发布日期和发布元值

正在寻找使用自定义字段将旧帖子推送到WP\\u查询中的方法。例如,我今年有10篇文章,想将过去的2篇文章重新发布到自定义rss提要。因此,对于旧帖子,必须按照帖子日期和帖子元中的值对帖子进行排序:new post - (post date: 2018-11-11) new post - (post date: 2018-11-10) old post - (post date: 2017-05-01, post-meta date: 2018-11-09) new post - (