是否按字母和数字顺序对wp帖子标题进行排序?

时间:2014-05-07 作者:Saurabh

有没有任何可能的方法可以按标题而不是按字母顺序对新的Wordpress post查询进行排序?

我有一些标题,按字母顺序有很多相同的名字,然后有一个数字,所以当然,例如Wordpresstitle12 在…前面title1.

$args = array( \'orderby\'=> \'title\', \'order\' => \'ASC\', ); $loop = new WP_Query( $args );
我知道我们有这个功能可以按升序对标题进行排序,但它不会这样对标题进行排序:-标题1标题2

请让我知道,如果我们有任何关于使用wp查询的工作?提前感谢您的帮助:)

2 个回复
SO网友:woony

从技术上讲,WP所做的是正确的。您可以使用前缀0重命名标题。

Title 001
Title 012 
否则

可以使用发布日期进行排序

或者您可以使用订单元字段,并使用wp_query

SO网友:s_ha_dum

你的头衔不是数字。如果没有数字,就无法进行数字排序。“T”在数字序列中的位置?

但是,如果您有一个一致的模式,可以利用它来拆分标题--我使用了一个空格字符,并假设了一个类似“title”+空格+“number”的模式--您可以这样做:

function numeric_sort_title_field($fields) {
  remove_filter(\'posts_fields\',\'numeric_sort_title_field\');
  global $wpdb;
  $fields .= \', \';
  $fields .= \'REVERSE(\';
    $fields .= \'LEFT(\';
      $fields .= "REVERSE({$wpdb->posts}.post_title),";
      $fields .= "LOCATE(\' \',REVERSE({$wpdb->posts}.post_title))";
    $fields .= \')\';
  $fields .= \') + 0\';
  $fields .= \' AS number\';

  $fields .= \', \';
  $fields .= \'REVERSE(\';
    $fields .= \'LEFT(\';
      $fields .= "REVERSE({$wpdb->posts}.post_title),";
      $fields .= "LENGTH({$wpdb->posts}.post_title) - LOCATE(\' \',REVERSE({$wpdb->posts}.post_title))";
    $fields .= \')\';
  $fields .= \') + 0\';
  $fields .= \' AS title_text\';

  return $fields;
}
add_filter(\'posts_fields\',\'numeric_sort_title_field\');

function numeric_sort_title($orderby) {
  remove_filter(\'posts_orderby\',\'numeric_sort_title\');
  $orderby = \' title_text, number\';
  return $orderby;
}
add_filter(\'posts_orderby\',\'numeric_sort_title\');

$q = new WP_Query(
  array(
    \'post_type\' => \'post\',
    \'posts_per_page\' => -1
  )
);
var_dump($q->request);
if ($q->have_posts()) {
  while ($q->have_posts()) {
    $q->the_post();
    the_title();
    echo \'<br>\';
  }
}
您应该按照标题的文本部分和数字部分对帖子进行排序。

结束

相关推荐

Show full posts in archive

我有一个问题,我需要在我的归档页面中显示完整的帖子。E、 G.我有>两篇帖子,我想在归档页面中完整显示每一篇帖子。谢谢我该如何处理胡曼主题呢?这是档案的内容。php主题:<?php get_header(); ?> <section class=\"content\"> <?php get_template_part(\'inc/page-title\'); ?> <?php if(function